# Canonical MCP payloads

Per-service **contracts**: JSON-RPC envelope, each tool’s `inputSchema` (required fields, types, enums, defaults), and the handler’s `structuredContent` output schema. No sample IDs or invented query strings.

Endpoint: `POST https://mcp.glc-rag.hu/mcp` with `Authorization: Bearer mcp_…`.

Input contracts are the live `ToolSpec.input_schema`. Output contracts live in each package’s `payloads.py` (`OUTPUT_SCHEMAS`), separate from handlers.

## Wire format

Request schema:

```json
{
  "type": "object",
  "required": [
    "jsonrpc",
    "id",
    "method",
    "params"
  ],
  "properties": {
    "jsonrpc": {
      "type": "string",
      "const": "2.0"
    },
    "id": {
      "type": [
        "integer",
        "string"
      ]
    },
    "method": {
      "type": "string",
      "const": "tools/call"
    },
    "params": {
      "type": "object",
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Tool name"
        },
        "arguments": {
          "type": "object"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
```

Success/error RPC result (tool output is `result.structuredContent`):

```json
{
  "type": "object",
  "required": [
    "jsonrpc",
    "id",
    "result"
  ],
  "properties": {
    "jsonrpc": {
      "type": "string",
      "const": "2.0"
    },
    "id": {
      "type": [
        "integer",
        "string"
      ]
    },
    "result": {
      "type": "object",
      "required": [
        "content",
        "structuredContent",
        "isError"
      ],
      "properties": {
        "content": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "text"
            ],
            "properties": {
              "type": {
                "type": "string",
                "const": "text"
              },
              "text": {
                "type": "string",
                "description": "JSON serialization of structuredContent"
              }
            }
          }
        },
        "structuredContent": {
          "type": "object",
          "description": "Tool handler output (see per-tool output schema)"
        },
        "isError": {
          "type": "boolean",
          "description": "True when structuredContent.is_error is true"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
```

Handler error object (when validation or the tool fails):

```json
{
  "type": "object",
  "required": [
    "error",
    "is_error"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "is_error": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": true
}
```

Billed tools may add optional `credits_charged` and `credits_balance` on `structuredContent`. Free `*_status` tools do not.

## Services

- [Hello](https://mcp.glc-rag.hu/guide/hello/payload.md) (`hello`, 1 tools) — [HTML](https://mcp.glc-rag.hu/guide/hello/payload)
- [Geo](https://mcp.glc-rag.hu/guide/geo/payload.md) (`geo`, 24 tools) — [HTML](https://mcp.glc-rag.hu/guide/geo/payload)
- [Plant](https://mcp.glc-rag.hu/guide/plant/payload.md) (`plant`, 4 tools) — [HTML](https://mcp.glc-rag.hu/guide/plant/payload)
- [Herbal](https://mcp.glc-rag.hu/guide/herbal/payload.md) (`herbal`, 6 tools) — [HTML](https://mcp.glc-rag.hu/guide/herbal/payload)
- [Compound](https://mcp.glc-rag.hu/guide/compound/payload.md) (`compound`, 4 tools) — [HTML](https://mcp.glc-rag.hu/guide/compound/payload)
- [Supplement](https://mcp.glc-rag.hu/guide/supplement/payload.md) (`supplement`, 4 tools) — [HTML](https://mcp.glc-rag.hu/guide/supplement/payload)
- [Drug](https://mcp.glc-rag.hu/guide/drug/payload.md) (`drug`, 7 tools) — [HTML](https://mcp.glc-rag.hu/guide/drug/payload)
- [Fetch](https://mcp.glc-rag.hu/guide/fetch/payload.md) (`fetch`, 2 tools) — [HTML](https://mcp.glc-rag.hu/guide/fetch/payload)
- [Search](https://mcp.glc-rag.hu/guide/search/payload.md) (`search`, 5 tools) — [HTML](https://mcp.glc-rag.hu/guide/search/payload)
- [Docs](https://mcp.glc-rag.hu/guide/docs/payload.md) (`docs`, 2 tools) — [HTML](https://mcp.glc-rag.hu/guide/docs/payload)
- [Shot](https://mcp.glc-rag.hu/guide/shot/payload.md) (`shot`, 2 tools) — [HTML](https://mcp.glc-rag.hu/guide/shot/payload)
- [Image](https://mcp.glc-rag.hu/guide/img/payload.md) (`img`, 3 tools) — [HTML](https://mcp.glc-rag.hu/guide/img/payload)
- [Email](https://mcp.glc-rag.hu/guide/email/payload.md) (`email`, 7 tools) — [HTML](https://mcp.glc-rag.hu/guide/email/payload)
- [QR](https://mcp.glc-rag.hu/guide/qr/payload.md) (`qr`, 8 tools) — [HTML](https://mcp.glc-rag.hu/guide/qr/payload)
- [PDF](https://mcp.glc-rag.hu/guide/pdf/payload.md) (`pdf`, 5 tools) — [HTML](https://mcp.glc-rag.hu/guide/pdf/payload)
- [Validate](https://mcp.glc-rag.hu/guide/validate/payload.md) (`validate`, 10 tools) — [HTML](https://mcp.glc-rag.hu/guide/validate/payload)
- [Promptguard](https://mcp.glc-rag.hu/guide/promptguard/payload.md) (`promptguard`, 2 tools) — [HTML](https://mcp.glc-rag.hu/guide/promptguard/payload)
- [Whisper](https://mcp.glc-rag.hu/guide/whisper/payload.md) (`whisper`, 3 tools) — [HTML](https://mcp.glc-rag.hu/guide/whisper/payload)
- [Staging](https://mcp.glc-rag.hu/guide/staging/payload.md) (`staging`, 5 tools) — [HTML](https://mcp.glc-rag.hu/guide/staging/payload)
- [GLC-TTS](https://mcp.glc-rag.hu/guide/tts/payload.md) (`tts`, 5 tools) — [HTML](https://mcp.glc-rag.hu/guide/tts/payload)
- [Vision](https://mcp.glc-rag.hu/guide/vision/payload.md) (`vision`, 4 tools) — [HTML](https://mcp.glc-rag.hu/guide/vision/payload)
