Skip to main content
Glama

Server Details

Create dynamic QR codes, update destination links after printing, and retrieve scan analytics through QRtracer. Connect marketing and print workflows to your AI assistant using the hosted MCP endpoint. Website: https://qrtracer.io

Ownership verified
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have clearly distinct purposes: check_qr_link (external reachability), get_qr_code (owned code inspection), get_analytics (single-code scans), and compare_qr_codes (multi-code scans) are well separated by their descriptions. There is minor overlap between check_qr_link and get_qr_code's stored link health, and between get_analytics and compare_qr_codes, but descriptions make boundaries clear.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun/noun pattern (check_qr_link, create_qr, get_account, list_qr_codes, update_destination, simulate_scan). No mixing of conventions or vague verbs; the set is highly predictable.

Tool Count5/5

11 tools is well within the ideal 3-15 range and each tool maps to a distinct capability (lifecycle, analytics, rendering, routing, account). No tool appears redundant enough to be padding.

Completeness3/5

Lifecycle coverage is partial: create_qr, get_qr_code, list_qr_codes, and update_destination exist, but there is no delete_qr and no way to update design/label metadata, forcing dead ends. Routing and analytics are covered, but the absence of delete/archive is a notable gap for owned-code management.

Available Tools

11 tools
compare_qr_codesB
Read-onlyIdempotent
Inspect

Compare aggregate human scan counts for 2 to 10 owned QR codes over the same period. Do not infer conversion rates without separate conversion data.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
idsYes
daysNo
fromNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds meaningful context beyond that: results are limited to 'human scan' counts, codes must be 'owned', and the output is aggregate only, so conversion rates cannot be derived.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core purpose front-loaded and no filler. The second sentence is advisory rather than operational, but it is short and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description would ideally hint at the return shape (per-code counts vs. ranked comparison) and clarify the from/to/days parameter relationship. It covers purpose and a key caveat but leaves the mechanics of the time window underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters (ids, from, to, days), so the description carries the burden but only partially compensates. It conveys the 2-10 constraint on ids (already in schema min/maxItems) but says nothing about how days interacts with from/to, what format ids take, or that the period must be identical across all compared codes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (compare) and resource (aggregate human scan counts) with an explicit scope: 2 to 10 owned QR codes over the same period. This distinguishes it from sibling get_analytics (single-resource analytics) without naming that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Do not infer conversion rates without separate conversion data' is a caution about interpreting results, not guidance on when to choose this tool over get_analytics or get_qr_code. Usage is implied by the comparison framing but no alternatives or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_qrA
Destructive
Inspect

Create a dynamic QR code for a public HTTP(S) destination. Supply a UUID request_key to safely retry authenticated creation. Anonymous creation is limited; ALWAYS show its returned claim_url to the user. Account creation uses existing plan limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
designNo
destinationYes
request_keyNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnly=false, destructive=true, openWorld=true, idempotent=false), so the bar is lower. The description still adds genuine behavioral context beyond them: retry safety via request_key, anonymous-creation limits, the claim_url the caller must surface, and plan-limit enforcement. The idempotency-via-request_key wording is in mild tension with idempotentHint=false, but this is conditional (only authenticated + only when the key is supplied) rather than a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core purpose and no filler. The retry/claim_url/plan-limit clauses each carry distinct information rather than restating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description's disclosure of the returned claim_url is valuable, and it covers the authenticated vs anonymous paths plus plan limits. Gaps remain around the design/label parameters and failure modes, but for a create tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It clarifies destination ('public HTTP(S) destination') and request_key (UUID for safe retry), but says nothing about label or the nested design object's bg/fg color fields, leaving half the parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a dynamic QR code') with a real constraint baked in ('for a public HTTP(S) destination'). It distinguishes dynamic-creation from the render_qr/list_qr_codes siblings implicitly, but never explicitly contrasts them, so it stops 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives operational conditions – authenticated creation should pass a UUID request_key, anonymous creation is limited – which is real usage guidance. However it never names or routes to sibling alternatives (render_qr, simulate_scan, get_qr_code), so the agent must infer when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accountA
Read-onlyIdempotent
Inspect

