Neu Kostenlos registrieren, 10 Aufrufe gratis. Bis zu 1 $, ohne Karte.

MCP-Server

Verbinden Sie jeden MCP-fähigen Agenten (Claude Code, Cursor, VS Code, Codex, das OpenAI Agents SDK und mehr) mit Synthorai, und zwar mit nur einer URL und Ihrem API-Schlüssel. Alle Modelle und Modalitäten, die Verwaltung von API-Schlüsseln und die Abrechnungsdaten werden zu Tools, die der Agent aufrufen kann. Jeder Aufruf wird genau wie die entsprechende REST-Anfrage authentifiziert, begrenzt und abgerechnet.

Endpunkthttps://synthorai.io/v1/mcp
TransportStreamable HTTP, zustandslos (keine Sessions), JSON-Antworten
AuthentifizierungAuthorization: Bearer <API key>
ℹ

Der Schlüssel, mit dem Sie sich verbinden, bestimmt, welche Tools Sie erhalten: Ein Inferenzschlüssel (sk-syn-…) ruft Modelle auf, ein Provisioning-Schlüssel (sk-syn-prov-…) verwaltet API-Schlüssel, und ein Billing-Schlüssel (sk-syn-bill-…) liest Guthaben und Nutzung. Braucht ein Agent mehr als eine Schlüsselart, verbinden Sie den Server einmal pro Schlüsselart.

Schnellstart

  1. Erstellen Sie in der Konsole auf der Seite API-Schlüssel einen API-Schlüssel. Geben Sie ihm für einen Agenten ein Ausgabenlimit und eine Modell-Allowlist.
  2. Fügen Sie den Server mit einem der folgenden Snippets zu Ihrem Client hinzu und lesen Sie den Schlüssel dabei aus einer Umgebungsvariablen, statt ihn in eine Datei einzufügen.
  3. Fragen Sie Ihren Agenten zum Beispiel: „Liste die drei günstigsten Modelle auf, die Tools unterstützen, lass dann das schnellste diese Datei zusammenfassen und sag mir, was es gekostet hat.“

Client verbinden

Alle Clients verwenden denselben Endpunkt und denselben Header. Setzen Sie zuerst SYNTHORAI_API_KEY in Ihrer Umgebung.

Claude Code

Führen Sie in Claude Code /mcp aus, um die Verbindung zu prüfen. Mit --scope user steht der Server in jedem Projekt zur Verfügung; alternativ committen Sie die .mcp.json-Variante, um ihn mit Ihrem Team zu teilen (der Schlüssel bleibt in der Umgebung jedes Entwicklers).

claude mcp add --transport http synthorai https://synthorai.io/v1/mcp \
  --header "Authorization: Bearer $SYNTHORAI_API_KEY"
{
  "mcpServers": {
    "synthorai": {
      "type": "http",
      "url": "https://synthorai.io/v1/mcp",
      "headers": { "Authorization": "Bearer ${SYNTHORAI_API_KEY}" }
    }
  }
}

Cursor

Legen Sie dies in ~/.cursor/mcp.json (alle Projekte) oder .cursor/mcp.json (ein Projekt) ab.

{
  "mcpServers": {
    "synthorai": {
      "url": "https://synthorai.io/v1/mcp",
      "headers": { "Authorization": "Bearer ${env:SYNTHORAI_API_KEY}" }
    }
  }
}

VS Code (GitHub Copilot)

Legen Sie dies in .vscode/mcp.json ab. VS Code fragt den Schlüssel einmal ab und speichert ihn sicher.

{
  "inputs": [
    { "type": "promptString", "id": "synthorai-key", "description": "Synthorai API key", "password": true }
  ],
  "servers": {
    "synthorai": {
      "type": "http",
      "url": "https://synthorai.io/v1/mcp",
      "headers": { "Authorization": "Bearer ${input:synthorai-key}" }
    }
  }
}

Codex CLI

Legen Sie dies in ~/.codex/config.toml ab, oder führen Sie codex mcp add synthorai --url https://synthorai.io/v1/mcp --bearer-token-env-var SYNTHORAI_API_KEY aus.

