Errors and JSON-RPC codes
Wicket returns standard HTTP status codes for REST API calls and JSON-RPC error objects for MCP proxy calls. MCP errors carry both an HTTP status and a JSON-RPC error object — well-behaved MCP clients read the JSON-RPC object.
MCP proxy errors (/mcp)
A failed MCP call returns a JSON-RPC error object:
{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32600, "message": "Authorization denied: tool 'delete_file' is not permitted for agent 'my-first-agent'" }}By HTTP status
| HTTP status | When |
|---|---|
400 | Malformed JSON body, missing/invalid jsonrpc or method field, or a tools/call name without the service__ prefix |
401 | Missing Bearer token, or unknown/invalid member key |
403 | Agent is disabled, or your membership is not approved |
405 | GET request to /mcp — MCP message exchange is POST-only |
412 | Tool call was authorized, but you have no credentials connected for that service |
429 | Rate limit exceeded for your member key |
502 | Upstream MCP server unreachable, or internal proxy error |
504 | Upstream MCP server did not respond within the timeout (30 s) |
200 + error object | Policy denial, service not enabled for the agent, or unsupported method |
JSON-RPC error codes
| Code | Meaning |
|---|---|
-32700 | Parse error — request body is not valid JSON |
-32600 | Invalid request, authentication failure, or authorization denied (policy or service allowlist) |
-32601 | Unknown method, unknown service prefix, or unsupported operation |
-32602 | Invalid params — e.g. tools/call without a service__tool prefixed name |
-32603 | Upstream error, upstream timeout, missing service credentials, or internal proxy error |
-32001 | GitHub App installation not registered — re-provision required |
Common error messages
| Message | What to do |
|---|---|
Missing Bearer token — add your member key to the MCP client config | Add Authorization: Bearer <member-key> to your client config |
Unknown member key — re-authenticate at the UI to get a new key | Your key was rotated or revoked — generate a new one from the Members tab |
Agent is disabled — contact the agent owner | The owner toggled the agent off |
Membership not approved — contact the agent owner | Your join request is still pending or was rejected |
Authorization denied: tool '<tool>' is not permitted for agent '<name>' | A policy denied the call — check the Audit tab for the matched policy |
Authorization denied: service '<service>' is not enabled for agent '<name>' | The owner has not enabled this connector on the agent |
Tool name must be prefixed with service name, e.g. 'github__get_file_contents' | Use the prefixed tool name from tools/list |
No <service> credentials configured. Connect your <service> account in the UI. | Complete the connector OAuth flow from the Members tab |
Rate limit exceeded — too many requests per key | Slow down; see Rate limits |
Policy deny messages
When a forbid policy has a deny message set (up to 500 characters), Wicket records it in the audit entry for the denied call. Open the Audit tab and expand the entry to see the message alongside the matched policy. Use deny messages to tell members why a call was blocked — “Destructive GitHub operations are blocked outside business hours” beats a bare deny.
HTTP errors (REST API)
The dashboard REST API (/api/*) uses standard status codes:
| Status | Meaning | Common cause |
|---|---|---|
400 Bad Request | Malformed request or failed validation | Missing required field, invalid value, or invalid policy configuration (e.g. deny message over 500 characters) |
401 Unauthorized | Not authenticated | No session — sign in again |
403 Forbidden | Authenticated but not allowed | Caller is not the agent owner, or member not approved |
404 Not Found | Resource does not exist | Wrong agent ID, deleted policy, or member not found |
409 Conflict | State conflict | A policy with that name already exists (create or rename) |
429 Too Many Requests | Rate limit exceeded | Too many sign-in codes requested (15 per email per hour) |
500 Internal Server Error | Unexpected server error | Retry; contact support if it persists |
Related
- Rate limits — exact thresholds
- Audit event schema — where denials are recorded
- Connect a client — client-side troubleshooting tables