---
title: "Google ADK"
description: "TwexAPI MCP aracılığıyla tweet araması, profiller, trendler ve incelenen X yazıları için Gemini ADK aracıları oluşturun."
---

TwexAPI'nin MCP sunucusu aracılığıyla bir Google ADK Twitter API aracısı oluşturun. Tweet'leri arayın, profilleri inceleyin, eğilimleri okuyun ve yazma işlemlerini inceleyin. Tweet kimliklerini, imleçleri ve rota adlarını dayanıklı JSON olarak koruyun.

## Neden Google ADK'yı TwexAPI ile kullanmalısınız?

ADK, Gemini'nin ilkidir. TwexAPI uzak bir MCP araç seti olarak görünür: 'explore' rotaları keşfeder, `twexapi_request` onları yürütür.

| Temsilci görevi | TwexAPI rotası | Bir sonraki adım için saklayın |
| --- | --- | --- |
| Tweet'lerde ara | `POST /twitter/advanced_search/page` | Sorgu, tweet kimlikleri, yazarlar, "created_at", imleç |
| Bir profili inceleme | `GET /twitter/{screen_name}/about` | Kullanıcı kimliği, kullanıcı adı, biyografi, takipçi sayısı |
| Trendleri okuyun | `GET /twitter/global-trending/tweets` | Ülke, konu, tweet satırları |
| Gönder veya yanıtla | `POST /twitter/tweets/create` | Tweet kimliği, rota, insan onayı, çerez onayı |

Çalışma zamanı Gemini olduğunda ADK'yı kullanın. Model gerektirmeyen zamanlanmış işler için [Python SDK](/sdks/python) veya [Prefect](/guides/prefect) kullanın.

## Önkoşullar

- Python 3.10 veya üzeri
- Bir [TwexAPI API anahtarı](https://twexapi.io/dashboard)
- Bir Google AI API anahtarı
Public docs focus on API-key reads.

Genel X okumalarının X Developer kimlik bilgilerine ihtiyacı yoktur. TwexAPI ile kimlik doğrulaması yapın.

## Kurulum

```bash
python -m pip install "google-adk>=1.0" python-dotenv
```

```txt .env
TWEXAPI_API_KEY=YOUR_API_KEY
GOOGLE_API_KEY=...
```

## TwexAPI MCP'ye bağlanın

```python
import os

from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams

twexapi_toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://api.twexapi.io/mcp",
        headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
    )
)
```

Kimliği doğrulanmamış MCP istekleri `401` döndürür. İlk istekte `x-api-key` gönderin.

## Tam örnek

```python
import asyncio
import os
from pathlib import Path
from typing import Literal

from dotenv import load_dotenv
from google.adk.agents import LlmAgent
from google.adk.runners import InMemoryRunner
from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams
from google.genai import types
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()

    twexapi_toolset = McpToolset(
        connection_params=StreamableHTTPConnectionParams(
            url="https://api.twexapi.io/mcp",
            headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
        )
    )

    agent = LlmAgent(
        model="gemini-2.5-flash",
        name="twexapi_agent",
        instruction=(
            "Use TwexAPI for Twitter API requests. Call explore before twexapi_request. "
            "Preserve exact IDs and cursors. Never invent missing tweet fields. "
            "Ask for confirmation before read_only: false actions. "
            "Return only valid JSON for TweetSearchHandoff."
        ),
        tools=[twexapi_toolset],
    )

    runner = InMemoryRunner(agent=agent, app_name="twexapi_app")
    session = await runner.session_service.create_session(
        app_name="twexapi_app",
        user_id="user-1",
    )

    response_parts: list[str] = []
    async for event in runner.run_async(
        user_id="user-1",
        session_id=session.id,
        new_message=types.Content(
            role="user",
            parts=[
                types.Part(
                    text=(
                        "Search 25 recent tweets about Google ADK MCP. "
                        "Return query, route_used, tweet rows, has_more, "
                        "next_cursor, and stop_reason as JSON."
                    )
                )
            ],
        ),
    ):
        if event.content and event.content.parts:
            response_parts.extend(
                part.text for part in event.content.parts if part.text
            )

    handoff = TweetSearchHandoff.model_validate_json("".join(response_parts))
    Path("twexapi-adk-handoff.json").write_text(
        handoff.model_dump_json(indent=2),
        encoding="utf-8",
    )
    await twexapi_toolset.close()


asyncio.run(main())
```

Model JSON'u Markdown fence içine alırsa, `model_validate_json` öncesinde kaldırın. Dosyayı ADK oturumunun dışında kalıcı hale getirin.

## 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 sayfalandırmayı durdurun.

## Devam ettirilebilir agent devrini sürdürün

<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="Trend satırları" icon="radio">
    Ülke, konu, içerik etiketi ve tweet kimliklerini saklayın.
  </Card>
  <Card title="Yazma işlemleri" icon="send">
    Rotayı, önizleme metnini ve onayı saklayın. Çerezleri gizli bir depoda 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 |

Bkz. [Error Handling](/guides/error-handling) ve [Rate Limits](/guides/rate-limits).

## Çoklu agent kurulumu

TwexAPI araçlarını yalnızca toplayıcıya verin. Analiz ve yazma agent'larını araçsız tutun; böylece yazma onayları açık kalır.

```python
researcher = LlmAgent(
    model="gemini-2.5-flash",
    name="researcher",
    instruction="Collect X/Twitter data through TwexAPI MCP and return compact JSON.",
    tools=[twexapi_toolset],
)

analyst = LlmAgent(
    model="gemini-2.5-flash",
    name="analyst",
    instruction="Analyze structured tweet rows. Do not call external tools.",
)
```

## Dinamik başlıklar ve araç filtreleme

Bir ADK uygulaması birden fazla TwexAPI hesabına hizmet verdiğinde dinamik başlıklar kullanın.

```python
def get_headers(context):
    return {"x-api-key": context.state["twexapi_api_key"]}


twexapi_toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://api.twexapi.io/mcp",
    ),
    header_provider=get_headers,
)
```

Planlama agent'larına yalnızca keşfi açın:

```python
planning_toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://api.twexapi.io/mcp",
        headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
    ),
    tool_filter=["explore"],
)
```

## Paket versiyonları

| Paket | Desteklenen aralık |
| --- | --- |
| Python | `>=3.10` |
| `google-adk` | `>=1.0` |
| `pydantic` | `>=2.7` |

## Sonraki adımlar

- [MCP Araçları](/mcp/tools)
- [Ajan MCP Aktarımı](/mcp/agent-handoff)
-
- [Python SDK'sı](/sdks/python)
- [Gelişmiş Twitter Araması](/api-reference/search-endpoints/get-data-page-twitter-advanced-search-page-post)
