Scan QRCode MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Scan QRCode MCP Serverdecode this QR code from https://example.com/qr.png"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Scan QRCode MCP Server
MCP server that decodes QR codes from either a data URL (base64) or an HTTP(S) image URL and returns the decoded text.
Features
Two precise tools for decoding:
decode_qrcode_data_url— acceptsimageDataUrldecode_qrcode_image_url— acceptsimageUrl
Decodes common image formats (PNG, JPEG, etc.).
Deterministic behavior with clear errors for invalid inputs.
Related MCP server: mcp-qrcode
Getting Started
Configure this MCP server in your client using either npx (recommended) or the global binary.
Standard config (recommended, uses npx):
{
"mcpServers": {
"qrcode": {
"command": "npx",
"args": [
"scan-qrcode-mcp@latest"
]
}
}
}Alternative using the global binary (after npm i -g scan-qrcode-mcp):
{
"mcpServers": {
"qrcode": {
"command": "scan-qrcode-mcp",
"args": []
}
}
}Follow the MCP install guide: https://modelcontextprotocol.io/quickstart/user
Use the Standard config JSON above (name it qrcode).
Use the Claude Code CLI to add the QR MCP server:
claude mcp add qrcode npx scan-qrcode-mcp@latestFollow: https://code.visualstudio.com/docs/copilot/chat/mcp-servers#_add-an-mcp-server Or install via VS Code CLI (npx example):
code --add-mcp '{"name":"qrcode","command":"npx","args":["scan-qrcode-mcp@latest"]}'Edit ~/.codex/config.toml and add one of the following:
[mcp_servers.qrcode]
command = "npx"
args = ["scan-qrcode-mcp@latest"]or, if you installed globally:
[mcp_servers.qrcode]
command = "scan-qrcode-mcp"Settings -> MCP -> Add new MCP Server.
Name: qrcode. Either use npx scan-qrcode-mcp@latest or the global binary.
Notes:
Requires Node.js 18.17+.
If using the global binary but
scan-qrcode-mcpis not found, ensure your global npm bin is on PATH and restart the client.
Project Structure
src/
server.ts
services/
qrcode-service.ts
utils/
data-url.ts
tests/
services/
qrcode.spec.tsScripts
npm i: Install dependencies.npm run dev: Start MCP server in watch mode (stdio transport).npm run build: Compile TypeScript todist/.npm start: Run compiled server fromdist/.npm test: Run unit tests with coverage (Vitest).npm run lint/npm run format: Lint and format.
Usage
The server uses stdio transport and exposes two tools:
decode_qrcode_data_urlInput:
{ imageDataUrl: string }—data:<mime>;base64,<data>URL for the QR image
decode_qrcode_image_urlInput:
{ imageUrl: string }—http(s)URL to the QR image
Examples (pseudo-JSON-RPC over MCP):
Decode from data URL
{
"method": "tools/call",
"params": {
"name": "decode_qrcode_data_url",
"arguments": { "imageDataUrl": "data:image/png;base64,..." }
}
}Decode from image URL
{
"method": "tools/call",
"params": {
"name": "decode_qrcode_image_url",
"arguments": { "imageUrl": "https://example.com/qr.png" }
}
}Response text content contains the decoded string.
Configuration
Requires Node.js 18.17+ for built-in
fetch.No environment variables are required.
Security Notes
Only
http(s)is allowed forimageUrl. Data URLs must be base64-encoded.Do not pass untrusted remote URLs without appropriate allowlisting in your environment.
License
MIT
Available Tools
2 toolsdecode_qrcode_data_urlC
Decode a QR code from a data URL (data:;base64,...)
| Name | Required | Description | Default |
|---|---|---|---|
| imageDataUrl | Yes | Image data URL (base64) of the QR image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool decodes QR codes from data URLs but doesn't mention error handling, performance characteristics, or what happens with invalid inputs. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function and input format without unnecessary details. It is front-loaded and wastes no words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., decoded text, error messages) or address potential complexities like handling malformed data URLs. For a decoding tool with no structured output information, more context is needed to understand its full operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'imageDataUrl' well-documented in the schema. The description adds minimal value by reiterating the data URL format but doesn't provide additional context like examples or constraints beyond what the schema already specifies, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Decode a QR code') and the input source ('from a data URL'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from its sibling tool 'decode_qrcode_image_url', which likely handles different input formats, leaving some ambiguity about when to choose one over the other.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as its sibling 'decode_qrcode_image_url'. It mentions the input format but doesn't specify scenarios where a data URL is appropriate or compare it to other decoding methods, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_qrcode_image_urlC
Decode a QR code from an HTTP(S) image URL
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | HTTP(S) URL to the QR image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action 'decode' but does not describe what happens on failure (e.g., invalid URL, non-QR image), rate limits, authentication needs, or output format. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (decoding QR codes from URLs) and lack of annotations and output schema, the description is incomplete. It does not explain what the tool returns (e.g., decoded text, error messages) or behavioral aspects like error handling. For a tool with no structured output or annotations, more context is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the parameter 'imageUrl' fully documented in the schema as 'HTTP(S) URL to the QR image.' The description adds no additional meaning beyond this, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'decode' and the resource 'QR code from an HTTP(S) image URL', making the purpose specific and understandable. However, it does not explicitly differentiate from its sibling tool 'decode_qrcode_data_url', which likely handles data URLs instead of HTTP(S) URLs, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its sibling 'decode_qrcode_data_url' or other alternatives. It implies usage for HTTP(S) URLs but lacks explicit when/when-not instructions or prerequisites, leaving the agent to infer context without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- First observed
decode_qrcode_data_url - First observed
decode_qrcode_image_url
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one decodes QR codes from data URLs, while the other decodes from HTTP(S) image URLs. There is no overlap or ambiguity between them, making it easy for an agent to select the correct tool based on the input source.
Both tools follow a consistent verb_noun pattern with 'decode_qrcode_' as a prefix, followed by 'data_url' and 'image_url'. The naming is uniform and predictable, using snake_case throughout without any deviations.
With only two tools, the server feels thin for a QR code decoding domain, as it might lack operations like encoding QR codes or handling local file inputs. However, the count is reasonable for a minimal decoding-focused server, though it borders on being too limited.
The server is severely incomplete for QR code operations, as it only provides decoding from two specific input types (data URLs and image URLs). There are significant gaps, such as no encoding tools, no support for local files, and no error handling or validation tools, which could lead to agent failures in broader use cases.
Maintenance
Related MCP Connectors
Generate QR codes for URLs, PIX, Wi-Fi, vCards, WhatsApp and more. For AI agents.
Generate static QR codes (URL, WiFi, vCard, pixel art) and decode QR images. Codes never expire.
Image processing over MCP: compress and split images, generate images and QR codes.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables image analysis and recognition through multiple LLM vision models (Gemini, GPT-4o, Qwen-VL, Doubao) by accepting image URLs or Base64 data and returning text descriptions or answers to questions about the images.1-
- AlicenseNot gradedqualityCmaintenanceEnables decoding QR code images to extract embedded text or URLs via api.qrserver.com.11MIT
- AlicenseNot gradedqualityBmaintenanceEnables barcode decoding from URLs, uploaded files, or raw bytes via HTTP and MCP, supporting formats like EAN13, QRCode, and DataMatrix.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate QR codes from text and scan QR codes from images, supporting multiple codes per image and customizable output paths.-