# QR — canonical payload contracts

Create and read QR codes and 1D barcodes; vCard / Wi-Fi / EPC payment QR helpers. Does not initiate payments.

**Service id:** `qr`  
**Docs:** [https://mcp.glc-rag.hu/guide/qr](https://mcp.glc-rag.hu/guide/qr)  
**Markdown docs:** [https://mcp.glc-rag.hu/guide/qr.md](https://mcp.glc-rag.hu/guide/qr.md)  
**MCP resource:** `docs://qr/payload`

POST `https://mcp.glc-rag.hu/mcp`. Values below are **type slots** from the live input schema (e.g. `<string, required>`), not example data. Fill them from the user task.

RPC result wrapper: `result.structuredContent` is the object in **Output schema**. `result.isError` mirrors `structuredContent.is_error`.

## `qr_create`

Encode text/URL into a QR PNG published to staging.

**Required arguments:** `data`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "qr_create",
    "arguments": {
      "data": "<string, required>",
      "error_correction": "<string, optional, enum L|M|Q|H, default 'M'>",
      "box_size": "<integer, optional, default 8, minimum 1, maximum 40>",
      "border": "<integer, optional, default 4, minimum 0, maximum 20>",
      "fill": "<string, optional, default '#000000'>",
      "back": "<string, optional, default '#ffffff'>",
      "return_base64": "<boolean, optional, default False>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "string"
    },
    "error_correction": {
      "type": "string",
      "enum": [
        "L",
        "M",
        "Q",
        "H"
      ],
      "default": "M"
    },
    "box_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 40,
      "default": 8
    },
    "border": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "default": 4
    },
    "fill": {
      "type": "string",
      "default": "#000000"
    },
    "back": {
      "type": "string",
      "default": "#ffffff"
    },
    "return_base64": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    },
    "format": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "url"
  ]
}
```

**Error object**

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

## `qr_read`

Decode QR codes from an image (URL or base64).

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "qr_read",
    "arguments": {
      "url": "<string, optional>",
      "content_base64": "<string, optional>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public/staging image URL"
    },
    "content_base64": {
      "type": "string",
      "description": "Small image base64"
    }
  },
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "found": {
      "type": "boolean"
    },
    "text": {
      "type": [
        "string",
        "null"
      ]
    },
    "symbology": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
```

**Error object**

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

## `barcode_create`

Encode 1D barcode (code128/ean13/ean8/upc/isbn13/itf) to staging PNG.

**Required arguments:** `data`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "barcode_create",
    "arguments": {
      "data": "<string, required>",
      "symbology": "<string, optional, enum code128|ean13|ean8|upc|isbn13|itf, default 'code128'>",
      "write_text": "<boolean, optional, default True>",
      "return_base64": "<boolean, optional, default False>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "string"
    },
    "symbology": {
      "type": "string",
      "enum": [
        "code128",
        "ean13",
        "ean8",
        "upc",
        "isbn13",
        "itf"
      ],
      "default": "code128"
    },
    "write_text": {
      "type": "boolean",
      "default": true
    },
    "return_base64": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    },
    "format": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "url"
  ]
}
```

**Error object**

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

## `barcode_read`

Decode 1D/QR barcodes from an image.

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "barcode_read",
    "arguments": {
      "url": "<string, optional>",
      "content_base64": "<string, optional>",
      "types_filter": [
        "<string, optional>"
      ]
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public/staging image URL"
    },
    "content_base64": {
      "type": "string",
      "description": "Small image base64"
    },
    "types_filter": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional zbar types: EAN13, CODE128, QRCODE, …"
    }
  },
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "found": {
      "type": "boolean"
    },
    "text": {
      "type": [
        "string",
        "null"
      ]
    },
    "symbology": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
```

**Error object**

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

## `vcard_qr_create`

Build a vCard 3.0 and encode it as a QR PNG.

