MCP 伺服器
任何支援 MCP 的 agent——Claude Code、Cursor、VS Code、Codex、OpenAI Agents SDK 等——只需要 一個 URL 加上你的 API 金鑰 即可連上 Synthorai。所有模型與模態、API 金鑰管理和帳單資料,都會變成 agent 可以呼叫的工具。每次呼叫的驗證、限制與計費,都與對應的 REST 請求完全相同。
| 端點 | https://synthorai.io/v1/mcp |
| 傳輸方式 | Streamable HTTP,無狀態(不使用工作階段),回傳 JSON |
| 驗證 | Authorization: Bearer <API key> |
你用哪種金鑰連線,就決定能拿到哪些工具:推論金鑰(sk-syn-…)用來呼叫模型,provisioning key(sk-syn-prov-…)用來管理 API 金鑰,帳單金鑰(sk-syn-bill-…)用來讀取餘額與用量。如果一個 agent 需要多種金鑰,請為每種金鑰各連線一次伺服器。
快速開始
- 在控制台的 API 金鑰 頁面建立一把 API 金鑰。給 agent 用的金鑰,請設定消費上限與模型允許清單。
- 用下方任一段設定把伺服器加進你的用戶端,並從環境變數讀取金鑰,不要把金鑰直接貼進檔案。
- 向你的 agent 提問,例如:「列出支援工具的三個最便宜模型,再請其中最快的一個摘要這個檔案,並告訴我花了多少錢。」
連接你的用戶端
所有用戶端都使用同一個端點與標頭。請先在環境中設定 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 | 單一模型的完整資訊,包括套用折扣後的實際價格,以及該金鑰能否呼叫它。 | GET /v1/models/{id} | 唯讀 |
get_pricing | 價目表(折扣後的 USD):按 token、按次、按分鐘、按秒及階梯計價。 | GET /api/pricing | 唯讀 |
chat_completion | 對任意模型發起一次聊天補全:可傳入單一 prompt 或完整的 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 | 以 prompt 或首幀建立影片任務;最多可等待 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 | 為單段文字或最多 2048 段的批次產生嵌入向量。 | POST /v1/embeddings | 計費 |
get_key_info | 該金鑰的消費上限、已用與剩餘額度、重設週期,以及今日/本週/本月的消費(USD)。 | GET /v1/key | 唯讀 |
get_generation | 依 request_id 查詢單一請求的帳單記錄:費用、token 明細、延遲與狀態。 | 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 | 單一金鑰的設定、消費與狀態。 | 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 | 逐請求記錄,含 token、費用與狀態,以游標分頁。 | 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 只會列出該金鑰能呼叫的模型。
結果長什麼樣子
每個結果都帶有一段易讀的文字,並在 structuredContent 中以 JSON 附上同一份資料,聊天用戶端與程式都能直接使用。圖像與音訊以圖像、音訊內容回傳,影片則以連結回傳。會執行模型的工具在結尾附一行收據——模型、token、費用與 request_id——之後可用 get_generation 查詢。
權限與安全
- 與 REST API 規則相同。每次工具呼叫都由其對應的 REST 端點以你的金鑰執行:驗證、金鑰類型、IP 允許清單、模型允許清單、消費上限、速率限制與計費全部照常套用。MCP 不會新增任何權限,也不會略過任何檢查。
- 依金鑰類型實行最小權限。推論金鑰無法管理金鑰或讀取工作區帳單;provisioning key 無法呼叫模型;帳單金鑰為唯讀。
- 核准提示。每個工具都帶有 MCP annotations。唯讀工具標記為
readOnlyHint;會花錢的工具不屬於唯讀;update_api_key、delete_api_key與cancel_video標記為destructiveHint。用戶端會據此決定執行前要先向你確認哪些操作。 - 建議的 agent 金鑰:一把專用的推論金鑰,設定每日重設的消費上限與
allowed_models清單;若 agent 在已知主機上執行,再加上 IP 允許清單。需要時可單獨撤銷,不影響正式環境的金鑰。 - 機密與不可信內容。
create_api_key只會回傳一次新金鑰——請告訴你的 agent 要把它存在哪裡。在讓 agent 依模型輸出與工具結果採取行動之前,請先將它們視為不可信的輸入(提示詞注入)。
協定細節
| 項目 | 說明 |
|---|---|
| 協定版本 | 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",因為清單內容取決於你的金鑰。 |
| 速率限制 | 每把金鑰每分鐘 600 則 MCP 訊息(超過時回傳 HTTP 429 與 Retry-After)。每次工具呼叫也會計入其所呼叫之 REST 端點的限制。 |
| 長時間呼叫 | 單次呼叫最長可執行 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 429 | 單一金鑰每分鐘超過 600 則訊息,或觸及 REST 端點本身的限制。請依 Retry-After 等待後再重試。 |
即將推出
- OAuth 登入:讓 claude.ai、Claude Desktop 與 ChatGPT 的連接器無需貼上金鑰即可連線,改用短效且有消費上限的憑證。
- MCP 閘道:同一個端點也能以你的金鑰彙整第三方 MCP 伺服器(GitHub、Slack 或你自己的伺服器),支援逐工具權限、憑證保存在伺服器端,並統一記錄在同一份稽核日誌中。
- 長時間呼叫的進度回報:工具執行期間即時串流進度。
相關:API 金鑰 · Provisioning Keys · 帳單 API · Chat Completions