Novità Registrati gratis, 10 chiamate le offriamo noi. Fino a $1, senza carta.

Server MCP

Collega a Synthorai qualsiasi agente compatibile con MCP (Claude Code, Cursor, VS Code, Codex, l'OpenAI Agents SDK e altri) con un solo URL e la tua chiave API. Tutti i modelli e le modalità, la gestione delle chiavi API e i dati di fatturazione diventano strumenti che l'agente può chiamare. Ogni chiamata viene autenticata, limitata e fatturata esattamente come la richiesta REST corrispondente.

Endpointhttps://synthorai.io/v1/mcp
TrasportoStreamable HTTP, stateless (senza sessioni), risposte JSON
AutenticazioneAuthorization: Bearer <API key>
ℹ

La chiave con cui ti connetti determina quali strumenti ottieni: una chiave di inferenza (sk-syn-…) chiama i modelli, una chiave di provisioning (sk-syn-prov-…) gestisce le chiavi API e una chiave di fatturazione (sk-syn-bill-…) legge saldo e utilizzo. Se un agente ha bisogno di più tipi di chiave, collega il server una volta per ciascun tipo.

Guida rapida

  1. Crea una chiave API nella console, dalla pagina Chiavi API. Per un agente, assegnale un limite di spesa e un'allowlist dei modelli.
  2. Aggiungi il server al tuo client con uno degli snippet qui sotto, leggendo la chiave da una variabile d'ambiente invece di incollarla in un file.
  3. Chiedi al tuo agente, ad esempio: “Elenca i tre modelli più economici che supportano gli strumenti, poi chiedi al più veloce di riassumere questo file e dimmi quanto è costato.”

Collega il tuo client

Tutti i client usano lo stesso endpoint e lo stesso header. Imposta prima SYNTHORAI_API_KEY nel tuo ambiente.

Claude Code

Esegui /mcp in Claude Code per verificare la connessione. Aggiungi --scope user per rendere il server disponibile in tutti i progetti, oppure esegui il commit della forma .mcp.json per condividerlo con il tuo team (la chiave resta nell'ambiente di ogni sviluppatore).

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

Inseriscilo in ~/.cursor/mcp.json (tutti i progetti) o in .cursor/mcp.json (un singolo progetto).

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

VS Code (GitHub Copilot)

Inseriscilo in .vscode/mcp.json. VS Code chiede la chiave una sola volta e la conserva in modo sicuro.

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

Inseriscilo in ~/.codex/config.toml, oppure esegui 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

Sono i server di OpenAI a chiamare l'endpoint per tuo conto, quindi lascia vuota l'allowlist IP della chiave (oppure consenti gli intervalli di IP in uscita di OpenAI). Usa allowed_tools per esporre solo gli strumenti di cui il modello ha bisogno.

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

Funziona allo stesso modo con qualsiasi framework basato sugli SDK client MCP (LangChain, LlamaIndex, Pydantic AI, Vercel AI SDK, Mastra …): punta il suo trasporto Streamable HTTP all'endpoint con l'header.

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

I connettori personalizzati di Claude Desktop e claude.ai accedono tramite OAuth, che questo server non offre ancora (vedi la roadmap più sotto). Nel frattempo, Claude Desktop può connettersi tramite il bridge mcp-remote, che aggiunge l'header per te:

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

curl

Il server usa semplice JSON-RPC su HTTP, quindi non serve alcun SDK. Non è richiesto alcun handshake: ogni richiesta è indipendente.

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

Esempio di risposta

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

Strumenti

tools/list restituisce solo gli strumenti che la tua chiave può usare: l'elenco è filtrato per tipo di chiave e per le funzionalità abilitate nel tuo workspace (la generazione di immagini e video è in anteprima limitata). Gli strumenti che eseguono un modello costano esattamente quanto la chiamata REST; tutti gli altri sono gratuiti.

Chiave di inferenza

StrumentoCosa faEndpoint RESTNote
list_models Modelli che la chiave può chiamare, dal più economico, con lunghezza del contesto, modalità, capacità e prezzi di listino. Filtri: categoria, capacità, modalità di input, ricerca. GET /v1/models + /api/models sola lettura
get_model Dettagli completi di un modello, incluso il prezzo effettivo dopo eventuali sconti e se la chiave può chiamarlo. GET /v1/models/{id} sola lettura
get_pricing Il listino prezzi (USD dopo gli sconti): prezzi per token, per chiamata, al minuto, al secondo e a scaglioni. GET /api/pricing sola lettura
chat_completion Una chat completion su qualsiasi modello: un prompt o un array messages completo (immagini, risultati degli strumenti), con output strutturato, strumenti funzione, sforzo di ragionamento e modelli di fallback facoltativi. Restituisce testo, chiamate agli strumenti, utilizzo, costo e request_id. POST /v1/chat/completions a pagamento
generate_image Genera o modifica immagini; restituite come contenuto immagine, oppure come link con response_format=url. POST /v1/images/generations a pagamento
list_image_models Modelli di immagini con prezzi e input supportati. GET /v1/images/models sola lettura
create_video Avvia un job video da un prompt o da un primo fotogramma; può attendere fino a 60 s il completamento. Fatturato al completamento del job. POST /v1/videos a pagamento
get_video Stato del job; una volta completato, link ai video (validi circa 24 ore). GET /v1/videos/{id} sola lettura
cancel_video Annulla un job ancora in coda (un job già avviato non può essere fermato). I job annullati e quelli non riusciti non vengono fatturati. DELETE /v1/videos/{id} distruttivo
list_video_models Modelli video con risoluzioni, durate e prezzi. GET /v1/videos/models sola lettura
text_to_speech Voce a partire da un testo, restituita come contenuto audio. POST /v1/audio/speech a pagamento
transcribe_audio Testo da un audio fornito come URL o come dati base64 (fino a 25 MB). POST /v1/audio/transcriptions a pagamento
create_embeddings Vettori di embedding per un testo o per un batch fino a 2048. POST /v1/embeddings a pagamento
get_key_info Limite di spesa della chiave, importo usato e rimanente, periodo di reset e spesa di oggi / di questa settimana / di questo mese (USD). GET /v1/key sola lettura
get_generation Il record di fatturazione di una richiesta tramite request_id: costo, ripartizione dei token, latenza, stato. GET /v1/generation sola lettura

Chiave di provisioning

StrumentoCosa faEndpoint RESTNote
create_api_key Crea una chiave di inferenza con limite di spesa, periodo di reset, allowlist di modelli e IP, scadenza e metadati. Il segreto compare solo nel risultato. POST /api/provisioning/keys modifica i dati
list_api_keys Le chiavi di inferenza del workspace con limiti, spesa e stato; filtrabili per metadati. GET /api/provisioning/keys sola lettura
get_api_key Impostazioni, spesa e stato di una singola chiave. GET /api/provisioning/keys/{id} sola lettura
update_api_key Modifica le impostazioni di una chiave, oppure la disabilita / riabilita. Cambiano solo i campi forniti. PATCH /api/provisioning/keys/{id} distruttivo
delete_api_key Elimina definitivamente una chiave. DELETE /api/provisioning/keys/{id} distruttivo

Chiave di fatturazione

StrumentoCosa faEndpoint RESTNote
get_balance Saldo spendibile attuale (USD), con credito promozionale e crediti programmati. GET /api/v1/billing/balance sola lettura
get_usage Spesa e richieste per ora o per giorno, per chiave e/o per modello. GET /api/v1/billing/usage sola lettura
list_usage_records Record per richiesta con token, costo e stato, paginati tramite cursore. GET /api/v1/billing/records sola lettura
get_billing_summary Totali su un intervallo, con le chiavi e i modelli principali. GET /api/v1/billing/summary sola lettura
get_data_freshness Quanto sono aggiornati i dati di fatturazione. GET /api/v1/billing/freshness sola lettura

list_models, get_model e get_pricing sono disponibili per ogni tipo di chiave; per una chiave di inferenza, list_models mostra solo i modelli che quella chiave può chiamare.

Come sono fatti i risultati

Ogni risultato contiene un blocco di testo leggibile e gli stessi dati in JSON in structuredContent, così possono usarlo sia i client di chat sia i programmi. Immagini e audio vengono restituiti come contenuto immagine e audio, i video come link. Gli strumenti che eseguono un modello terminano con una riga di ricevuta (modello, token, costo e request_id) che get_generation può consultare in seguito.

Permessi e sicurezza

  • Le stesse regole dell'API REST. Ogni chiamata a uno strumento viene eseguita dall'endpoint REST indicato, con la tua chiave: autenticazione, tipo di chiave, allowlist IP, allowlist dei modelli, limite di spesa, limiti di frequenza e fatturazione si applicano invariati. MCP non aggiunge alcun permesso e non salta alcun controllo.
  • Privilegio minimo per tipo di chiave. Le chiavi di inferenza non possono gestire chiavi né leggere la fatturazione del workspace; le chiavi di provisioning non possono chiamare modelli; le chiavi di fatturazione sono di sola lettura.
  • Indicazioni per l'approvazione. Ogni strumento include annotazioni MCP. Gli strumenti di sola lettura sono contrassegnati con readOnlyHint; gli strumenti che spendono denaro non sono di sola lettura; update_api_key, delete_api_key e cancel_video sono contrassegnati con destructiveHint. I client le usano per decidere cosa chiederti prima dell'esecuzione.
  • Chiave consigliata per gli agenti: una chiave di inferenza dedicata con un limite di spesa che si azzera ogni giorno, un elenco allowed_models e un'allowlist IP quando l'agente gira su host noti. Puoi revocarla singolarmente senza toccare le chiavi di produzione.
  • Segreti e contenuti non attendibili. create_api_key restituisce la nuova chiave una sola volta: indica al tuo agente dove conservarla. Tratta l'output dei modelli e i risultati degli strumenti come input non attendibile (prompt injection) prima di lasciare che un agente agisca in base a essi.

Dettagli del protocollo

VoceDettaglio
Versioni del protocollo2026-07-28 (stateless, _meta per richiesta e header Mcp-Method / Mcp-Name, server/discover) e 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 (handshake initialize). Entrambe sullo stesso URL; ogni richiesta viene servita secondo la versione che usa.
SessioniNessuna. Non viene emesso alcun Mcp-Session-Id, quindi qualsiasi richiesta può raggiungere qualsiasi replica del server e dopo una riconnessione non serve reinizializzare nulla.
Metodiinitialize, ping, tools/list, tools/call; con 2026-07-28, server/discover al posto dell'handshake. GET e DELETE restituiscono 405; i batch JSON-RPC non sono accettati.
ErroriUno strumento sconosciuto produce un errore JSON-RPC (-32602). Tutto il resto (argomenti non validi, un rifiuto dell'API, una generazione non riuscita) è un risultato dello strumento con isError: true e un messaggio su cui il modello può agire. Con 2026-07-28, i problemi nell'envelope restituiscono HTTP 400 con -32020 (header non corrispondente) o -32022 (versione non supportata, con l'elenco di quelle supportate).
Cachingtools/list viene restituito in un ordine fisso (adatto al prompt caching) con ttlMs di 10 minuti e cacheScope: "private", poiché l'elenco dipende dalla tua chiave.
Limite di frequenza600 messaggi MCP al minuto per chiave (HTTP 429 con Retry-After). Ogni chiamata a uno strumento conta anche nei limiti dell'endpoint REST che richiama.
Chiamate lungheUna chiamata può durare fino a 30 minuti (ragionamento lungo). La generazione video è asincrona: create_video restituisce un job e get_video ne controlla lo stato.

Risoluzione dei problemi

SintomoCausa e soluzione
401, oppure il client segnala che è necessaria l'autenticazioneLa chiave è assente, non valida, scaduta o disabilitata. Inviala come Authorization: Bearer <key> e verifica che la variabile d'ambiente sia impostata dove gira il client.
Uno strumento atteso non compare nell'elencoGli strumenti dipendono dal tipo di chiave (vedi le tabelle sopra) e dalle funzionalità in anteprima: gli strumenti per immagini e video compaiono solo per i workspace ammessi a tali anteprime.
Il risultato di uno strumento riporta HTTP 402Il saldo del workspace è esaurito. Ricarica dalla console; get_key_info mostra il limite proprio della chiave.
Il risultato di uno strumento riporta HTTP 403 per un modelloIl modello è escluso da allowed_models della chiave o dall'accesso ai modelli del tuo workspace. list_models mostra esattamente cosa può chiamare la chiave.
chat_completion non restituisce testo e finish_reason è lengthUn modello di ragionamento ha speso l'intero budget di max_tokens per ragionare. Aumenta max_tokens o riduci reasoning_effort.
HTTP 429Più di 600 messaggi al minuto su una chiave, oppure il limite proprio dell'endpoint REST. Attendi il tempo indicato da Retry-After.

Prossimamente

  • Accesso OAuth, così i connettori di claude.ai, Claude Desktop e ChatGPT potranno connettersi senza incollare una chiave, con credenziali a breve durata e con tetto di spesa.
  • Gateway MCP: lo stesso endpoint aggregherà anche server MCP di terze parti (GitHub, Slack, i tuoi) sotto la tua chiave, con permessi per singolo strumento, credenziali conservate lato server e un unico log di audit.
  • Avanzamento delle chiamate lunghe, trasmesso in streaming mentre uno strumento è in esecuzione.

Vedi anche: Chiavi API · Chiavi di provisioning · API di fatturazione · Chat Completions