[mcp_servers.synthorai]
url = "https://synthorai.io/v1/mcp"
bearer_token_env_var = "SYNTHORAI_API_KEY"

OpenAI Responses API

Die Server von OpenAI rufen den Endpunkt in Ihrem Namen auf. Lassen Sie die IP-Allowlist des Schlüssels daher leer (oder lassen Sie die Egress-Bereiche von OpenAI zu). Mit allowed_tools geben Sie nur die Tools frei, die das Modell braucht.

import os
from openai import OpenAI

client = OpenAI()
resp = client.responses.create(
    model="gpt-4.1",
    tools=[{
        "type": "mcp",
        "server_label": "synthorai",
        "server_url": "https://synthorai.io/v1/mcp",
        "headers": {"Authorization": f"Bearer {os.environ['SYNTHORAI_API_KEY']}"},
        "allowed_tools": ["list_models", "chat_completion"],
        "require_approval": "never",
    }],
    input="Find the cheapest Synthorai chat model with tool support and ask it for a haiku about gateways.",
)
print(resp.output_text)

OpenAI Agents SDK

Funktioniert genauso mit jedem Framework, das auf den MCP-Client-SDKs aufbaut (LangChain, LlamaIndex, Pydantic AI, Vercel AI SDK, Mastra …): Richten Sie seinen Transport für Streamable HTTP mit dem Header auf den Endpunkt aus.

import asyncio, os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async def main():
    async with MCPServerStreamableHttp(
        name="synthorai",
        params={
            "url": "https://synthorai.io/v1/mcp",
            "headers": {"Authorization": f"Bearer {os.environ['SYNTHORAI_API_KEY']}"},
            "timeout": 120,
        },
        cache_tools_list=True,
    ) as synthorai:
        agent = Agent(name="assistant", instructions="Use the Synthorai tools.", mcp_servers=[synthorai])
        result = await Runner.run(agent, "List three chat models under $1 per million input tokens.")
        print(result.final_output)

asyncio.run(main())

MCP Python SDK

import asyncio, os, httpx2
from mcp import Client
from mcp.client.streamable_http import streamable_http_client

async def main():
    http = httpx2.AsyncClient(
        headers={"Authorization": f"Bearer {os.environ['SYNTHORAI_API_KEY']}"}, timeout=120)
    async with Client(streamable_http_client("https://synthorai.io/v1/mcp", http_client=http)) as mcp:
        tools = await mcp.list_tools()
        print([t.name for t in tools.tools])
        result = await mcp.call_tool("chat_completion",
                                     {"model": "deepseek-v4-flash", "prompt": "Say hi in five words"})
        print(result.content[0].text)

asyncio.run(main())

Claude Desktop

Benutzerdefinierte Connectors in Claude Desktop und claude.ai melden sich per OAuth an, was dieser Server noch nicht anbietet (siehe Roadmap unten). Bis dahin kann sich Claude Desktop über die Bridge mcp-remote verbinden, die den Header für Sie ergänzt:

{
  "mcpServers": {
    "synthorai": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://synthorai.io/v1/mcp", "--header", "Authorization:${AUTH_HEADER}"],
      "env": { "AUTH_HEADER": "Bearer sk-syn-..." }
    }
  }
}

curl

Der Server spricht einfaches JSON-RPC über HTTP, ein SDK ist also nicht nötig. Ein Handshake ist nicht erforderlich: Jede Anfrage steht für sich.

curl https://synthorai.io/v1/mcp \
  -H "Authorization: Bearer $SYNTHORAI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"chat_completion",
                 "arguments":{"model":"deepseek-v4-flash","prompt":"Say hi in five words"}}}'

Beispielantwort

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      { "type": "text", "text": "Hi there, great to meet!" },
      { "type": "text", "text": "[deepseek-v4-flash · finish_reason stop · 12 in / 7 out tokens · cost $0.0000031 · request_id 0199a7c2-…]" }
    ],
    "structuredContent": {
      "model": "deepseek-v4-flash",
      "content": "Hi there, great to meet!",
      "finish_reason": "stop",
      "usage": { "prompt_tokens": 12, "completion_tokens": 7, "total_tokens": 19 },
      "cost_usd": 0.0000031,
      "request_id": "0199a7c2-…"
    }
  }
}

