Protocol and limits
MCP clients handle all of this for you. This page is for anyone calling the server by hand or building their own client.
Transport
Streamable HTTP, stateless, protocol version 2025-06-18. Each call is one JSON-RPC 2.0 request in a POST and one JSON response back. No session is held between calls, and there is no SSE stream. The server understands initialize, tools/list and tools/call.
curl -X POST https://app.rubricary.com/api/mcp \ -H "content-type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'curl -X POST https://app.rubricary.com/api/mcp \ -H "content-type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "get_prompt", "arguments": { "name": "support/refund-request" } } }'A tool's result comes back as a single text content block holding JSON.
Errors
| Code | Meaning |
|---|---|
| -32600 | The body isn't a JSON-RPC 2.0 request. |
| -32601 | Unknown method or unknown tool. |
| -32602 | A required argument is missing or malformed. |
| -32603 | The tool failed on the server. Safe to retry. |
Rate limit
The read tools aren't metered. validate_prompt runs a model, so it goes through the same guard chain as /validate and draws from the same quota. When the quota is spent, the call still succeeds at the protocol level, but its result has isError: true and a message saying why. An agent should pass that on to its user rather than retry. The details are in what the validator does with your text.