Microsoft Agent Framework
TwexAPI MCP 経由で Python または .NET Microsoft Agent Framework ワークフローを構築し、ツイート検索、プロフィール、レビュー済み X 書き込みを実現する。
TwexAPI の MCP サーバー経由で Microsoft Agent Framework Twitter API エージェントを構築します。ツイート検索、プロフィール確認、トレンド読み取り、書き込みアクションのレビューが可能です。ツイート ID、カーソル、ルート名をチャットトランスクリプト外に永続化してください。
TwexAPI と Microsoft Agent Framework を組み合わせる理由
このフレームワークは Python または .NET でツール呼び出しエージェントをホストします。TwexAPI は Streamable HTTP 経由で explore と twexapi_request を提供します。
| Agent task | TwexAPI route | Preserve for the next step |
|---|---|---|
| ツイート検索 | POST /twitter/advanced_search/page |
クエリ、ツイート ID、著者、created_at、カーソル |
| プロフィール確認 | GET /twitter/{screen_name}/about |
ユーザー ID、ユーザー名、略歴、フォロワー数 |
| フォロワー一覧 | POST /v3/twitter/users/followers |
ユーザー名、フォロワー行、next_cursor |
| 投稿または返信 | POST /twitter/tweets/create |
ツイート ID、ルート、人間の承認、cookie 確認 |
Microsoft エージェントホストをすでに実行している場合はこのフレームワークを使用してください。モデル不要の決定論的ジョブには Python SDK または C# SDK を使用してください。
前提条件
- Python 3.10 以降、または MCP Streamable HTTP 対応の .NET 8+ ホスト
- TwexAPI API キー
- エージェントランタイム用に設定されたモデル Public docs focus on API-key reads.
公開 X の読み取りには X Developer 認証情報は不要です。TwexAPI で認証してください。
インストール
Python:
python -m pip install "agent-framework>=0.2" mcp python-dotenv pydantic
TWEXAPI_API_KEY=YOUR_API_KEY
OPENAI_API_KEY=sk-...
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:
{
"name": "twexapi",
"transport": "streamable-http",
"url": "https://api.twexapi.io/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
認証なし MCP リクエストは 401 を返します。
完全な例(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())
モデルが JSON を Markdown フェンスで囲む場合は除去してください。ファイルは会話状態外に永続化してください。
.NET ホストスケッチ
var mcp = new McpStreamableHttpTool
{
Name = "twexapi",
Url = new Uri("https://api.twexapi.io/mcp"),
Headers = { ["x-api-key"] = Environment.GetEnvironmentVariable("TWEXAPI_API_KEY")! },
};
同じ指示を使用: 先に explore、カーソルを保持、read_only: false の前に停止。型付き REST 呼び出しは C# SDK に属します。
MCP レスポンス契約を保持
各ページで同じクエリとフィルターを再利用します。各カーソルは不透明な値として扱います。
ページネーションは、要求総数に達した、has_more が false、next_cursor が繰り返される、またはページ上限に達した時点で停止します。
再開可能なエージェントハンドオフを保持
ツイートページ
tweet_id, text, author_username, created_at, has_more, next_cursor, 元のクエリを保存。
プロフィールデータ
user_id, username, name, description, フォロワー数を保存。
フォロワーページ
ソースユーザー名、フォロワー行、next_cursor、ページインデックスを保存。
書き込みアクション
ルート、プレビューテキスト、承認を保存。cookie はハンドオフファイル外に保持。 を参照。
Agent MCP Handoff を参照してください。
エラー処理を構築
| ステータス | 意味 | エージェントの判断 |
|---|---|---|
400 |
無効なルートまたはパラメータ | リトライ前にリクエストを修正 |
401 |
API キー欠落または無効 | 停止し、認証情報を差し替え |
403 |
アクセス拒否またはクレジット | 書き込みを一時停止。Get Balance を確認 |
429 |
レート制限到達 | バックオフ後、同じカーソルから再開 |
5xx |
一時的なサーバー障害 | 安全な読み取りに上限付きバックオフを適用 |
タイムアウト後の書き込みを読み戻しチェックなしでリトライしないでください。Error Handling と Rate Limits を参照してください。
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.
CLI --dry-run でプレビュー。承認済み書き込みは REST または SDK 経由で実行し、無監督エージェントループでは実行しないでください。
本番ガイダンス
- 環境ごとに API キーを使用。プロンプトにキーを埋め込まない。
- cookie ヘッダーではなく MCP ツール名と返された
path値をログに記録。 - カーソルとツイート ID を
ChatAgentメモリだけでなくストアに永続化。 - 読み取りリサーチと書き込み実行を別エージェントまたはジョブに分割。
パッケージバージョン
| Package | Supported range |
|---|---|
| Python | >=3.10 |
agent-framework |
>=0.2 |
mcp |
>=1.9 |
pydantic |
>=2.7 |