Initialize and call a tool
POST /mcp
Streamable HTTP JSON-RPC transport at the server root, not /v1/mcp. The service is stateless with JSON responses, so there is no session ID to save. Initialize first, then send the notifications/initialized notification and call tools with tools/call; reuse the negotiated version in the MCP-Protocol-Version header. Discover tool schemas with tools/list. Paths accepted by MCP are on the service host and returned artifact paths are not download URLs, so prefer inline audio or the multipart HTTP APIs from a remote client.
Guide and examplesMCP SetupAll endpoints
Parameters
AcceptstringRequiredStreamable HTTP requires both media types.MCP-Protocol-VersionstringThe version negotiated by initialize. Send it on every request after initialization.Request body
application/jsonRequired
jsonrpcstringRequiredProtocol version; always 2.0.idinteger | stringIdentifier echoed back in the response. Omit it to send a notification.methodstringRequiredFor example initialize, notifications/initialized, tools/list or tools/call.paramsobjectFor tools/call, {name, arguments}.Responses
200A JSON-RPC result. A tool failure can still arrive here, so inspect error and result.isError first.jsonrpcstringidinteger | stringresultobjecterrorobjectcodeintegermessagestringdata{
"jsonrpc": "2.0",
"id": 2,
"result": {
"structuredContent": {
"metadata": {
"sentence_count": 2
},
"result": [
{
"text": "Hello world.",
"start": 0,
"end": 0
},
{
"text": "Let us begin.",
"start": 0,
"end": 0
}
],
"truncated": false
}
}
}202A notification such as notifications/initialized was accepted. The body is empty.400Invalid request. Fix the request before retrying; use error.code for program logic and error.param to locate the input.401Invalid or missing API key.403Host or origin is not allowed, or the license was rejected. Inspect error.code to tell them apart.