Read the connected account's plan and available capabilities. Does not include email or billing details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scope boundaries (no email, no billing) beyond the structured fields, but says nothing about authentication requirements or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the boundary clause. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no input parameters and no output schema, the description carries the burden of explaining what comes back, and it does so at a general level ('plan and available capabilities'). It stops short of detailing the shape of that data, which is a minor gap for a zero-arg read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. Nothing about the description misleads or duplicates schema content in a harmful way.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read the connected account's plan and available capabilities.' The exclusion clause ('Does not include email or billing details') sharpens the boundary further. It doesn't name a sibling, but the sibling set is entirely QR-code oriented, so no differentiation is genuinely needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource — call it to learn the account's plan and capabilities. The exclusion of email/billing acts as a weak when-not signal. There is no explicit statement of when to prefer this tool or any prerequisites (e.g., auth state) required before calling it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_analyticsB
Read-onlyIdempotent
Inspect

Read aggregate recorded human scans for one owned code. Default period is 28 days; history follows the current plan. Scans are not conversions or unique people.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
toNo
daysNo
fromNo

TDQS

B3.4/5.0
Behavior4/5

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 meaningful semantics beyond that: the data is aggregate, human-only (excluding bot scans), and represents scans rather than conversions or unique people, plus a default 28-day window. It still omits return shape and pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core purpose and followed by useful scope qualifiers. No filler, though each sentence is dense and could be marginally clearer on parameter interaction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytics tool with no output schema, the description conveys what is measured and the default window, which is the essential context. It falls short on the date-range parameter semantics and does not address limits or response granularity, so an agent could still mis-specify the period.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It hints that 'id' is the owned code and that a 28-day default period exists, but never explains how days, from, and to interact or which takes precedence, leaving three of four parameters effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and object ('Read aggregate recorded human scans') scoped to one owned code, and clarifies what the data is not ('not conversions or unique people'). This distinguishes it from compare_qr_codes, though it never names or explicitly routes against that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives the default period (28 days) and notes history depends on the plan, which implies usage context. However, it offers no explicit when-to-use/when-not guidance and does not point to compare_qr_codes or simulate_scan as alternatives for different needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_qr_codeA
Read-onlyIdempotent
Inspect

Inspect an owned QR code, destination, design, latest stored link health and revision. Read before updating.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add context. It does: "owned" signals an ownership/access scoping requirement, and "latest stored link health" hints the health data is cached rather than live, unlike a real-time check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, ~15 words, with the read-before-write directive front-loaded and the returned fields packed into the first sentence. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, one-parameter tool with no output schema, the description usefully enumerates what comes back (destination, design, link health, revision), which is the main information an agent would otherwise lack. Minor gaps remain around error/not-found behavior and id format, but nothing critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% — the single id parameter has only type/format/pattern, no prose. The description implies the id identifies an owned QR code, which is minimal but sufficient orientation for a one-parameter lookup; it adds nothing about the UUID form or unknown-id behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Inspect) and resource (an owned QR code), and enumerates the returned facets: destination, design, link health, revision. This clearly separates it from list_qr_codes (plural) and render_qr, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Read before updating" gives one concrete usage cue tied to the mutation flow. However, no alternative is named (e.g. check_qr_link for a live check vs. this stored-health read), so the agent must infer when this beats the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_qr_codesA
Read-onlyIdempotent
Inspect

Find only your owned QR codes, with label search and stable cursor pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
searchNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, covering the safety profile. The description adds two useful behavioral facts beyond them: results are scoped to the caller's own codes, and pagination is cursor-based and stable. It does not explain traversal mechanics or termination, so it remains a modest addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler; the ownership scope is front-loaded followed by the two capabilities (search, pagination). Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter list tool with no output schema and no parameter descriptions, the definition covers scope and the two main affordances but is silent on limit behavior, cursor lifecycle, and what fields come back. Annotations carry the safety burden, so this is adequate-but-incomplete rather than deficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema documents only types and constraints (UUID pattern, max 100), not meanings. The description compensates for two of three parameters by naming 'label search' and 'cursor pagination', but leaves 'limit' undefined and gives no cursor semantics (how to obtain or terminate). Partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list/find QR codes) and adds a scope qualifier: 'only your owned'. This distinguishes it from get_qr_code (single-item) and create_qr, though no sibling is named explicitly. Clear, but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by 'Find only your owned QR codes' — an agent can infer this is the enumeration/search tool, but the description never says when to use it versus get_qr_code or how it relates to list-style alternatives. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_qrA
Read-onlyIdempotent
Inspect