Tools

tools/list liefert nur die Tools, die Ihr Schlüssel nutzen kann: Die Liste wird nach Schlüsselart und nach den für Ihren Workspace freigeschalteten Funktionen gefiltert (Bild- und Videogenerierung befinden sich in einer eingeschränkten Vorschau). Tools, die ein Modell ausführen, kosten genau so viel wie der REST-Aufruf; alle anderen Tools sind kostenlos.

Inferenzschlüssel

ToolFunktionREST-EndpunktHinweise
list_models Modelle, die der Schlüssel aufrufen kann, günstigste zuerst, mit Kontextlänge, Modalitäten, Fähigkeiten und Listenpreisen. Filter: Kategorie, Fähigkeit, Eingabemodalität, Suche. GET /v1/models + /api/models nur lesend
get_model Alle Details zu einem Modell, einschließlich des effektiven Preises nach etwaigen Rabatten und ob der Schlüssel es aufrufen kann. GET /v1/models/{id} nur lesend
get_pricing Die Preisliste (USD nach Rabatten): Preise pro Token, pro Aufruf, pro Minute, pro Sekunde und gestaffelte Preise. GET /api/pricing nur lesend
chat_completion Eine Chat Completion auf einem beliebigen Modell: ein Prompt oder ein vollständiges messages-Array (Bilder, Tool-Ergebnisse), optional mit strukturierter Ausgabe, Function-Tools, Reasoning Effort und Fallback-Modellen. Liefert Text, Tool-Aufrufe, Nutzung, Kosten und request_id. POST /v1/chat/completions kostenpflichtig
generate_image Bilder generieren oder bearbeiten; Rückgabe als Bildinhalt oder mit response_format=url als Links. POST /v1/images/generations kostenpflichtig
list_image_models Bildmodelle mit Preisen und unterstützten Eingaben. GET /v1/images/models nur lesend
create_video Startet einen Videojob aus einem Prompt oder einem ersten Frame; kann bis zu 60 s auf den Abschluss warten. Abgerechnet wird, wenn der Job abgeschlossen ist. POST /v1/videos kostenpflichtig
get_video Jobstatus; nach Abschluss Links zu den Videos (etwa 24 Stunden gültig). GET /v1/videos/{id} nur lesend
cancel_video Bricht einen Job ab, der noch in der Warteschlange steht (ein bereits gestarteter Job lässt sich nicht stoppen). Abgebrochene und fehlgeschlagene Jobs werden nicht abgerechnet. DELETE /v1/videos/{id} destruktiv
list_video_models Videomodelle mit Auflösungen, Dauern und Preisen. GET /v1/videos/models nur lesend
text_to_speech Sprache aus Text, zurückgegeben als Audioinhalt. POST /v1/audio/speech kostenpflichtig
transcribe_audio Text aus Audio, übergeben als URL oder Base64-Daten (bis 25 MB). POST /v1/audio/transcriptions kostenpflichtig
create_embeddings Embedding-Vektoren für einen Text oder einen Batch von bis zu 2048. POST /v1/embeddings kostenpflichtig
get_key_info Ausgabenlimit des Schlüssels, verbrauchter und verbleibender Betrag, Reset-Zeitraum sowie Ausgaben heute / diese Woche / diesen Monat (USD). GET /v1/key nur lesend
get_generation Der Abrechnungsdatensatz einer Anfrage per request_id: Kosten, Token-Aufschlüsselung, Latenz, Status. GET /v1/generation nur lesend

Provisioning-Schlüssel

