---
title: "Microsoft Agent Framework"
description: "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](/sdks/python) または [C# SDK](/sdks/csharp) を使用してください。

## 前提条件

- Python 3.10 以降、または MCP Streamable HTTP 対応の .NET 8+ ホスト
- [TwexAPI API キー](https://twexapi.io/dashboard)
- エージェントランタイム用に設定されたモデル
Public docs focus on API-key reads.

公開 X の読み取りには X Developer 認証情報は不要です。TwexAPI で認証してください。

## インストール

Python:

```bash
python -m pip install "agent-framework>=0.2" mcp python-dotenv pydantic
```

```txt .env
TWEXAPI_API_KEY=YOUR_API_KEY
OPENAI_API_KEY=sk-...
```

## TwexAPI MCP に接続

```python
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:

```json
{
  "name": "twexapi",
  "transport": "streamable-http",
  "url": "https://api.twexapi.io/mcp",
  "headers": {
    "x-api-key": "YOUR_API_KEY"
  }
}
```

認証なし MCP リクエストは `401` を返します。

## 完全な例（Python）

```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 ホストスケッチ

```csharp
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](/sdks/csharp) に属します。

## MCP レスポンス契約を保持

各ページで同じクエリとフィルターを再利用します。各カーソルは不透明な値として扱います。

ページネーションは、要求総数に達した、`has_more` が false、`next_cursor` が繰り返される、またはページ上限に達した時点で停止します。

## 再開可能なエージェントハンドオフを保持

<CardGroup cols={2}>
  <Card title="ツイートページ" icon="message-square">
    `tweet_id`, `text`, `author_username`, `created_at`, `has_more`, `next_cursor`, 元のクエリを保存。
  </Card>
  <Card title="プロフィールデータ" icon="user-round">
    `user_id`, `username`, `name`, `description`, フォロワー数を保存。
  </Card>
  <Card title="フォロワーページ" icon="users">
    ソースユーザー名、フォロワー行、`next_cursor`、ページインデックスを保存。
  </Card>
  <Card title="書き込みアクション" icon="send">
    ルート、プレビューテキスト、承認を保存。cookie はハンドオフファイル外に保持。 を参照。
  </Card>
</CardGroup>

[Agent MCP Handoff](/mcp/agent-handoff) を参照してください。

## エラー処理を構築

| ステータス | 意味 | エージェントの判断 |
| --- | --- | --- |
| `400` | 無効なルートまたはパラメータ | リトライ前にリクエストを修正 |
| `401` | API キー欠落または無効 | 停止し、認証情報を差し替え |
| `403` | アクセス拒否またはクレジット | 書き込みを一時停止。[Get Balance](/api-reference/balance-endpoints/get-balance-api-balance-get) を確認 |
| `429` | レート制限到達 | バックオフ後、同じカーソルから再開 |
| `5xx` | 一時的なサーバー障害 | 安全な読み取りに上限付きバックオフを適用 |

タイムアウト後の書き込みを読み戻しチェックなしでリトライしないでください。[Error Handling](/guides/error-handling) と [Rate Limits](/guides/rate-limits) を参照してください。

## X アクション前に承認を必須に

```txt
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](/sdks/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` |

## 次のステップ

- [MCP Tools](/mcp/tools)
- [Agent MCP Handoff](/mcp/agent-handoff)
-
- [Python SDK](/sdks/python)
- [C# SDK](/sdks/csharp)
- [Advanced Twitter Search](/api-reference/search-endpoints/get-data-page-twitter-advanced-search-page-post)
