---
title: "Microsoft Agent Framework"
description: "TwexAPI MCP üzerinden tweet arama, profiller ve incelenen X yazma işlemleri için Python veya .NET Microsoft Agent Framework iş akışları oluşturun."
---

TwexAPI'nin MCP sunucusu aracılığıyla bir Microsoft Agent Framework Twitter API agent'ı oluşturun. Tweet arayın, profilleri inceleyin, trendleri okuyun ve yazma işlemlerini gözden geçirin. Tweet kimliklerini, imleçleri ve rota adlarını sohbet dökümünün dışında saklayın.

## TwexAPI ile Microsoft Agent Framework'ü neden kullanmalısınız?

Framework, Python veya .NET'te araç çağırma agent'larını barındırır. TwexAPI, Streamable HTTP üzerinden `explore` ve `twexapi_request` sağlar.

| Agent görevi | TwexAPI rotası | Bir sonraki adım için saklayın |
| --- | --- | --- |
| Tweet arama | `POST /twitter/advanced_search/page` | Sorgu, tweet kimlikleri, yazarlar, `created_at`, imleç |
| Profil inceleme | `GET /twitter/{screen_name}/about` | Kullanıcı kimliği, kullanıcı adı, biyografi, takipçi sayısı |
| Takipçi listeleme | `POST /v3/twitter/users/followers` | Kullanıcı adı, takipçi satırları, `next_cursor` |
| Gönder veya yanıtla | `POST /twitter/tweets/create` | Tweet kimliği, rota, insan onayı, çerez onayı |

Microsoft agent host'larını zaten çalıştırıyorsanız bu framework'ü kullanın. Model olmadan deterministik işler için [Python SDK](/sdks/python) veya [C# SDK](/sdks/csharp) kullanın.

## Önkoşullar

- Python 3.10 veya üzeri, ya da MCP Streamable HTTP desteğine sahip .NET 8+ host
- Bir [TwexAPI API anahtarı](https://twexapi.io/dashboard)
- Agent runtime için yapılandırılmış bir model
Public docs focus on API-key reads.

Herkese açık X okumaları X Developer kimlik bilgileri gerektirmez. TwexAPI ile kimlik doğrulaması yapın.

## Kurulum

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'ye bağlanın

```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",
)
```

Eşdeğer host JSON:

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

Kimlik doğrulamasız MCP istekleri `401` döndürür.

## Tam örnek (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())
```

Model JSON'u Markdown çitleriyle sarıyorsa çitleri kaldırın. Dosyayı konuşma durumunun dışında kalıcı hale getirin.

## .NET host taslağı

```csharp
var mcp = new McpStreamableHttpTool
{
    Name = "twexapi",
    Url = new Uri("https://api.twexapi.io/mcp"),
    Headers = { ["x-api-key"] = Environment.GetEnvironmentVariable("TWEXAPI_API_KEY")! },
};
```

Aynı talimatı kullanın: önce `explore`, imleçleri koruyun, `read_only: false` öncesinde durun. Tipli REST çağrıları [C# SDK](/sdks/csharp) içinde olmalıdır.

## MCP yanıt sözleşmesini koruyun

Her sayfada aynı sorgu ve filtreleri yeniden kullanın. Her imleci opak kabul edin.

İstenen toplam karşılandığında, `has_more` false olduğunda, `next_cursor` tekrarlandığında veya sayfa sınırına ulaşıldığında sayfalamayı durdurun.

## Devam ettirilebilir agent devri tutun

<CardGroup cols={2}>
  <Card title="Tweet sayfaları" icon="message-square">
    `tweet_id`, `text`, `author_username`, `created_at`, `has_more`, `next_cursor` ve orijinal sorguyu saklayın.
  </Card>
  <Card title="Profil satırları" icon="user-round">
    `user_id`, `username`, `name`, `description` ve takipçi sayılarını saklayın.
  </Card>
  <Card title="Takipçi sayfaları" icon="users">
    Kaynak kullanıcı adı, takipçi satırları, `next_cursor` ve sayfa indeksini saklayın.
  </Card>
  <Card title="Yazma işlemleri" icon="send">
    Rotayı, önizleme metnini ve onayı saklayın. Çerezleri devir dosyasının dışında tutun. Bkz..
  </Card>
</CardGroup>

Bkz. [Agent MCP Handoff](/mcp/agent-handoff).

## Hata işleme oluşturun

| Durum | Anlam | Agent kararı |
| --- | --- | --- |
| `400` | Geçersiz rota veya parametreler | Yeniden denemeden önce isteği düzeltin |
| `401` | Eksik veya geçersiz API anahtarı | Durdurun ve kimlik bilgisini değiştirin |
| `403` | Erişim reddedildi veya kredi | Yazmaları duraklatın; [Get Balance](/api-reference/balance-endpoints/get-balance-api-balance-get) kontrol edin |
| `429` | Hız sınırına ulaşıldı | Geri çekilin, ardından aynı imleçle devam edin |
| `5xx` | Geçici sunucu hatası | Güvenli okumalara sınırlı geri çekilme uygulayın |

Zaman aşımından sonra okuma kontrolü yapmadan bir yazmayı asla yeniden denemeyin. Bkz. [Error Handling](/guides/error-handling) ve [Rate Limits](/guides/rate-limits).

## X işlemlerinden önce onay isteyin

```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) ile `--dry-run` önizlemesi yapın. Onaylanan yazmaları denetimsiz agent döngüsü yerine REST veya SDK üzerinden yürütün.

## Üretim rehberi

- Ortam başına bir API anahtarı kullanın. Anahtarları prompt'lara gömmeyin.
- MCP araç adlarını ve dönen `path` değerlerini günlükleyin, çerez başlıklarını değil.
- İmleçleri ve tweet kimliklerini yalnızca `ChatAgent` belleğinde değil, mağazanızda saklayın.
- Okuma araştırması ile yazma yürütmesini ayrı agent'lara veya işlere bölün.

## Paket sürümleri

| Paket | Desteklenen aralık |
| --- | --- |
| Python | `>=3.10` |
| `agent-framework` | `>=0.2` |
| `mcp` | `>=1.9` |
| `pydantic` | `>=2.7` |

## Sonraki adımlar

- [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)