ToolFunktionREST-EndpunktHinweise
create_api_key Erstellt einen Inferenzschlüssel mit Ausgabenlimit, Reset-Zeitraum, Modell- und IP-Allowlists, Ablaufdatum und Metadaten. Der geheime Schlüssel steht nur im Ergebnis. POST /api/provisioning/keys ändert Daten
list_api_keys Die Inferenzschlüssel des Workspace mit Limits, Ausgaben und Status; filterbar nach Metadaten. GET /api/provisioning/keys nur lesend
get_api_key Einstellungen, Ausgaben und Status eines Schlüssels. GET /api/provisioning/keys/{id} nur lesend
update_api_key Ändert die Einstellungen eines Schlüssels oder deaktiviert / reaktiviert ihn. Nur die angegebenen Felder ändern sich. PATCH /api/provisioning/keys/{id} destruktiv
delete_api_key Löscht einen Schlüssel dauerhaft. DELETE /api/provisioning/keys/{id} destruktiv

Billing-Schlüssel

ToolFunktionREST-EndpunktHinweise
get_balance Aktuell verfügbares Guthaben (USD), mit Aktionsguthaben und geplanten Gutschriften. GET /api/v1/billing/balance nur lesend
get_usage Ausgaben und Anfragen pro Stunde oder Tag, nach Schlüssel und/oder Modell. GET /api/v1/billing/usage nur lesend
list_usage_records Datensätze pro Anfrage mit Tokens, Kosten und Status, paginiert per Cursor. GET /api/v1/billing/records nur lesend
get_billing_summary Summen über einen Zeitraum mit den Top-Schlüsseln und -Modellen. GET /api/v1/billing/summary nur lesend
get_data_freshness Wie aktuell die Abrechnungsdaten sind. GET /api/v1/billing/freshness nur lesend

list_models, get_model und get_pricing stehen jeder Schlüsselart zur Verfügung; bei einem Inferenzschlüssel zeigt list_models nur die Modelle, die dieser Schlüssel aufrufen kann.

So sehen Ergebnisse aus

Jedes Ergebnis enthält einen lesbaren Textblock und dieselben Daten als JSON in structuredContent, sodass Chat-Clients wie Programme damit arbeiten können. Bilder und Audio kommen als Bild- und Audioinhalt zurück, Videos als Links. Tools, die ein Modell ausführen, enden mit einer Belegzeile (Modell, Tokens, Kosten und request_id) , die get_generation später nachschlagen kann.

Berechtigungen und Sicherheit

  • Dieselben Regeln wie bei der REST-API. Jeder Tool-Aufruf wird von dem jeweils genannten REST-Endpunkt mit Ihrem Schlüssel ausgeführt: Authentifizierung, Schlüsselart, IP-Allowlist, Modell-Allowlist, Ausgabenlimit, Rate-Limits und Abrechnung gelten unverändert. MCP fügt keine Berechtigung hinzu und überspringt keine Prüfung.
  • Minimale Rechte je Schlüsselart. Inferenzschlüssel können keine Schlüssel verwalten und keine Workspace-Abrechnung lesen; Provisioning-Schlüssel können keine Modelle aufrufen; Billing-Schlüssel sind nur lesend.
  • Hinweise zur Freigabe. Jedes Tool trägt MCP-Annotationen. Nur lesende Tools sind mit readOnlyHint markiert; Tools, die Geld ausgeben, gelten nicht als nur lesend; update_api_key, delete_api_key und cancel_video sind mit destructiveHint markiert. Clients entscheiden anhand dieser Angaben, wann sie vor der Ausführung bei Ihnen nachfragen.
  • Empfohlener Schlüssel für Agenten: ein eigener Inferenzschlüssel mit täglich zurückgesetztem Ausgabenlimit, einer allowed_models-Liste und einer IP-Allowlist, wenn der Agent auf bekannten Hosts läuft. Sie können ihn einzeln widerrufen, ohne Produktionsschlüssel anzutasten.
  • Secrets und nicht vertrauenswürdige Inhalte. create_api_key gibt den neuen Schlüssel nur einmal zurück: sagen Sie Ihrem Agenten, wo er ihn speichern soll. Behandeln Sie Modellausgaben und Tool-Ergebnisse als nicht vertrauenswürdige Eingaben (Prompt Injection), bevor ein Agent darauf reagiert.

Protokolldetails