Preview and download an owned QR as PNG, or eligible SVG. Returns a short-lived download URL; do not expose private connection tokens. Existing anonymous PNG URLs remain supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
formatNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, idempotent, non-destructive operation, so the safety bar is met by structured data. The description still adds real value beyond them: a short-lived download URL, a security warning not to expose private connection tokens, and backward compatibility for anonymous PNG URLs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the capability before the security caveat. Nothing is wasted, though 'eligible SVG' is left unexplained and slightly undercuts the clarity of an otherwise tight statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description covers the essential return value (a short-lived download URL) plus a security caveat and legacy behavior. It is nearly complete for a two-parameter read tool, with only the conditions for SVG eligibility and the relationship to sibling retrieval tools left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It partially does: 'owned QR' implies the id must belong to the caller (an authorization constraint the schema lacks), and 'eligible SVG' hints that SVG support is conditional in a way the enum alone does not convey. Neither parameter is explained directly, so the gap is only partly filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource combination (render/preview a QR) plus the output formats (PNG or eligible SVG), which is concrete. However, it does not distinguish itself from the close sibling get_qr_code, so an agent still has to guess which retrieval tool to use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Preview and download' implies usage, but there is no explicit when-to-use or when-not guidance, and no reference to the obvious alternatives get_qr_code or list_qr_codes. The only contextual cue is a legacy note about anonymous PNG URLs, which is not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_routingC
Destructive
Inspect

Legacy Programmable tool: compile a plain-language routing prompt or save a valid supplied routing program on an owned code. Version conflicts require reading again.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
promptNo
programNo
expected_program_versionNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, non-idempotent, and openWorld, so safety is partly covered. The description adds a genuine concurrency signal ('version conflicts require reading again') and implies the program is validated before saving, but never says what existing routing is replaced or whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, no filler, but the 'Legacy Programmable tool:' prefix is opaque jargon that consumes the front-loaded position without adding actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema and zero schema coverage across four parameters including a nested object, the description omits what state is overwritten, what a successful call returns, and how the two modes interact. Too much is left for the agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry all meaning, and it partially does: 'prompt' is framed as plain-language and 'program' as a valid supplied program, and 'version conflicts' maps to expected_program_version. It leaves the mutual exclusivity of prompt/program and the role of the 'id'/'owned code' unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ('compile'/'save') and resource ('routing prompt'/'routing program') on an 'owned code', and exposes the two operating modes. It does not name or contrast with the nearest sibling (update_destination), so the agent must infer the boundary from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage cue is 'Version conflicts require reading again', which addresses concurrency retry rather than when to choose this tool. No guidance distinguishes it from update_destination or explains prerequisites such as code ownership.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

simulate_scanB
Read-onlyIdempotent
Inspect

Dry-run a routing program against a sample scan context. Does not create a scan or change a code.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNo
programYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered by structured data. The sentence 'Does not create a scan or change a code' restates that no side effects occur, adding only modest extra context (specifically that scans and codes are untouched) and nothing about auth needs, rate limits, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and no filler. The second sentence is partly redundant with the readOnly annotation, which slightly dilutes the efficiency of an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool taking two nested free-form objects with zero schema documentation and no output schema, the description omits what a routing program or context object should contain and what a dry run returns (validation errors, trace, matched destination). An agent has enough to understand intent but not enough to construct a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and both parameters are untyped free-form objects, so the description carries real weight: it maps 'program' to a routing program and 'context' to a sample scan context. That gives both opaque params meaning, but it adds no structural detail (expected keys, program DSL shape), so the compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (dry-run/simulate) and resource (a routing program against a sample scan context), which clearly separates it from mutating siblings like set_routing or create_qr. It does not, however, explicitly name the alternative tool an agent should reach for after the dry run, so it stops short of 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Does not create a scan or change a code' implies this is the safe preview path before committing changes via set_routing, but the description never states when to use this versus the real routing mutation or what prerequisites exist. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_destinationA
DestructiveIdempotent
Inspect

