Crea un client per l’assistente

Server MCP

L’endpoint MCP di Setherion per creare il tuo client: trasporto, autenticazione, strumenti ed errori.

POSThttps://www.setherion.com/api/mcp

Piano: Ogni piano

Setherion ha un server MCP, il modo standard in cui gli assistenti IA usano altri servizi. Se vuoi usarlo solo da Claude, ChatGPT, Cursor o VS Code, segui MCP: collegare un assistente IA. Questa pagina è per chi crea il proprio client.

Il server è l’API con un’altra voce. Ogni strumento è una chiamata all’endpoint con lo stesso nome in questo riferimento, fatta con la credenziale di chi chiama, quindi il server non può mai fare più di quanto possa fare l’API.

Trasporto

  • Streamable HTTP, senza stato. Invia ogni messaggio come un unico messaggio JSON-RPC 2.0 nel corpo di una POST. Non ci sono sessioni e niente da riprendere.
  • Versioni del protocollo 2025-06-18 e 2025-03-26. initialize risponde con la versione che hai chiesto se è una di queste, e con 2025-06-18 in caso contrario. Dopo initialize, invia la versione nell’header MCP-Protocol-Version. Un valore diverso viene rifiutato con 400.
  • Solo strumenti. Il server non offre risorse né prompt, e non invia messaggi propri.
  • Un messaggio per richiesta. Un batch viene rifiutato con 400.
  • GET e DELETE rispondono 405 con Allow: POST.
  • Origin. Una richiesta da una pagina del browser deve provenire da https://www.setherion.com. Qualsiasi altro Origin risponde 403. Le richieste dei programmi non ne hanno uno e sono consentite.

Tieni il www nell’indirizzo. L’indirizzo senza fa un reindirizzamento, e un reindirizzamento perde la credenziale.

Autenticazione

Invia una credenziale nell’header Authorization. Va bene una qualsiasi delle due:

  • Una chiave API: Authorization: Bearer sth_.... Vedi Autenticazione.
  • Un token di accesso OAuth, che inizia con sto_, emesso per questo endpoint e per nessun altro. Vedi la pagina di accesso con OAuth di questo riferimento.

Una richiesta senza nessuna delle due, o con una credenziale sbagliata, scaduta o revocata, risponde 401 con un’indicazione su dove accedere:

http
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="Setherion", resource_metadata="https://www.setherion.com/.well-known/oauth-protected-resource/api/mcp"
json
{
  "jsonrpc": "2.0",
  "id": null,
  "error": {
    "code": -32001,
    "message": "Sign in to Setherion to use this server, or send an API key from your account page as \"Authorization: Bearer sth_...\"."
  }
}

Un client senza credenziali segue resource_metadata per trovare l’accesso. I token funzionano solo su questo endpoint: gli endpoint REST di questo riferimento accettano una chiave API.

Metodi

MetodoRisposta
initializeLa versione del protocollo, capabilities con { "tools": { "listChanged": false } }, serverInfo (setherion, Setherion, 1.0.0) e instructions per il modello.
ping{}
tools/listI sei strumenti qui sotto, con i loro schemi di input.
tools/callEsegue uno strumento.
Notifiche e risposte202 con il corpo {}.
Qualsiasi altroUn errore JSON-RPC -32601, Method not found: <method>.
bash
curl -X POST https://www.setherion.com/api/mcp \
  -H "Authorization: Bearer $SETHERION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'

Strumenti

StrumentoChiamaArgomentiCrediti
list_projectsElencare le tue appquery, offset (entrambi facoltativi)Nessuno
edit_projectModificare un’appproject_id, instruction (entrambi obbligatori)Gli stessi dell’editor
edit_statusSeguire una modificaproject_id, run_id (entrambi obbligatori)Nessuno
publish_projectPubblicare un’appproject_idNessuno
store_guidePreparazione per gli storeproject_id, way (facoltativo)Nessuno
store_privacy_answersRisposte sulla privacy per gli storeproject_id, way (obbligatorio)Nessuno
write_store_listingScrivere la scheda dello storeproject_idPochi, Pro e superiori

instruction viene inviata come prompt della modifica, fino a 4.000 caratteri. way è easy o native. offset è un numero intero, 0 o più, e può essere inviato come testo. edit_project non accetta un modello: funziona con auto.

