Microsoft Agent Framework
Construisez des workflows Microsoft Agent Framework Python ou .NET pour la recherche de tweets, les profils et les écritures X revues via TwexAPI MCP.
Construisez un agent Twitter API Microsoft Agent Framework via le serveur MCP de TwexAPI. Recherchez des tweets, inspectez des profils, lisez les tendances et revoyez les actions d’écriture. Persistez les ID de tweet, les curseurs et les noms de route en dehors du transcript de chat.
Pourquoi utiliser Microsoft Agent Framework avec TwexAPI ?
Le framework héberge des agents avec appels d’outils en Python ou .NET. TwexAPI fournit explore et twexapi_request via Streamable HTTP.
| Tâche agent | Route TwexAPI | Préserver pour l’étape suivante |
|---|---|---|
| Rechercher des tweets | POST /twitter/advanced_search/page |
Requête, ID de tweet, auteurs, created_at, curseur |
| Inspecter un profil | GET /twitter/{screen_name}/about |
ID utilisateur, username, biographie, nombre d’abonnés |
| Lister les abonnés | POST /v3/twitter/users/followers |
Username, lignes d’abonnés, next_cursor |
| Publier ou répondre | POST /twitter/tweets/create |
ID de tweet, route, approbation humaine, confirmation cookie |
Utilisez ce framework lorsque vous exécutez déjà des hosts Microsoft agent. Utilisez le SDK Python ou le SDK C# pour des jobs déterministes sans modèle.
Prérequis
- Python 3.10 ou plus récent, ou un host .NET 8+ avec support MCP Streamable HTTP
- Une clé API TwexAPI
- Un modèle configuré pour le runtime agent
- Un cookie Twitter ou
auth_tokenpour les actions d’écriture — consultez
Les lectures X publiques ne nécessitent pas des identifiants X Developer. Authentifiez avec TwexAPI.
Installation
Python :
python -m pip install "agent-framework>=0.2" mcp python-dotenv pydantic
TWEXAPI_API_KEY=YOUR_API_KEY
OPENAI_API_KEY=sk-...
Connecter TwexAPI MCP
import os
from agent_framework import MCPStreamableHTTPTool
mcp_tool = MCPStreamableHTTPTool(
name="twexapi",
url="https://api.twexapi.io/mcp",
headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
description="TwexAPI X/Twitter tools through MCP",
)
JSON de host équivalent :
{
"name": "twexapi",
"transport": "streamable-http",
"url": "https://api.twexapi.io/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
Les requêtes MCP non authentifiées renvoient 401.
Exemple complet (Python)
import asyncio
import os
from pathlib import Path
from typing import Literal
from agent_framework import ChatAgent, MCPStreamableHTTPTool
from agent_framework.openai import OpenAIChatClient
from dotenv import load_dotenv
from pydantic import BaseModel
class TweetRow(BaseModel):
tweet_id: str
text: str
author_username: str | None = None
created_at: str | None = None
class TweetSearchHandoff(BaseModel):
query: str
route_used: str
tweets: list[TweetRow]
has_more: bool
next_cursor: str | None = None
stop_reason: Literal[
"complete",
"requested_limit",
"cursor_stalled",
"page_cap",
]
async def main() -> None:
load_dotenv()
mcp_tool = MCPStreamableHTTPTool(
name="twexapi",
url="https://api.twexapi.io/mcp",
headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
description="TwexAPI X/Twitter tools through MCP",
)
async with mcp_tool:
agent = ChatAgent(
chat_client=OpenAIChatClient(model_id="gpt-4o"),
name="twexapi_agent",
instructions=(
"Use TwexAPI MCP. Call explore before twexapi_request. "
"Preserve exact IDs and cursors. Never invent missing fields. "
"Ask for confirmation before read_only: false actions. "
"Return only JSON for TweetSearchHandoff."
),
tools=[mcp_tool],
)
response = await agent.run(
"Search 25 recent tweets about Microsoft Agent Framework MCP. "
"Return query, route_used, tweets, has_more, next_cursor, and stop_reason as JSON."
)
handoff = TweetSearchHandoff.model_validate_json(response.text)
Path("twexapi-agent-framework-handoff.json").write_text(
handoff.model_dump_json(indent=2),
encoding="utf-8",
)
asyncio.run(main())
Supprimez les fences Markdown si le modèle enveloppe le JSON. Persistez le fichier en dehors de l’état de conversation.
Sketch de host .NET
var mcp = new McpStreamableHttpTool
{
Name = "twexapi",
Url = new Uri("https://api.twexapi.io/mcp"),
Headers = { ["x-api-key"] = Environment.GetEnvironmentVariable("TWEXAPI_API_KEY")! },
};
Utilisez la même instruction : explore en premier, préservez les curseurs, arrêtez avant read_only: false. Les appels REST typés appartiennent au SDK C#.
Préserver le contrat de réponse MCP
Réutilisez la même requête et filtres sur chaque page. Traitez chaque curseur comme opaque.
Arrêtez la pagination lorsque le total demandé est atteint, has_more est false, next_cursor se répète ou le plafond de page est atteint.
Maintenir un handoff agent résilient
Pages de tweets
Stockez tweet_id, text, author_username, created_at, has_more, next_cursor et la requête originale.
Lignes de profil
Stockez user_id, username, name, description et les compteurs d’abonnés.
Pages d'abonnés
Stockez le username source, les lignes d’abonnés, next_cursor et l’index de page.
Actions d'écriture
Stockez la route, le texte de prévisualisation et l’approbation. Gardez les cookies hors du fichier de handoff. Consultez.
Consultez Agent MCP Handoff.
Construire la gestion des erreurs
| Statut | Signification | Décision agent |
|---|---|---|
400 |
Route ou paramètres invalides | Corrigez la requête avant de réessayer |
401 |
Clé API manquante ou invalide | Arrêtez et remplacez l’identifiant |
403 |
Accès refusé ou crédits | Pausez les écritures ; consultez Get Balance |
429 |
Limite de débit atteinte | Ralentissez, puis reprenez le même curseur |
5xx |
Défaillance serveur temporaire | Appliquez un backoff borné aux lectures sûres |
Ne jamais réessayer une écriture après un timeout sans vérification de lecture. Consultez Gestion des erreurs et Limites de débit.
Exiger une approbation avant les actions X
You have access to TwexAPI MCP tools.
Call explore before twexapi_request.
Use only relative paths returned by explore.
Return tweet_id, user_id, author_username, route_used, has_more, and next_cursor.
Ask for confirmation before read_only: false actions.
Never print cookie or auth_token values.
Prévisualisez avec le CLI --dry-run. Exécutez les écritures approuvées via REST ou un SDK, pas une boucle d’agent non supervisée.
Conseils de production
- Utilisez une clé API par environnement. Ne pas intégrer des clés dans les prompts.
- Journalisez les noms d’outils MCP et les valeurs
pathretournées, pas les headers cookie. - Persistez les curseurs et ID de tweet dans votre store, pas uniquement dans la mémoire
ChatAgent. - Séparez la recherche en lecture et l’exécution d’écriture dans des agents ou jobs distincts.
Versions des packages
| Package | Plage supportée |
|---|---|
| Python | >=3.10 |
agent-framework |
>=0.2 |
mcp |
>=1.9 |
pydantic |
>=2.7 |