QR Branding
@qr-branding/mcp-server
MCP server for the QR Branding API. Lets Claude Desktop, Claude Code, Cursor, ChatGPT desktop, and any other Model Context Protocol client generate branded QR codes, render any of the 118 curated templates, or assemble Wi-Fi / vCard / geo payloads — all through your QR Branding API key.
What it does
The server exposes the QR Branding public API gateway (https://qr-branding.com/api/v1/...) as a small set of MCP tools. The gateway handles authentication, credit metering and rate limiting; this server just forwards prompts/inputs from your assistant to the gateway and renders the QR image inline back into the chat.
Related MCP server: QR for Agent
Install
npx -y @qr-branding/mcp-serverGet an API key
Sign in at qr-branding.com and create a key under Dashboard → API keys (/dashboard/keys). Keys look like qrb_xxx.... API access requires an active Studio pack; without one every call returns HTTP 402 studio_required.
Client config
Claude Desktop (claude_desktop_config.json) / Claude Code (.mcp.json)
Claude Desktop: Settings → Developer → Edit Config opens the file (macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json).
{
"mcpServers": {
"qr-branding": {
"command": "npx",
"args": ["-y", "@qr-branding/mcp-server"],
"env": {
"QR_BRANDING_API_KEY": "qrb_xxx"
}
}
}
}Optional environment
QR_BRANDING_API_BASE_URL— override the gateway URL. Defaulthttps://qr-branding.com. Useful for self-hosters and staging.
Remote server (no install)
The same seven tools are served over Streamable HTTP at https://qr-branding.com/mcp. Claude Code:
claude mcp add --transport http qr-branding https://qr-branding.com/mcp --header "Authorization: Bearer qrb_xxx"Want to try it before getting a key? The remote server also answers without one, in a keyless trial mode: every tool except qr_generate_ai, PNG up to 720 px, 20 tool calls per day per network. This npm package always needs QR_BRANDING_API_KEY.
Full docs: https://qr-branding.com/docs/integrations/mcp
Tools
Tool | What it does |
| Manual QR generation with explicit colors, module/finder shapes, logo, caption, format. |
| Prompt-driven design — the server-side LLM (Groq → Gemini fallback) picks the style for you. |
| List the 118 curated templates (id, name, description, preview thumbnail URL). |
| Render a template by id with per-call overrides (content, colors, format/size). |
| Encode Wi-Fi credentials into a scannable Wi-Fi QR. |
| Encode a contact card (vCard) into a QR. |
| Encode latitude/longitude into a |
For raster/SVG outputs the tool returns an inline image block so the assistant shows the QR directly in chat. For PDF the tool saves to a temp file and returns the path.
Usage examples
Ask your assistant things like:
"Generate a QR code for https://qr-branding.com with a circular module shape and gold color."
"Make me a luxury QR for my coffee brand — content is https://baristabros.example, gold dots on cream background."
"List the QR templates in the 'business' category and render template 12 for https://acme.example."
"Encode my home Wi-Fi as a QR: SSID 'HomeNetwork', password 'wifi-please-7', WPA, hidden."
"Build a vCard QR for Jane Doe at Acme Inc., +1-555-867-5309, jane@acme.example, https://acme.example."
"Make a geo QR for 40.4168, -3.7038 (Madrid)."
Limits and billing
API access is metered by API credits issued with your plan or topped up via promo codes. The free tier has no API quota — the gateway returns HTTP 402 out_of_api_credits and the tool surfaces that verbatim with an upgrade hint. Manage your plan at qr-branding.com/dashboard.
Privacy
This server only forwards your prompts/inputs to qr-branding.com. It does not phone home, does not include analytics or third-party telemetry, and reads QR_BRANDING_API_KEY only once at startup. The QR Branding privacy policy lives at qr-branding.com/privacy.
Develop locally
npm install
npm run build # tsc → dist/
# smoke test the gateway with your key
QR_BRANDING_API_KEY=qrb_xxx npm run smoke
# include a sample QR generation
QR_BRANDING_API_KEY=qrb_xxx SMOKE_GENERATE=1 npm run smoke
# wire dist/index.js into your MCP client as a `command` for local testing
node dist/index.jsLicense
MIT
Available Tools
7 toolsqr_build_geoBuild a geo: URI QRARead-onlyIdempotent
Encode a latitude/longitude pair into a geo: URI QR. Scanning opens the location in the device's default maps app.
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | Latitude in decimal degrees (-90 to 90). | |
| longitude | Yes | Longitude in decimal degrees (-180 to 180). |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | File format the engine rendered: png, svg, jpg, webp or pdf. |
| payload | Yes | The payload string the engine built and the QR encodes (WIFI:..., BEGIN:VCARD..., geo:...). |
| filePath | No | PDF in the stdio package only: local temp file the PDF was written to. |
| mimeType | No | MIME type of the rendered file (the engine's contentType). |
| sizeBytes | No | Size of the rendered file in bytes, as reported by the engine. |
| resourceUri | No | PDF on the remote server only: URI of the embedded resource block that carries the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real context beyond that: the produced QR resolves to a location opened in the device's default maps app, which tells the agent what the artifact is for.
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?
Two sentences, no filler, with the core action first and the downstream behavior second. Every clause earns its place.
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?
For a two-parameter, fully documented, output-schema-backed tool with rich annotations, the description supplies what an agent needs to invoke it correctly. Only minor details (e.g., URI precision or format of the encoded string) are left unstated, and the output schema covers returns.
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?
Schema coverage is 100% and both parameters carry ranges and units in the schema itself. The description only restates 'latitude/longitude pair', adding no format, precision, or edge-case meaning beyond the structured fields, so the baseline 3 applies.
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?
States a specific verb (encode) and resource (a geo: URI QR) plus the two inputs, so the agent knows exactly what this produces. It is distinguishable from the qr_build_wifi and qr_build_vcard siblings by the geo domain, though no sibling is named explicitly and none needs to be.
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?
Usage is implied rather than stated: the agent can infer this is the tool for location QR codes, but there is no when-to-use/when-not-to-use guidance and no mention of alternatives such as qr_generate or qr_generate_from_template. Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_build_vcardBuild a vCard QRARead-onlyIdempotent
Encode a contact card (vCard) with first and last name, organization, phone, email and website URL into a QR. Scanning the QR adds the contact to the phone's address book.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Personal or company website URL. | |
| No | Email address. | ||
| phone | No | Phone number, including country code (e.g. +1-555-867-5309). | |
| lastName | No | Contact's last name. | |
| firstName | Yes | Contact's first name. | |
| organization | No | Company or organization name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | File format the engine rendered: png, svg, jpg, webp or pdf. |
| payload | Yes | The payload string the engine built and the QR encodes (WIFI:..., BEGIN:VCARD..., geo:...). |
| filePath | No | PDF in the stdio package only: local temp file the PDF was written to. |
| mimeType | No | MIME type of the rendered file (the engine's contentType). |
| sizeBytes | No | Size of the rendered file in bytes, as reported by the engine. |
| resourceUri | No | PDF on the remote server only: URI of the embedded resource block that carries the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as readOnly, idempotent, non-destructive, and not open-world, so the safety profile is covered. The description adds useful behavioral context by explaining that the output QR, when scanned, adds the contact to an address book.
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?
Two sentences, front-loaded with the core action and followed by the scanning effect. There is no redundant or filler content.
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 simplicity, full schema descriptions, rich annotations, and the presence of an output schema, the description is complete enough for an agent to understand what the tool produces and why it is used. It does not need to explain return values or permissions in more detail.
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?
Schema description coverage is 100%, so the schema already documents every parameter's meaning and format. The description lists the same fields but does not add syntax, constraints, or other parameter-level meaning beyond what is already in the schema.
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 uses a specific verb and resource: 'Encode a contact card (vCard)... into a QR.' It names the exact fields and the resulting behavior, so an agent can distinguish this specialized vCard builder from generic QR generation or sibling builders like qr_build_wifi and qr_build_geo.
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 implies the use case by stating that scanning the QR adds the contact to a phone's address book. However, it does not explicitly say when to choose this tool over qr_generate or other QR builders, nor does it state exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_build_wifiBuild a Wi-Fi QRARead-onlyIdempotent
Encode Wi-Fi credentials (SSID, password, auth type, hidden flag) into a scannable Wi-Fi QR. Returns both the WIFI:... payload string and a generated QR image.
| Name | Required | Description | Default |
|---|---|---|---|
| ssid | Yes | The Wi-Fi network name (SSID). | |
| hidden | No | Set true if the SSID is hidden (not broadcast). Defaults to false. | |
| authType | No | Authentication type. Defaults to "WPA". Use "nopass" for open networks. | |
| password | No | Network password. Required unless authType is "nopass". |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | File format the engine rendered: png, svg, jpg, webp or pdf. |
| payload | Yes | The payload string the engine built and the QR encodes (WIFI:..., BEGIN:VCARD..., geo:...). |
| filePath | No | PDF in the stdio package only: local temp file the PDF was written to. |
| mimeType | No | MIME type of the rendered file (the engine's contentType). |
| sizeBytes | No | Size of the rendered file in bytes, as reported by the engine. |
| resourceUri | No | PDF on the remote server only: URI of the embedded resource block that carries the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the return shape (a WIFI:... payload string plus a generated QR image), which is genuinely useful context beyond the annotations, though it says nothing about failure modes such as invalid auth/credential combinations.
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?
Two tight sentences, front-loaded with the action and credential set, followed by the return value. No filler or redundancy.
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?
With an output schema present and 100% parameter coverage, the description need not explain return values, yet it briefly does. It is complete enough for a simple deterministic builder, with only the missing sibling-routing guidance as a small gap.
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?
Schema description coverage is 100%, so each parameter (ssid, password, authType, hidden) is already documented in the schema, including the nopass enum meaning. The description only echoes the field names, adding no syntax or format detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb and resource ('Encode Wi-Fi credentials ... into a scannable Wi-Fi QR') and enumerates the inputs it consumes, making it clearly distinguishable from qr_build_vcard, qr_build_geo, and the generic qr_generate siblings.
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?
Usage is implied by the name and description — you use this when you need a Wi-Fi QR — but there is no explicit routing guidance versus the generic qr_generate tool or the other qr_build_* variants, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_generateGenerate a QR code (manual)ARead-onlyIdempotent
Generate a fully branded QR code with explicit control over colors, module/finder shapes, logo, caption, and output format. Use this when the user already knows the design they want.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Optional caption rendered below the QR (e.g. a slogan). | |
| content | Yes | The text or URL the QR will encode. Required. | |
| logoUrl | No | Public HTTPS URL of a logo image to embed at the center. | |
| eccLevel | No | Error-correction level (L=7%, M=15%, Q=25%, H=30%). Higher levels survive more damage but are denser. | |
| frameText | No | Label inside the frame, max 40 characters, any language (e.g. "Scan me", "View the menu"). Defaults to "Scan me". | |
| fileFormat | No | Output format. Defaults to "png". | |
| frameColor | No | Frame colour in hex, also the label background. Defaults to "#000000". | |
| frameStyle | No | Call-to-action frame around the whole QR with a short label. Never covers the QR or its quiet zone. | |
| moduleShape | No | Shape of the small modules in the QR matrix. | |
| outputWidth | No | Output width in pixels (raster) or viewport units (svg). 64-4096. | |
| outputHeight | No | Output height in pixels (raster) or viewport units (svg). 64-4096. | |
| primaryColor | No | Foreground/module color in hex (e.g. "#000000" or "#0a84ff"). | |
| frameTextColor | No | Frame label colour in hex. Defaults to "#FFFFFF". | |
| backgroundColor | No | Background color in hex (e.g. "#ffffff"). Use "transparent" for no background. | |
| additionalConfig | No | Escape hatch: any other QrConfig field the engine accepts (gradient stops, dot rotation, etc.). Merged on top of the structured fields above. | |
| finderInnerShape | No | Shape of the inner dot of the three corner finder patterns. | |
| finderOuterShape | No | Shape of the outer ring of the three corner finder patterns. |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | File format the engine rendered: png, svg, jpg, webp or pdf. |
| content | No | The text or URL the QR encodes, when the call set it. |
| filePath | No | PDF in the stdio package only: local temp file the PDF was written to. |
| mimeType | No | MIME type of the rendered file (the engine's contentType). |
| sizeBytes | No | Size of the rendered file in bytes, as reported by the engine. |
| resourceUri | No | PDF on the remote server only: URI of the embedded resource block that carries the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds little beyond that: no note on whether the logoUrl must be publicly reachable, how additionalConfig merges/overrides, or generation latency, and the output schema already covers returns.
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?
Two sentences, no redundancy, with the capability scope front-loaded and the selection condition second. Nothing could be removed without losing information.
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?
For a 17-parameter tool the description is short, but the 100% schema coverage, output schema, and full annotation set carry the detail. It conveys what the tool produces and when to pick it; the only real gap is not naming the AI sibling explicitly.
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?
Schema description coverage is 100%, so every one of the 17 parameters is already documented in the schema, including enums, ranges, and defaults. The description only groups them at a high level (colors, shapes, logo, caption, format) without adding syntax or precedence detail, which is the expected baseline when 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?
States a specific verb+resource (generate a QR code) with the scope of control enumerated: colors, module/finder shapes, logo, caption, output format. The 'manual' framing plus 'explicit control' implicitly separates it from qr_generate_ai, so an agent can route between the two without opening schemas.
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?
'Use this when the user already knows the design they want' gives a clear selection condition and implicitly contrasts with the AI-driven sibling. It stops short of naming qr_generate_ai as the alternative or stating exclusions, so it is good context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_generate_aiGenerate a QR code from a prompt (AI)A
Generate a QR code where the QR Branding LLM picks colors and shapes from a natural-language prompt. Best for "make me a luxury gold dotted QR for a coffee brand" style requests.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Natural-language design brief. The engine's LLM will pick colors, shapes, and style hints from this. Example: "luxury gold dots for a coffee brand". | |
| content | Yes | The text or URL the QR will encode. | |
| logoUrl | No | Optional logo URL to embed at the center. | |
| fileFormat | No | Output format. Defaults to "png". | |
| outputWidth | No | ||
| stylePreset | No | Optional style preset name (e.g. "minimal", "luxury", "playful"). Guides the LLM but does not override the design fully. | |
| outputHeight | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | File format the engine rendered: png, svg, jpg, webp or pdf. |
| content | Yes | The text or URL the QR encodes. |
| filePath | No | PDF in the stdio package only: local temp file the PDF was written to. |
| mimeType | No | MIME type of the rendered file (the engine's contentType). |
| sizeBytes | No | Size of the rendered file in bytes, as reported by the engine. |
| resourceUri | No | PDF on the remote server only: URI of the embedded resource block that carries the file. |
| aiExplanation | No | The design model's explanation of its choices, when the engine returns one. |
| safeModeApplied | No | True when the AI design did not scan and the engine re-rendered it in safe mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, and closed-world, so the safety profile is covered. The description usefully conveys that output is LLM-determined and thus variable, but says nothing about response shape, latency, or whether the result is returned inline or as a URL (though an output schema exists).
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?
Two tight sentences: the mechanism and its distinguishing AI behavior come first, the use-case example second. Nothing is redundant or padded.
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?
With an output schema handling return values and annotations covering safety and determinism hints, the remaining need is when-to-use, which the example clause addresses. Only the absence of explicit sibling routing keeps it from full completeness.
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?
Schema coverage is 71% and the schema already documents prompt, content, logoUrl, fileFormat, and stylePreset. The description reinforces the prompt's purpose with a concrete example, but adds no syntax, format, or constraint detail beyond what the schema provides, so it sits at the baseline.
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?
States a specific verb and resource ('Generate a QR code') and specifies the mechanism (a branding LLM picks colors/shapes from a prompt), which separates it from plain qr_generate and the template/builder siblings. It stops short of naming those siblings explicitly, so differentiation is implied rather than stated.
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 'Best for "make me a luxury gold dotted QR for a coffee brand" style requests' clause gives a concrete use-case trigger that tells an agent when this tool is the right pick. It offers no explicit when-not or named-alternative routing (e.g., use qr_generate for exact control), leaving a small gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_generate_from_templateRender a QR templateARead-onlyIdempotent
Render one of the curated templates by id, optionally overriding the encoded content, colors, or output format/size for this specific call.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Override what the QR encodes. Defaults to the template's built-in content. | |
| fileFormat | No | Output format. Defaults to "png". | |
| templateId | Yes | The template id (from qr_list_templates). May be numeric or string (e.g. "luxury-gold"). | |
| outputWidth | No | ||
| outputHeight | No | ||
| primaryColor | No | Override module color (hex). | |
| backgroundColor | No | Override background color (hex). | |
| additionalConfig | No | Escape hatch for any other QrConfig override the engine accepts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | File format the engine rendered: png, svg, jpg, webp or pdf. |
| content | No | The text or URL the QR encodes, when the call set it. |
| filePath | No | PDF in the stdio package only: local temp file the PDF was written to. |
| mimeType | No | MIME type of the rendered file (the engine's contentType). |
| sizeBytes | No | Size of the rendered file in bytes, as reported by the engine. |
| resourceUri | No | PDF on the remote server only: URI of the embedded resource block that carries the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the phrase 'for this specific call' usefully clarifies that overrides are ephemeral and the template itself is not mutated. It stops short of describing the rendered artifact's return shape, though an output schema exists for that.
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?
One front-loaded sentence that first establishes the core action (render template by id), then the optional adjustments. No filler, though it is dense enough that the override list reads as a run-on.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description adequately covers the override behavior for an 8-parameter tool; the only real gap is not pointing at qr_list_templates as the id source in the prose.
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 description groups the 8 parameters into meaningful categories (content, colors, output format/size) and frames them as overrides, which adds some meaning. But at 75% schema coverage the schema already documents these fields with defaults and ranges, so the description mostly restates them without adding format or constraint detail.
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?
States a specific verb (Render) and resource (curated templates by id), which distinguishes it from qr_generate and qr_generate_ai at a glance. It does not explicitly name those siblings, so the differentiation is inferred rather than stated, keeping it short of a 5.
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?
Usage is only implied: render a template when you want a curated design, and the overrides apply per-call. It never says when to prefer this over qr_generate or qr_generate_ai, nor does it state that a template id must first come from qr_list_templates (that hint lives only in the schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_list_templatesList QR design templatesARead-onlyIdempotent
List the 118 pre-designed QR templates (id, name, description, preview thumbnail URL). Filter by category if the user asks for a specific style.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter (e.g. "business", "social", "wifi"). Omit to list all 118 templates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Number of templates returned. |
| category | No | The category filter applied, if any. |
| templates | Yes | The templates, after the optional category filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the catalog is a fixed, bounded set of 118 templates and each entry carries a preview thumbnail URL, which tells the agent this is a cheap, complete enumeration rather than a paginated or variable result.
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?
Two sentences, no waste, with the resource and its contents front-loaded before the optional filter guidance.
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?
For a single-parameter, read-only listing tool with an output schema and full annotation coverage, the description supplies everything an agent needs: scope, cardinality, returned fields, and filter behavior.
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?
Schema description coverage is 100%, so the schema already documents the optional category filter and its example values. The description only restates the filter's purpose in user-facing terms ('if the user asks for a specific style'), adding marginal meaning beyond the schema. Baseline 3 applies.
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?
States a specific verb and resource ('List the 118 pre-designed QR templates') and enumerates the returned fields, which cleanly separates it from the qr_generate* siblings that produce QR codes rather than enumerate the catalog.
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 tells the agent when to apply the category filter ('if the user asks for a specific style') but never states when to choose this tool over qr_generate_from_template, nor what to do after selecting a template. Usage is implied rather than routed.
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.
7 tool updates
v0.1.4- First observed
qr_build_geo - First observed
qr_build_vcard - First observed
qr_build_wifi - First observed
qr_generate - First observed
qr_generate_ai - First observed
qr_generate_from_template - First observed
qr_list_templates
TDQS
Scored across 7 tools
The three qr_generate* tools overlap in purpose (all produce a branded QR) but are cleanly separated by intent: manual control, AI-driven design, and template-based rendering, with descriptions that clarify when to pick each. The qr_build_wifi/vcard/geo tools are unmistakably distinct payload encoders.
All tools share a consistent qr_ prefix and snake_case, with a readable verb_noun structure (qr_generate, qr_list_templates, qr_build_wifi). Minor deviation is the mix of 'generate' vs 'build' verbs and the suffixed variants qr_generate_ai / qr_generate_from_template, but the pattern stays predictable.
Seven tools is well-scoped for a QR branding service, with each tool earning its place across generation modes, template discovery, and specific payload types. No redundant or filler tools.
The surface covers the full generation lifecycle (manual, AI, template), template listing, and three specialized payload builders. Minor gaps exist for other common encodings (URL, email, SMS, text) though qr_generate likely accepts arbitrary content, so agents can work around this.
Maintenance
Related MCP Connectors
Generate branded, scan-validated QR codes (manual, AI, templates, Wi-Fi, vCard, geo).
Generate QR codes for URLs, PIX, Wi-Fi, vCards, WhatsApp and more. For AI agents.
Create and manage dynamic QR codes and read their scan analytics from Claude and other MCP clients.
Turn a prompt and a link into a branded, print-ready QR code that always scans.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables generation of QR codes from text or URLs in multiple formats (DataURL, SVG, terminal display) with customizable options like error correction, colors, and size. Supports batch processing of multiple QR codes and integrates seamlessly with MCP-compatible clients.44MIT
- AlicenseAqualityDmaintenanceDynamic 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…).373MIT
- AlicenseAqualityDmaintenanceGenerate styled QR codes, manage dynamic short links with click analytics, and publish micro-landing pages via AI agents.1936 npm1MIT

ME-QR MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceCloud-hosted MCP server that enables AI assistants to create, update, and manage QR codes on me-qr.com via OAuth, supporting types like URLs, Wi-Fi, vCards, PDFs, and images.MIT