tools/list dà title, description, inputSchema e annotations di ogni strumento. Gli strumenti di lettura sono contrassegnati con readOnlyHint: true, e publish_project è contrassegnato come idempotente.

bash
curl -X POST https://www.setherion.com/api/mcp \
  -H "Authorization: Bearer $SETHERION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call",
        "params": { "name": "list_projects", "arguments": { "query": "coffee" } } }'

Il risultato di uno strumento

Uno strumento risponde con il JSON del suo endpoint, in due forme per ogni tipo di client:

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{ "type": "text", "text": "{ \"ok\": true, \"total\": 1, ... }" }],
    "structuredContent": { "ok": true, "total": 1, "truncated": false, "offset": 0, "nextOffset": null, "projects": [] },
    "isError": false
  }
}

(projects qui è abbreviato. Ha le voci descritte in Elencare le tue app.)

Quando l’endpoint rifiuta, isError è true, structuredContent viene omesso e content contiene soltanto la frase error dell’endpoint, da leggere per il modello. Anche una modifica che termina con ok: false è un errore in questo senso.

Modifiche lunghe

Una modifica richiede minuti. Invia la richiesta con Accept: text/event-stream e la risposta arriva in streaming:

  • Ogni 10 secondi il server invia un evento notifications/progress, con progress impostato sui secondi trascorsi e il messaggio Still editing, 30s so far, quando metti un progressToken in params._meta. Senza un token invia una riga di commento, : still editing. Entrambi mantengono viva la connessione e permettono a un client di azzerare il suo timeout.
  • L’ultimo evento è il risultato dello strumento, come event: message con la risposta JSON-RPC in data.
text
event: message
data: {"jsonrpc":"2.0","method":"notifications/progress","params":{"progressToken":"t1","progress":10,"message":"Still editing, 10s so far"}}

event: message
data: {"jsonrpc":"2.0","id":3,"result":{"content":[...],"structuredContent":{"ok":true,"runId":"..."},"isError":false}}

Senza quell’header Accept la richiesta resta aperta e risponde con un solo oggetto JSON.

Una modifica ancora in corso dopo quattro minuti

edit_project aspetta al massimo circa quattro minuti, perché alcuni assistenti rinunciano a uno strumento che è rimasto in silenzio per cinque. Una modifica che sta ancora lavorando a quel punto risponde ok: true con status: "running" e il suo runId:

json
{
  "ok": true,
  "status": "running",
  "runId": "b3f0e2d1-6a47-4c8e-9d15-0f2b7a3c8e61",
  "projectId": "7c1e4a52-9b0d-4f3e-8a61-2d5f0c9e7b14",
  "message": "Still editing. It carries on in Setherion without you: do not send it again. Call edit_status with this runId in a minute or so, until it says \"done\"."
}

La modifica prosegue in Setherion. Chiama edit_status con project_id e run_id ogni minuto circa. Risponde come in Seguire una modifica, finché status non è done.

Chiudere la connessione non ferma la modifica

Un client che chiude la connessione, o invia una notifica di annullamento, lascia la modifica in corso e pagata. Arriva nell’app come se avessi aspettato. Per fermarla, premi Stop nell’editor di Setherion, sulla scheda che mostra la modifica in corso.

Errori

DoveErrore
HTTP 401Codice JSON-RPC -32001. Vedi Autenticazione sopra.
HTTP 403{ "error": "Origin not allowed" }
HTTP 405Codice -32000, Method not allowed. This server answers POST only.
HTTP 400Codice -32700 Parse error per un corpo che non è JSON; -32600 per un batch, un messaggio che non è JSON-RPC 2.0 o un MCP-Protocol-Version non supportato.
Errore JSON-RPC-32601 per un metodo che non esiste; -32602 per argomenti dello strumento sbagliati.
Le frasi per gli argomenti dello strumento sbagliati

Tutte tornano con il codice -32602.

  • Unknown tool: <name>
  • Arguments must be an object.
  • Missing "project_id". (o qualsiasi argomento obbligatorio)
  • Unknown argument "<name>".
  • "<name>" must be a string.
  • "way" must be one of: easy, native.
  • "offset" must be a whole number, 0 or more.

I rifiuti degli strumenti stessi, come un’app che non viene trovata o un limite raggiunto, sono risultati di strumento con isError: true. Le loro frasi sono quelle elencate in Errori e limiti.

Questa pagina ti è stata utile?

Unisciti alla community

Domande, idee e cosa stanno creando gli altri.