**Required arguments:** `full_name`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "vcard_qr_create",
    "arguments": {
      "full_name": "<string, required>",
      "org": "<string, optional>",
      "title": "<string, optional>",
      "email": "<string, optional>",
      "phone": "<string, optional>",
      "url": "<string, optional>",
      "note": "<string, optional>",
      "address": {
        "street": "<string, optional>",
        "city": "<string, optional>",
        "region": "<string, optional>",
        "postal": "<string, optional>",
        "country": "<string, optional>"
      },
      "error_correction": "<string, optional, enum L|M|Q|H, default 'M'>",
      "box_size": "<integer, optional, default 8, minimum 1, maximum 40>",
      "border": "<integer, optional, default 4, minimum 0, maximum 20>",
      "fill": "<string, optional, default '#000000'>",
      "back": "<string, optional, default '#ffffff'>",
      "return_base64": "<boolean, optional, default False>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "full_name": {
      "type": "string"
    },
    "org": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "email": {
      "type": "string"
    },
    "phone": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "address": {
      "type": "object",
      "properties": {
        "street": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "postal": {
          "type": "string"
        },
        "country": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "error_correction": {
      "type": "string",
      "enum": [
        "L",
        "M",
        "Q",
        "H"
      ],
      "default": "M"
    },
    "box_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 40,
      "default": 8
    },
    "border": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "default": 4
    },
    "fill": {
      "type": "string",
      "default": "#000000"
    },
    "back": {
      "type": "string",
      "default": "#ffffff"
    },
    "return_base64": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "full_name"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    },
    "format": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "url"
  ]
}
```

**Error object**

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

## `wifi_qr_create`

Build a WIFI: QR for network join (does not connect).

**Required arguments:** `ssid`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "wifi_qr_create",
    "arguments": {
      "ssid": "<string, required>",
      "password": "<string, optional>",
      "security": "<string, optional, enum WPA|WEP|nopass, default 'WPA'>",
      "hidden": "<boolean, optional, default False>",
      "error_correction": "<string, optional, enum L|M|Q|H, default 'M'>",
      "box_size": "<integer, optional, default 8, minimum 1, maximum 40>",
      "border": "<integer, optional, default 4, minimum 0, maximum 20>",
      "fill": "<string, optional, default '#000000'>",
      "back": "<string, optional, default '#ffffff'>",
      "return_base64": "<boolean, optional, default False>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "ssid": {
      "type": "string"
    },
    "password": {
      "type": "string"
    },
    "security": {
      "type": "string",
      "enum": [
        "WPA",
        "WEP",
        "nopass"
      ],
      "default": "WPA"
    },
    "hidden": {
      "type": "boolean",
      "default": false
    },
    "error_correction": {
      "type": "string",
      "enum": [
        "L",
        "M",
        "Q",
        "H"
      ],
      "default": "M"
    },
    "box_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 40,
      "default": 8
    },
    "border": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "default": 4
    },
    "fill": {
      "type": "string",
      "default": "#000000"
    },
    "back": {
      "type": "string",
      "default": "#ffffff"
    },
    "return_base64": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "ssid"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    },
    "format": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "url"
  ]
}
```

**Error object**

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

## `payment_qr_create`

Build an EPC/SCT payment QR (EUR). Does not initiate a transfer.

**Required arguments:** `iban`, `name`

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "payment_qr_create",
    "arguments": {
      "profile": "<string, optional, enum epc, default 'epc'>",
      "iban": "<string, required>",
      "name": "<string, required>",
      "amount": "<string, optional>",
      "currency": "<string, optional, default 'EUR'>",
      "remittance": "<string, optional>",
      "purpose": "<string, optional>",
      "bic": "<string, optional>",
      "error_correction": "<string, optional, enum L|M|Q|H, default 'M'>",
      "box_size": "<integer, optional, default 8, minimum 1, maximum 40>",
      "border": "<integer, optional, default 4, minimum 0, maximum 20>",
      "fill": "<string, optional, default '#000000'>",
      "back": "<string, optional, default '#ffffff'>",
      "return_base64": "<boolean, optional, default False>"
    }
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "profile": {
      "type": "string",
      "enum": [
        "epc"
      ],
      "default": "epc"
    },
    "iban": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "description": "Beneficiary name"
    },
    "amount": {
      "type": "string",
      "description": "e.g. 12.34"
    },
    "currency": {
      "type": "string",
      "default": "EUR"
    },
    "remittance": {
      "type": "string"
    },
    "purpose": {
      "type": "string"
    },
    "bic": {
      "type": "string"
    },
    "error_correction": {
      "type": "string",
      "enum": [
        "L",
        "M",
        "Q",
        "H"
      ],
      "default": "M"
    },
    "box_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 40,
      "default": 8
    },
    "border": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "default": 4
    },
    "fill": {
      "type": "string",
      "default": "#000000"
    },
    "back": {
      "type": "string",
      "default": "#ffffff"
    },
    "return_base64": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "iban",
    "name"
  ],
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    },
    "format": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "url"
  ]
}
```

**Error object**

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

## `qr_status`

QR service health and limits.

**Required arguments:** _(none)_

**Request contract**

```json
{
  "jsonrpc": "2.0",
  "id": "<integer|string>",
  "method": "tools/call",
  "params": {
    "name": "qr_status",
    "arguments": {}
  }
}
```

**Input schema**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

**Output schema** (`structuredContent` on success)

```json
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    }
  },
  "additionalProperties": true,
  "required": [
    "ok"
  ]
}
```

**Error object**

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