Skip to main content
Glama
README.md
# QR Code Generation MCP Server

A QR code generation MCP server implemented using FastMCP, supporting text-to-QR code conversion with base64 encoding output.

<a href="https://glama.ai/mcp/servers/@2niuhe/qrcode_mcp">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@2niuhe/qrcode_mcp/badge" />
</a>

## Features

- Support for any text to QR code conversion (including Chinese characters)
- Customizable colors and styles
- Base64 encoding
- Support for STDIO, HTTP, and SSE transport modes

## Installation

```bash
uv sync
# or
pip install qrcode Pillow mcp
```

## Usage

### 0. Docker Usage

#### Build Image
```bash
docker build -t qrcode-mcp .
```

#### Run Container
```bash
# Default SSE mode
docker run -p 8008:8008 qrcode-mcp

# HTTP mode
docker run -p 8008:8008 -e TRANSPORT_MODE=http qrcode-mcp

# STDIO mode (for testing)
docker run -e TRANSPORT_MODE=stdio qrcode-mcp

# Custom host and port
docker run -p 9000:9000 -e TRANSPORT_MODE=http -e HOST=0.0.0.0 -e PORT=9000 qrcode-mcp
```

#### Environment Variables
- `TRANSPORT_MODE`: Transport mode (`sse`, `http`, `stdio`), default: `sse`
- `HOST`: Host address to bind, default: `0.0.0.0`
- `PORT`: Port to bind, default: `8008`

#### Docker Compose
```yaml
version: '3.8'
services:
  qrcode-mcp:
    build: .
    ports:
      - "8008:8008"
    environment:
      - TRANSPORT_MODE=sse
      - HOST=0.0.0.0
      - PORT=8008
```

### 1. MCP Server Mode

#### Start Server
```bash
# STDIO mode (for Claude Desktop)
python qrcode_mcp_server.py

# HTTP mode
python qrcode_mcp_server.py --http --host 127.0.0.1 --port 8008

# SSE mode (Server-Sent Events) Deprecated
python qrcode_mcp_server.py --sse --host 127.0.0.1 --port 8008
```

#### Configure Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

**STDIO Mode (Local Use):**
```json
{
  "mcpServers": {
    "qrcode-mcp": {
      "command": "python",
      "args": ["/ABSOLUTE/PATH/TO/qrcode_mcp/qrcode_mcp_server.py"],
      "cwd": "/ABSOLUTE/PATH/TO/qrcode_mcp"
    }
  }
}
```

**HTTP Mode (Network Deployment):**
```json
{
  "mcpServers": {
    "qrcode-mcp": {
      "transport": "http",
      "url": "http://127.0.0.1:8008/mcp/"
    }
  }
}
```

**SSE Mode (Server-Sent Events):**
```json
{
  "mcpServers": {
    "qrcode-mcp": {
      "serverUrl": "http://127.0.0.1:8008/sse"
    }
  }
}
```

### 2. Direct Python API Usage

```python
from qrcode_utils import text_to_qr_base64

# Basic usage
base64_result = text_to_qr_base64("Hello, World!")

# Custom styling
base64_result = text_to_qr_base64(
    "Custom QR Code",
    box_size=15,
    fill_color="darkblue",
    back_color="lightgray"
)
```

## MCP Tools

### `generate_qr_code`
Generate QR code and return base64 encoding.

**Parameters:**
- `text` (required): Text content to convert
- `box_size` (optional): Pixel size of each box, default 10
- `border` (optional): Number of border boxes, default 4
- `fill_color` (optional): Foreground color, default "black"
- `back_color` (optional): Background color, default "white"
- `return_data_url` (optional): Whether to return Data URL format, default false

## Testing

```bash
python test_mcp_client.py
```

## License

MIT License 

TDQS

B3.2/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The tool's purpose is singular and clearly defined as generating QR codes from text.

Naming Consistency5/5

The single tool name 'generate_qr_code' follows a clear verb_noun pattern. Since there is only one tool, consistency is inherently perfect with no deviations to assess.

Tool Count2/5

One tool is too few for a server with the broad name 'qrcode generator'. While it covers basic generation, typical QR code use cases might include features like reading/decoding QR codes, generating with logos, or batch processing, which are missing.

Completeness2/5

The tool surface is severely incomplete for a QR code generator domain. It only provides generation from text, lacking common operations like decoding QR codes, generating from URLs or other data types, or handling error correction levels, which are standard in such tools.

Maintenance

ActivityInactive
ResponsivenessSyncing