コンテンツにスキップ
Twexapi
日本語
Esc
移動開く⌘Jプレビュー
このページの内容

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 経由で exploretwexapi_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 HandlingRate 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

次のステップ

このページは役に立ちましたか?