新規 無料登録、10回の呼び出しを進呈。最大 $1、カード不要。

MCP サーバー

Claude Code、Cursor、VS Code、Codex、OpenAI Agents SDK など、MCP に対応したあらゆるエージェントを Synthorai に接続できます。必要なのは 1 つの URL と API キーだけです。 すべてのモデルとモダリティ、API キー管理、課金データが、エージェントから呼び出せるツールになります。各呼び出しは、対応する REST リクエストとまったく同じように認証・制限・課金されます。

エンドポイントhttps://synthorai.io/v1/mcp
トランスポートStreamable HTTP、ステートレス(セッションなし)、JSON レスポンス
認証Authorization: Bearer <API key>
ℹ

接続に使うキーによって、利用できるツールが決まります。推論キー(sk-syn-…)はモデルを呼び出し、provisioning key(sk-syn-prov-…)は API キーを管理し、課金キー(sk-syn-bill-…)は残高と使用量を読み取ります。エージェントが複数の種類のキーを必要とする場合は、キーの種類ごとにサーバーを 1 つずつ接続してください。

クイックスタート

  1. コンソールの API キー ページで API キーを作成します。エージェント用には、利用上限とモデル許可リストを設定してください。
  2. 以下のスニペットのいずれかを使ってクライアントにサーバーを追加します。キーはファイルに貼り付けず、環境変数から読み込んでください。
  3. エージェントに、たとえば次のように頼んでみてください:「ツールに対応したモデルのうち最も安い 3 つを挙げて、その中で最も速いモデルにこのファイルを要約させ、かかった費用を教えて。」

クライアントを接続する

すべてのクライアントで同じエンドポイントとヘッダーを使います。先に環境変数 SYNTHORAI_API_KEY を設定してください。

Claude Code

Claude Code 内で /mcp を実行すると接続を確認できます。--scope user を付けるとすべてのプロジェクトでサーバーを使えるようになり、.mcp.json 形式をコミットすればチームで共有できます(キーは各開発者の環境に置いたままです)。

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

これを ~/.cursor/mcp.json(全プロジェクト)または .cursor/mcp.json(単一プロジェクト)に記述します。

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

VS Code (GitHub Copilot)

これを .vscode/mcp.json に記述します。VS Code はキーを一度だけ尋ね、安全に保存します。

