Servidor MCP
Conecta cualquier agente compatible con MCP (Claude Code, Cursor, VS Code, Codex, el OpenAI Agents SDK y más) a Synthorai con una URL y tu clave API. Todos los modelos y modalidades, la gestión de claves API y los datos de facturación se convierten en herramientas que el agente puede llamar. Cada llamada se autentica, se limita y se factura exactamente igual que la solicitud REST equivalente.
| Endpoint | https://synthorai.io/v1/mcp |
| Transporte | Streamable HTTP, sin estado (sin sesiones), respuestas JSON |
| Autenticación | Authorization: Bearer <API key> |
La clave con la que te conectas determina qué herramientas obtienes: una clave de inferencia (sk-syn-…) llama a modelos, una clave de provisioning (sk-syn-prov-…) gestiona claves API y una clave de facturación (sk-syn-bill-…) lee el saldo y el uso. Si un agente necesita más de un tipo, conecta el servidor una vez por cada tipo de clave.
Inicio rápido
- Crea una clave API en la consola, en la página Claves API. Para un agente, asígnale un límite de gasto y una lista de modelos permitidos.
- Añade el servidor a tu cliente con uno de los fragmentos de abajo, leyendo la clave desde una variable de entorno en lugar de pegarla en un archivo.
- Pídele a tu agente, por ejemplo: “Lista los tres modelos más baratos que admiten herramientas, luego pide al más rápido que resuma este archivo y dime cuánto ha costado.”
Conecta tu cliente
Todos los clientes usan el mismo endpoint y la misma cabecera. Primero define SYNTHORAI_API_KEY en tu entorno.
Claude Code
Ejecuta /mcp dentro de Claude Code para comprobar la conexión. Añade --scope user para que el servidor esté disponible en todos los proyectos, o haz commit del formato .mcp.json para compartirlo con tu equipo (la clave se queda en el entorno de cada desarrollador).
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
Ponlo en ~/.cursor/mcp.json (todos los proyectos) o en .cursor/mcp.json (un solo proyecto).
{
"mcpServers": {
"synthorai": {
"url": "https://synthorai.io/v1/mcp",
"headers": { "Authorization": "Bearer ${env:SYNTHORAI_API_KEY}" }
}
}
} VS Code (GitHub Copilot)
Ponlo en .vscode/mcp.json. VS Code pide la clave una sola vez y la guarda de forma segura.
{
"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
Ponlo en ~/.codex/config.toml, o ejecuta 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
Los servidores de OpenAI llaman al endpoint en tu nombre, así que deja vacía la lista blanca de IP de la clave (o permite los rangos de salida de OpenAI). Usa allowed_tools para exponer solo las herramientas que necesita el modelo.
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
Funciona igual con cualquier framework basado en los SDK de cliente MCP (LangChain, LlamaIndex, Pydantic AI, Vercel AI SDK, Mastra …): apunta su transporte Streamable HTTP al endpoint con la cabecera.
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
Los conectores personalizados de Claude Desktop y claude.ai inician sesión con OAuth, que este servidor aún no ofrece (consulta la hoja de ruta más abajo). Mientras tanto, Claude Desktop puede conectarse a través del puente mcp-remote, que añade la cabecera por ti:
{
"mcpServers": {
"synthorai": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://synthorai.io/v1/mcp", "--header", "Authorization:${AUTH_HEADER}"],
"env": { "AUTH_HEADER": "Bearer sk-syn-..." }
}
}
} curl
El servidor es JSON-RPC simple sobre HTTP, así que no necesitas ningún SDK. No hace falta handshake: cada solicitud es independiente.
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"}}}' Respuesta de ejemplo
{
"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-…"
}
}
} Herramientas
tools/list devuelve solo las herramientas que tu clave puede usar: se filtran por tipo de clave y por las funciones habilitadas para tu workspace (la generación de imágenes y de vídeo está en vista previa limitada). Las herramientas que ejecutan un modelo cuestan exactamente lo mismo que la llamada REST; todas las demás son gratuitas.
Clave de inferencia
| Herramienta | Qué hace | Endpoint REST | Notas |
|---|---|---|---|
list_models | Modelos que la clave puede llamar, del más barato al más caro, con longitud de contexto, modalidades, capacidades y precios de catálogo. Filtros: categoría, capacidad, modalidad de entrada, búsqueda. | GET /v1/models + /api/models | solo lectura |
get_model | Todos los detalles de un modelo, incluido el precio efectivo tras cualquier descuento y si la clave puede llamarlo. | GET /v1/models/{id} | solo lectura |
get_pricing | La lista de precios (USD tras descuentos): precios por token, por llamada, por minuto, por segundo y escalonados. | GET /api/pricing | solo lectura |
chat_completion | Una chat completion en cualquier modelo: un prompt o un array messages completo (imágenes, resultados de herramientas), con salida estructurada, herramientas de función, esfuerzo de razonamiento y modelos de respaldo opcionales. Devuelve texto, llamadas a herramientas, uso, coste y request_id. | POST /v1/chat/completions | facturable |
generate_image | Genera o edita imágenes; se devuelven como contenido de imagen, o como enlaces con response_format=url. | POST /v1/images/generations | facturable |
list_image_models | Modelos de imagen con precios y entradas admitidas. | GET /v1/images/models | solo lectura |
create_video | Inicia un trabajo de vídeo a partir de un prompt o de un primer fotograma; puede esperar hasta 60 s a que termine. Se factura cuando el trabajo se completa. | POST /v1/videos | facturable |
get_video | Estado del trabajo; una vez completado, enlaces a los vídeos (válidos unas 24 horas). | GET /v1/videos/{id} | solo lectura |
cancel_video | Cancela un trabajo que aún está en cola (un trabajo que ya ha empezado no se puede detener). Los trabajos cancelados y fallidos no se facturan. | DELETE /v1/videos/{id} | destructiva |
list_video_models | Modelos de vídeo con resoluciones, duraciones y precios. | GET /v1/videos/models | solo lectura |
text_to_speech | Voz a partir de texto, devuelta como contenido de audio. | POST /v1/audio/speech | facturable |
transcribe_audio | Texto a partir de un audio indicado como URL o como datos base64 (hasta 25 MB). | POST /v1/audio/transcriptions | facturable |
create_embeddings | Vectores de embedding para un texto o un lote de hasta 2048. | POST /v1/embeddings | facturable |
get_key_info | El límite de gasto de la clave, el importe usado y el restante, el periodo de reinicio y el gasto de hoy / esta semana / este mes (USD). | GET /v1/key | solo lectura |
get_generation | El registro de facturación de una solicitud por request_id: coste, desglose de tokens, latencia y estado. | GET /v1/generation | solo lectura |
Clave de provisioning
| Herramienta | Qué hace | Endpoint REST | Notas |
|---|---|---|---|
create_api_key | Crea una clave de inferencia con límite de gasto, periodo de reinicio, listas de modelos e IP permitidos, caducidad y metadatos. El secreto solo aparece en el resultado. | POST /api/provisioning/keys | modifica datos |
list_api_keys | Las claves de inferencia del workspace con sus límites, gasto y estado; filtra por metadatos. | GET /api/provisioning/keys | solo lectura |
get_api_key | La configuración, el gasto y el estado de una clave. | GET /api/provisioning/keys/{id} | solo lectura |
update_api_key | Cambia la configuración de una clave, o desactívala / reactívala. Solo cambian los campos indicados. | PATCH /api/provisioning/keys/{id} | destructiva |
delete_api_key | Elimina una clave de forma permanente. | DELETE /api/provisioning/keys/{id} | destructiva |
Clave de facturación
| Herramienta | Qué hace | Endpoint REST | Notas |
|---|---|---|---|
get_balance | Saldo disponible en este momento (USD), con el crédito promocional y los créditos programados. | GET /api/v1/billing/balance | solo lectura |
get_usage | Gasto y solicitudes por hora o por día, por clave y/o modelo. | GET /api/v1/billing/usage | solo lectura |
list_usage_records | Registros por solicitud con tokens, coste y estado, paginados por cursor. | GET /api/v1/billing/records | solo lectura |
get_billing_summary | Totales de un rango con las claves y los modelos principales. | GET /api/v1/billing/summary | solo lectura |
get_data_freshness | Grado de actualización de los datos de facturación. | GET /api/v1/billing/freshness | solo lectura |
list_models, get_model y get_pricing están disponibles para todos los tipos de clave; con una clave de inferencia, list_models muestra solo los modelos que esa clave puede llamar.
Cómo son los resultados
Cada resultado incluye un bloque de texto legible y los mismos datos en JSON en structuredContent, para que puedan usarlo tanto los clientes de chat como los programas. Las imágenes y el audio se devuelven como contenido de imagen y de audio, y los vídeos como enlaces. Las herramientas que ejecutan un modelo terminan con una línea de recibo (modelo, tokens, coste y request_id) que get_generation puede consultar más tarde.
Permisos y seguridad
- Las mismas reglas que la API REST. Cada llamada a una herramienta la ejecuta el endpoint REST que indica, con tu clave: autenticación, tipo de clave, lista blanca de IP, lista de modelos permitidos, límite de gasto, límites de tasa y facturación se aplican sin cambios. MCP no añade ningún permiso ni se salta ninguna comprobación.
- Mínimo privilegio por tipo de clave. Las claves de inferencia no pueden gestionar claves ni leer la facturación del workspace; las claves de provisioning no pueden llamar a modelos; las claves de facturación son de solo lectura.
- Indicaciones de aprobación. Cada herramienta lleva anotaciones MCP. Las herramientas de solo lectura se marcan con
readOnlyHint; las que gastan dinero no son de solo lectura;update_api_key,delete_api_keyycancel_videose marcan condestructiveHint. Los clientes las usan para decidir qué preguntarte antes de ejecutarlas. - Clave recomendada para agentes: una clave de inferencia dedicada con un límite de gasto que se reinicia a diario, una lista
allowed_modelsy una lista blanca de IP cuando el agente se ejecuta en hosts conocidos. Revócala por separado sin tocar las claves de producción. - Secretos y contenido no fiable.
create_api_keydevuelve la nueva clave una sola vez: indícale a tu agente dónde guardarla. Trata la salida del modelo y los resultados de las herramientas como entrada no fiable (prompt injection) antes de dejar que un agente actúe a partir de ellos.
Detalles del protocolo
| Elemento | Detalle |
|---|---|
| Versiones del protocolo | 2026-07-28 (sin estado, _meta por solicitud y cabeceras Mcp-Method / Mcp-Name, server/discover) y 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 (handshake initialize). Ambas en la misma URL; cada solicitud se atiende según la versión que usa. |
| Sesiones | Ninguna. No se emite ningún Mcp-Session-Id, así que cualquier solicitud puede llegar a cualquier réplica del servidor y no hace falta reinicializar nada tras una reconexión. |
| Métodos | initialize, ping, tools/list, tools/call; con 2026-07-28, server/discover en lugar del handshake. GET y DELETE devuelven 405; no se aceptan lotes JSON-RPC. |
| Errores | Una herramienta desconocida es un error JSON-RPC (-32602). Todo lo demás (argumentos no válidos, un rechazo de la API, una generación fallida) es un resultado de herramienta con isError: true y un mensaje con el que el modelo puede actuar. Con 2026-07-28, los problemas de envoltorio devuelven HTTP 400 con -32020 (cabecera no coincidente) o -32022 (versión no admitida, con la lista de las admitidas). |
| Caché | tools/list se devuelve en un orden fijo (compatible con la caché de prompts) con un ttlMs de 10 minutos y cacheScope: "private", ya que la lista depende de tu clave. |
| Límite de tasa | 600 mensajes MCP por minuto por clave (HTTP 429 con Retry-After). Cada llamada a una herramienta cuenta además para los límites del endpoint REST al que llama. |
| Llamadas largas | Una llamada puede durar hasta 30 minutos (razonamiento largo). La generación de vídeo es asíncrona: create_video devuelve un trabajo y get_video consulta su estado. |
Solución de problemas
| Síntoma | Causa y solución |
|---|---|
| 401, o el cliente indica que se necesita autenticación | La clave falta, no es válida, ha caducado o está desactivada. Envíala como Authorization: Bearer <key> y comprueba que la variable de entorno está definida donde se ejecuta el cliente. |
| No aparece una herramienta que esperabas | Las herramientas dependen del tipo de clave (consulta las tablas de arriba) y de las funciones en vista previa: las herramientas de imagen y vídeo solo aparecen en los workspaces admitidos en esas vistas previas. |
| Un resultado de herramienta indica HTTP 402 | El saldo del workspace se ha agotado. Recarga en la consola; get_key_info muestra el límite propio de la clave. |
| Un resultado de herramienta indica HTTP 403 para un modelo | El allowed_models de la clave o el acceso a modelos de tu workspace lo excluye. list_models muestra exactamente lo que la clave puede llamar. |
chat_completion no devuelve texto y finish_reason es length | Un modelo de razonamiento gastó todo el presupuesto de max_tokens pensando. Aumenta max_tokens o reduce reasoning_effort. |
| HTTP 429 | Más de 600 mensajes por minuto en una misma clave, o el límite propio del endpoint REST. Espera el tiempo indicado en Retry-After. |
Próximamente
- Inicio de sesión con OAuth, para que los conectores de claude.ai, Claude Desktop y ChatGPT puedan conectarse sin pegar una clave, con credenciales de corta duración y gasto limitado.
- Gateway MCP: el mismo endpoint agregando también servidores MCP de terceros (GitHub, Slack, los tuyos propios) bajo tu clave, con permisos por herramienta, credenciales guardadas en el servidor y un único registro de auditoría.
- Progreso en llamadas largas, transmitido mientras se ejecuta una herramienta.
Relacionado: Claves API · Claves de provisioning · API de facturación · Chat Completions