Change an owned QR destination without changing its printed redirect URL. Confirm the intended destination with the user. Supply expected_revision from get_qr_code; conflict means read again before retrying.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
destinationYes
expected_revisionNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, yet the description adds real behavioral detail beyond them: the printed redirect URL is left untouched, a user confirmation step is required, and an optimistic-concurrency contract (expected_revision, conflict → re-read) governs retries. That is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each carrying distinct payload (effect, precondition, concurrency protocol), with the core behavior front-loaded. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema and zero schema coverage, the description covers the risky parts: URL invariance, user confirmation, and revision/conflict handling. It does not say what destination formats are accepted or whether unrelated destination fields are reset, which is a minor residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does partially: expected_revision is explained as coming from get_qr_code with defined conflict semantics. However, id and destination get no semantic treatment beyond their names, leaving two of three parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (change an owned QR destination) and adds a distinguishing effect: the printed redirect URL is preserved, which separates it from create_qr or set_routing. It names get_qr_code only as a revision source rather than as an alternative, so sibling differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operational context: confirm the intended destination with the user, supply expected_revision from get_qr_code, and re-read on conflict before retrying. It does not state when not to use this tool or which sibling handles related edits (e.g., set_routing), so it stops short of a full when/when-not treatment.

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.

  1. 11 tool updates
    • Addedcheck_qr_link
    • Addedcompare_qr_codes
    • Changedcreate_qr6 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / design
        Added value: +{
        +  "properties": {
        +    "bg": {
        +      "pattern": "^#[a-f0-9]{6}$",
        +      "type": "string"
        +    },
        +    "fg": {
        +      "pattern": "^#[a-f0-9]{6}$",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / destination / maxLength
        Added value: +4096
      • addedInput schema / properties / destination / minLength
        Added value: +1
      • addedInput schema / properties / label / maxLength
        Added value: +200
      • addedInput schema / properties / request_key
        Added value: +{
        +  "format": "uuid",
        +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +  "type": "string"
        +}
    • Addedget_account
    • Changedget_analytics6 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / days
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / from
        Added value: +{
        +  "format": "date-time",
        +  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +  "type": "string"
        +}
      • addedInput schema / properties / id / format
        Added value: +"uuid"
      • addedInput schema / properties / id / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      • addedInput schema / properties / to
        Added value: +{
        +  "format": "date-time",
        +  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +  "type": "string"
        +}
    • Addedget_qr_code
    • Addedlist_qr_codes
    • Changedrender_qr4 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "png",
        +  "svg"
        +]
      • addedInput schema / properties / id / format
        Added value: +"uuid"
      • addedInput schema / properties / id / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • Changedset_routing8 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / expected_program_version
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / id / format
        Added value: +"uuid"
      • addedInput schema / properties / id / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      • addedInput schema / properties / program
        Added value: +{
        +  "additionalProperties": {},
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / prompt / maxLength
        Added value: +4000
      • addedInput schema / properties / prompt / minLength
        Added value: +1
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "prompt"
        -]New value: +[
        +  "id"
        +]
    • Changedsimulate_scan5 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / context / additionalProperties
        Added value: +{}
      • addedInput schema / properties / context / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / program / additionalProperties
        Added value: +{}
      • addedInput schema / properties / program / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_destination6 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / destination / maxLength
        Added value: +4096
      • addedInput schema / properties / destination / minLength
        Added value: +1
      • addedInput schema / properties / expected_revision
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / id / format
        Added value: +"uuid"
      • addedInput schema / properties / id / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
  2. 6 tool updates
    • First observedcreate_qr
    • First observedget_analytics
    • First observedrender_qr
    • First observedset_routing
    • First observedsimulate_scan
    • First observedupdate_destination

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Perplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    4 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources