Skip to main content
Glama
QR Forge MCP server

QR Forge MCP server

by jkolarov

QR Forge MCP server

An MCP server for QR Forge — create and manage trackable QR codes (links, files, Wi-Fi, WhatsApp, phone, email) straight from an AI agent. It's a thin client over the public QR Forge REST API; it stores nothing and authenticates with your QR Forge API token.

Get a token at https://qrforge.work/api/keys.

Two ways to use it

1. Local (stdio) — install and run on your machine

uvx qrforge-mcp            # or: pipx install qrforge-mcp

Add it to your MCP client (Claude Desktop / Claude Code) — claude_desktop_config.json or .mcp.json:

{
  "mcpServers": {
    "qrforge": {
      "command": "qrforge-mcp",
      "env": { "QRFORGE_API_TOKEN": "your-token-here" }
    }
  }
}

Or with Claude Code's CLI:

claude mcp add qrforge --env QRFORGE_API_TOKEN=your-token-here -- qrforge-mcp

Environment variables:

Var

Required

Default

Purpose

QRFORGE_API_TOKEN

yes (local)

—

Your QR Forge API token

QRFORGE_API_URL

no

https://qrforge.work

API base URL

2. Hosted — connect to our server, no install

The hosted server runs at https://mcp.qrforge.work/mcp/. Pass your token in the X-QRForge-Token header:

claude mcp add --transport http qrforge https://mcp.qrforge.work/mcp/ \
  --header "X-QRForge-Token: your-token-here"

The hosted server sits behind Cloudflare, which strips the Authorization header on streaming requests — so use X-QRForge-Token for the hosted endpoint. (Authorization: Bearer <token> still works for local/self-hosted instances.)

The hosted server is stateless and multi-user: it forwards each request's token to the API and never stores it.

Related MCP server: freeqrcode-mcp-server

Tools

  • Identity/tokens: whoami, list_api_tokens, create_api_token, revoke_api_token

  • Discovery: list_qr_types, list_qr_styles

  • Render (no save): render_qr

  • Create: create_url_qrcode, create_whatsapp_qrcode, create_wifi_qrcode, create_phone_qrcode, create_email_qrcode, create_file_qrcode

  • Manage: list_qrcodes, get_qrcode, update_qrcode, delete_qrcode

  • Images: get_qrcode_png, get_qrcode_svg

  • Files/logo: download_qrcode_file, replace_qrcode_file, set_qrcode_logo, remove_qrcode_logo

  • Analytics: get_qrcode_history, get_qrcode_scans

style (optional, on create/render/update) is an object with keys module_drawer (square|rounded|circle|gapped|vertical_bars|horizontal_bars), fill_type (solid|radial|horizontal|vertical), fill_color, fill_color_2, back_color (hex).

File tools accept the file via file_path (local), file_url (server downloads it), or file_base64 — up to 50 MB.

Develop

pip install -e ".[dev]"
pytest -q

Run the hosted server locally:

qrforge-mcp --http --host 0.0.0.0 --port 8001     # streamable-HTTP at /mcp/
# or stdio:
QRFORGE_API_TOKEN=... qrforge-mcp

License

MIT

Available Tools

25 tools
create_api_tokenB

Create a new API token. The full secret is returned exactly once.

Inputs: name. Returns: object

create_email_qrcodeB

Create an email QR code (static; opens a prefilled email when scanned).

Inputs: email (required), subject, body, name, +1 more.

create_file_qrcodeA

Create a file/document QR code. Provide the file via file_path (local), file_url (downloaded by the server), or file_base64. Accepts images, PDF, Office, OpenDocument and text files up to 50 MB.

Inputs: file_path, file_url, file_base64, filename, +3 more.

create_phone_qrcodeC

Create a phone-number QR code (static; dials when scanned).

Inputs: phone (required), name, style.

create_url_qrcodeA

Create a Website-link QR code. static=True encodes the URL directly (no redirect, no scan tracking, not editable); default is a tracked, editable dynamic link.

Inputs: target_url (required), name, static, expires_in_days, +1 more.

create_whatsapp_qrcodeB

Create a WhatsApp QR code from a wa.me link (tracked dynamic link).

Inputs: target_url (required), name, expires_in_days, style.

create_wifi_qrcodeB

Create a Wi-Fi QR code (static; encodes credentials directly). auth is one of WPA, WPA3, WEP, nopass.

Inputs: ssid (required), auth, password, hidden, +2 more.

delete_qrcodeB

Delete a QR code (and its underlying file, if any).

Inputs: id (required). Returns: object

download_qrcode_fileA

Download a file-backed QR code's current file. With save_path, writes it there and returns the path; otherwise returns base64 (small files only).

Inputs: id (required), save_path. Returns: object

get_qrcodeA

Get a single QR code's details by id. Use get_qrcode_png to view the image.

Inputs: id (required). Returns: object

get_qrcode_historyC

File-replacement history for a file-backed QR code (newest first).

Inputs: id (required). Returns: object

get_qrcode_pngB

Render a saved QR code as a PNG image using its stored style/logo.

Inputs: id (required), size, no_logo.

get_qrcode_scansC

Scan analytics for a dynamic QR code: daily series + totals (days 1-365).

Inputs: id (required), days. Returns: object

get_qrcode_svgB

Return a saved QR code as SVG markup (text).

Inputs: id (required). Returns: result

list_api_tokensA

List the account's API tokens (secrets are never returned).

Inputs: no named parameters. Returns: object

list_qrcodesA

List the account's QR codes with optional search (q matches name/filename), active filter, and pagination (limit max 100). Returns data + pagination.

Inputs: q, active, page, limit. Returns: object

list_qr_stylesA

List QR style presets and defaults (GET /qr/styles).

Inputs: no named parameters. Returns: object

list_qr_typesA

List available QR code types and their required fields (GET /qr/types).

Inputs: no named parameters. Returns: object

render_qrA

Render a styled QR code for an arbitrary URL without saving it.

Returns a PNG image (format='png') or the SVG markup as text (format='svg').

Inputs: url (required), format, size, style.

replace_qrcode_fileC

Replace a file-backed QR code's file while keeping its QR/link unchanged.

Inputs: id (required), file_path, file_url, file_base64, +1 more. Returns: object

revoke_api_tokenC

Revoke (delete) an API token by id.

Inputs: token_id (required). Returns: object

update_qrcodeA

Update a QR code's mutable fields. Only fields valid for the QR's type apply (e.g. target_url for url; ssid/auth/password/hidden for wifi). Set expires_in_days to 0/null to clear expiry.

Inputs: id (required), name, is_active, target_url, +10 more. Returns: object

whoamiA

Return the authenticated account's identity and QR-code count (GET /me).

Inputs: no named parameters. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 25 tools

    Disambiguation5/5

    Each tool targets a distinct action or QR type. Create tools are clearly separated by QR type (email, file, phone, URL, WhatsApp, WiFi). Management tools like get, list, update, delete are unambiguous. Even get_qrcode, get_qrcode_png, and get_qrcode_svg are distinct in output format.

    Naming Consistency5/5

    All tool names follow a consistent snake_case verb_noun pattern (e.g., create_url_qrcode, list_qrcodes, delete_qrcode). There are no deviations or mixed conventions.

    Tool Count4/5

    25 tools is slightly above the typical 3-15 range but still justified given the domain diversity: multiple QR types, file operations, analytics, style management, and API tokens. Each tool serves a distinct purpose.

    Completeness4/5

    The tool surface covers creation for all major QR types, full CRUD, file handling, analytics, style customization, and token management. Minor gaps exist (e.g., no batch operations or advanced reporting), but core workflows are well-covered.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      F
      maintenance
      Dynamic QR code platform for AI agents. Create, customize, and track QR codes without regenerating images. 37 tools covering 11 QR types (URL, vCard, WiFi, event…).
      37
      3
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to generate QR codes for URLs, text, vCard, WiFi, email, and phone numbers with customizable size, colors, and error correction.
      1
      15 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables AI assistants to generate styled QR codes with customizable colors, styles, gradients, and frames, as well as typed QR codes for WiFi, vCard, etc., using the QRMint API without requiring an API key.
      63 npm
      1
      MIT