PunktDetail
Protokollversionen2026-07-28 (zustandslos, _meta pro Anfrage sowie Header Mcp-Method / Mcp-Name, server/discover) und 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 (initialize-Handshake). Beide unter derselben URL; jede Anfrage wird in der Protokollgeneration beantwortet, die sie spricht.
SessionsKeine. Es wird keine Mcp-Session-Id vergeben, sodass jede Anfrage jede Server-Replica erreichen kann und nach einem erneuten Verbindungsaufbau nichts neu initialisiert werden muss.
Methodeninitialize, ping, tools/list, tools/call; mit 2026-07-28 server/discover statt des Handshakes. GET und DELETE liefern 405; JSON-RPC-Batches werden nicht akzeptiert.
FehlerEin unbekanntes Tool ist ein JSON-RPC-Fehler (-32602). Alles andere (ungültige Argumente, eine Ablehnung durch die API, eine fehlgeschlagene Generierung) ist ein Tool-Ergebnis mit isError: true und einer Meldung, auf die das Modell reagieren kann. Mit 2026-07-28 liefern Probleme im Envelope HTTP 400 mit -32020 (Header stimmen nicht überein) oder -32022 (nicht unterstützte Version, mit Liste der unterstützten).
Cachingtools/list wird in fester Reihenfolge (Prompt-Cache-freundlich) mit ttlMs von 10 Minuten und cacheScope: "private" zurückgegeben, da die Liste von Ihrem Schlüssel abhängt.
Rate-Limit600 MCP-Nachrichten pro Minute und Schlüssel (HTTP 429 mit Retry-After). Jeder Tool-Aufruf zählt zusätzlich gegen die Limits des REST-Endpunkts, den er aufruft.
Lange AufrufeEin Aufruf kann bis zu 30 Minuten laufen (langes Reasoning). Videogenerierung ist asynchron: create_video liefert einen Job, den get_video abfragt.

Fehlerbehebung

SymptomUrsache und Lösung
401, oder der Client meldet, dass eine Authentifizierung nötig istDer Schlüssel fehlt, ist ungültig, abgelaufen oder deaktiviert. Senden Sie ihn als Authorization: Bearer <key> und prüfen Sie, ob die Umgebungsvariable dort gesetzt ist, wo der Client läuft.
Ein erwartetes Tool wird nicht aufgeführtDie Tools hängen von der Schlüsselart (siehe Tabellen oben) und von Vorschaufunktionen ab: Bild- und Video-Tools erscheinen nur für Workspaces, die für diese Vorschauen freigeschaltet sind.
Ein Tool-Ergebnis meldet HTTP 402Das Guthaben des Workspace ist aufgebraucht. Laden Sie es in der Konsole auf; get_key_info zeigt das eigene Limit des Schlüssels.
Ein Tool-Ergebnis meldet HTTP 403 für ein ModellDie allowed_models des Schlüssels oder der Modellzugriff Ihres Workspace schließen es aus. list_models zeigt genau, was der Schlüssel aufrufen kann.
chat_completion liefert keinen Text, finish_reason ist lengthEin Reasoning-Modell hat das gesamte max_tokens-Budget mit Nachdenken verbraucht. Erhöhen Sie max_tokens oder senken Sie reasoning_effort.
HTTP 429Mehr als 600 Nachrichten pro Minute auf einem Schlüssel oder das eigene Limit des REST-Endpunkts. Warten Sie die in Retry-After angegebene Zeit ab.

Demnächst

  • OAuth-Anmeldung, damit sich Connectors von claude.ai, Claude Desktop und ChatGPT ohne eingefügten Schlüssel verbinden können: mit kurzlebigen Anmeldedaten und Ausgabenobergrenze.
  • MCP-Gateway: Derselbe Endpunkt bündelt zusätzlich MCP-Server von Drittanbietern (GitHub, Slack, Ihre eigenen) unter Ihrem Schlüssel, mit Berechtigungen pro Tool, serverseitig verwahrten Anmeldedaten und einem gemeinsamen Audit-Log.
  • Fortschritt bei langen Aufrufen, gestreamt, während ein Tool läuft.

Siehe auch: API-Schlüssel · Provisioning-Schlüssel · Billing-API · Chat Completions