{
  "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

これを ~/.codex/config.toml に記述するか、codex mcp add synthorai --url https://synthorai.io/v1/mcp --bearer-token-env-var SYNTHORAI_API_KEY を実行します。

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

OpenAI Responses API

OpenAI のサーバーがユーザーに代わってエンドポイントを呼び出すため、キーの IP 許可リストは空のままにしてください(または OpenAI の送信元 IP 範囲を許可してください)。allowed_tools を使って、モデルに必要なツールだけを公開します。

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

MCP クライアント SDK 上に構築されたフレームワーク(LangChain、LlamaIndex、Pydantic AI、Vercel AI SDK、Mastra など)でも同じように動作します。Streamable HTTP トランスポートの接続先をこのエンドポイントに向け、ヘッダーを付けてください。

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

Claude Desktop と claude.ai のカスタムコネクタは OAuth でサインインしますが、このサーバーはまだ OAuth に対応していません(下記の今後の予定を参照)。それまでは、Claude Desktop から mcp-remote ブリッジ経由で接続できます。ヘッダーはブリッジが付与します:

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

curl

サーバーは HTTP 上のプレーンな JSON-RPC なので、SDK は不要です。ハンドシェイクも不要で、各リクエストは単独で完結します。

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"}}}'

レスポンス例

{
  "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/list は、そのキーで使えるツールだけを返します。キーの種類と、ワークスペースで有効になっている機能によって絞り込まれます(画像生成と動画生成は限定プレビュー中です)。モデルを実行するツールの料金は REST 呼び出しとまったく同じで、それ以外のツールはすべて無料です。

推論キー

ツール機能REST エンドポイント備考
list_models キーで呼び出せるモデルを安い順に、コンテキスト長、モダリティ、機能、定価とともに返します。フィルター:カテゴリ、機能、入力モダリティ、検索。 GET /v1/models + /api/models 読み取り専用
get_model 1 つのモデルの詳細。割引適用後の実効価格と、そのキーで呼び出せるかどうかを含みます。 GET /v1/models/{id} 読み取り専用
get_pricing 価格表(割引適用後の USD):トークン単位、呼び出し単位、分単位、秒単位、段階制の価格。 GET /api/pricing 読み取り専用
chat_completion 任意のモデルで 1 回のチャット補完を実行します。プロンプトまたは完全な messages 配列(画像、ツール結果)を渡せ、構造化出力、関数ツール、リーズニング強度、フォールバックモデルも指定できます。テキスト、ツール呼び出し、使用量、コスト、request_id を返します。 POST /v1/chat/completions 課金対象
generate_image 画像を生成・編集します。画像コンテンツとして返されるほか、response_format=url を指定するとリンクとして返されます。 POST /v1/images/generations 課金対象
list_image_models 画像モデルの一覧(価格と対応する入力付き)。 GET /v1/images/models 読み取り専用
create_video プロンプトまたは最初のフレームから動画ジョブを開始します。完了まで最大 60 秒待機できます。ジョブの完了時に課金されます。 POST /v1/videos 課金対象
get_video ジョブのステータス。完了していれば動画へのリンク(有効期間は約 24 時間)を返します。 GET /v1/videos/{id} 読み取り専用
cancel_video キュー待ちのジョブをキャンセルします(開始済みのジョブは停止できません)。キャンセルされたジョブと失敗したジョブは課金されません。 DELETE /v1/videos/{id} 破壊的
list_video_models 動画モデルの一覧(解像度、長さ、価格付き)。 GET /v1/videos/models 読み取り専用
text_to_speech テキストから音声を生成し、音声コンテンツとして返します。 POST /v1/audio/speech 課金対象
transcribe_audio URL または base64 データで渡した音声(最大 25 MB)をテキストに変換します。 POST /v1/audio/transcriptions 課金対象
create_embeddings 1 つのテキスト、または最大 2048 件のバッチに対する埋め込みベクトル。 POST /v1/embeddings 課金対象
get_key_info キーの利用上限、使用済み額と残額、リセット周期、および本日/今週/今月の支出(USD)。 GET /v1/key 読み取り専用
get_generation request_id で指定した 1 リクエストの課金記録:コスト、トークン内訳、レイテンシ、ステータス。 GET /v1/generation 読み取り専用

Provisioning key

ツール機能REST エンドポイント備考
create_api_key 利用上限、リセット周期、モデル許可リストと IP 許可リスト、有効期限、metadata を指定して推論キーを作成します。シークレットは結果にしか含まれません。 POST /api/provisioning/keys データを変更
list_api_keys ワークスペースの推論キーを、上限、支出、ステータスとともに一覧表示します。metadata で絞り込めます。 GET /api/provisioning/keys 読み取り専用
get_api_key 1 つのキーの設定、支出、ステータス。 GET /api/provisioning/keys/{id} 読み取り専用
update_api_key キーの設定を変更するか、無効化/再有効化します。指定したフィールドだけが変更されます。 PATCH /api/provisioning/keys/{id} 破壊的
delete_api_key キーを完全に削除します。 DELETE /api/provisioning/keys/{id} 破壊的

課金キー

ツール機能REST エンドポイント備考
get_balance 現在使える残高(USD)と、クーポンのクレジットおよび分割入金予定のクレジット。 GET /api/v1/billing/balance 読み取り専用
get_usage 時間単位または日単位の支出とリクエスト数(キー別、モデル別、またはその両方)。 GET /api/v1/billing/usage 読み取り専用
list_usage_records リクエスト単位の記録(トークン、コスト、ステータス付き)。cursor でページングします。 GET /api/v1/billing/records 読み取り専用
get_billing_summary 期間内の合計と、上位のキーおよびモデル。 GET /api/v1/billing/summary 読み取り専用
get_data_freshness 課金データがどこまで最新か。 GET /api/v1/billing/freshness 読み取り専用

list_models、get_model、get_pricing はすべての種類のキーで利用できます。推論キーの場合、list_models にはそのキーで呼び出せるモデルだけが表示されます。

結果の形式

すべての結果には、読みやすいテキストブロックと、同じデータを JSON で表した structuredContent が含まれるため、チャットクライアントとプログラムのどちらでも扱えます。画像と音声は画像・音声コンテンツとして、動画はリンクとして返されます。モデルを実行するツールの結果は、モデル、トークン数、コスト、request_id を記した明細行で終わり、後から get_generation で照会できます。

権限と安全性

  • REST API と同じルール。各ツール呼び出しは、記載された REST エンドポイントがあなたのキーで実行します。認証、キーの種類、IP 許可リスト、モデル許可リスト、利用上限、レート制限、課金はすべてそのまま適用されます。MCP が権限を追加することも、チェックを省略することもありません。
  • キーの種類による最小権限。推論キーはキーの管理やワークスペースの課金データの読み取りができず、provisioning key はモデルを呼び出せず、課金キーは読み取り専用です。
  • 承認のヒント。すべてのツールに MCP アノテーションが付いています。読み取り専用のツールには readOnlyHint が付き、費用が発生するツールは読み取り専用扱いになりません。update_api_key、delete_api_key、cancel_video には destructiveHint が付いています。クライアントはこれらをもとに、実行前にユーザーへ確認する内容を判断します。
  • エージェント用の推奨キー:毎日リセットされる利用上限と allowed_models リストを設定し、エージェントが既知のホストで動く場合は IP 許可リストも設定した専用の推論キー。本番用のキーに触れずに、そのキーだけを失効できます。
  • シークレットと信頼できないコンテンツ。create_api_key は新しいキーを一度だけ返すため、保存先をエージェントに指示してください。エージェントに操作させる前に、モデルの出力とツールの結果は信頼できない入力(プロンプトインジェクション)として扱ってください。

プロトコルの詳細

項目詳細
プロトコルバージョン2026-07-28(ステートレス、リクエストごとの _meta と Mcp-Method / Mcp-Name ヘッダー、server/discover)と、2025-11-25、2025-06-18、2025-03-26、2024-11-05(initialize ハンドシェイク)。どちらも同じ URL で提供され、各リクエストはそのリクエストが使う世代の仕様で処理されます。
セッションなし。Mcp-Session-Id は発行されないため、どのリクエストもどのサーバーレプリカで処理でき、再接続後に再初期化する必要もありません。
メソッドinitialize、ping、tools/list、tools/call。2026-07-28 では、ハンドシェイクの代わりに server/discover を使います。GET と DELETE は 405 を返し、JSON-RPC のバッチは受け付けません。
エラー未知のツールは JSON-RPC エラー(-32602)になります。それ以外 — 不正な引数、API による拒否、生成の失敗 — はすべて isError: true 付きのツール結果として返され、モデルが対処できるメッセージが含まれます。2026-07-28 では、エンベロープの問題は HTTP 400 と -32020(ヘッダーの不一致)または -32022(未対応のバージョン。対応バージョンを列挙します)を返します。
キャッシュtools/list は固定の順序で返され(プロンプトキャッシュに適しています)、一覧はキーによって異なるため、ttlMs は 10 分、cacheScope: "private" が付きます。
レート制限キーごとに 1 分あたり 600 件の MCP メッセージ(超過時は Retry-After 付きの HTTP 429)。各ツール呼び出しは、呼び出し先の REST エンドポイントの制限にもカウントされます。
長時間の呼び出し1 回の呼び出しは最大 30 分実行できます(長い推論向け)。動画生成は非同期です:create_video がジョブを返し、get_video でそれをポーリングします。

トラブルシューティング

症状原因と対処
401、またはクライアントが認証が必要だと表示するキーが欠落、不正、期限切れ、または無効化されています。Authorization: Bearer <key> として送信し、クライアントが動作する環境で環境変数が設定されているか確認してください。
期待したツールが一覧にないツールはキーの種類(上の表を参照)とプレビュー機能によって決まります。画像ツールと動画ツールは、それぞれのプレビューに参加しているワークスペースにのみ表示されます。
ツール結果に HTTP 402 と表示されるワークスペースの残高を使い切っています。コンソールでチャージしてください。キー自身の上限は get_key_info で確認できます。
あるモデルについてツール結果に HTTP 403 と表示されるキーの allowed_models、またはワークスペースのモデルアクセス設定でそのモデルが除外されています。キーで呼び出せるモデルは list_models で正確に確認できます。
chat_completion がテキストを返さず、finish_reason が length になる推論モデルが max_tokens の予算をすべて思考に使い切りました。max_tokens を増やすか、reasoning_effort を下げてください。
HTTP 4291 つのキーで 1 分あたり 600 メッセージを超えたか、REST エンドポイント自体の制限に達しています。Retry-After の時間が経過するまで待ってください。

今後の予定

  • OAuth サインイン:claude.ai、Claude Desktop、ChatGPT のコネクタが、キーを貼り付けずに、短期間有効で利用上限付きの認証情報で接続できるようになります。
  • MCP ゲートウェイ:同じエンドポイントでサードパーティの MCP サーバー(GitHub、Slack、独自のサーバー)もあなたのキーの下に集約し、ツールごとの権限、サーバー側での認証情報の保管、単一の監査ログを提供します。
  • 長時間の呼び出しの進捗を、ツールの実行中にストリーミングで通知します。

関連:API キー · Provisioning Keys · 課金 API · Chat Completions