Skip to main content
Glama

Guitar Practice Routine App — Chord Charts

Server Details

Look up a guitar chord by name and get a text chord diagram. 12,708 standard-tuning names.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
slshults/gpra-chord-charts-mcp
GitHub Stars
0
Server Listing
gpra-chord-charts-mcp

TDQS

A4/5.0

Scored across 3 tools

Disambiguation4/5

The two get_chord_chart tools are related but clearly distinguished by lookup key (id vs name), and get_chord_of_the_day is entirely distinct. Some potential confusion exists between the two chart-fetching tools, but their descriptions clarify the difference.

Naming Consistency5/5

All tools follow a consistent get_<resource> pattern: get_chord_chart_by_id, get_chord_chart_by_name, get_chord_of_the_day. The naming is uniform and predictable.

Tool Count4/5

Three tools is slightly minimal but well-scoped for a read-only chord chart lookup service. Each tool serves a clear purpose, and the count feels appropriate for the narrow domain.

Completeness3/5

The surface covers exact-name lookup, id retrieval, and a daily chord feature, but lacks search, browse, or listing capabilities. Users must know the exact chord name, limiting discovery and exploration.

Available Tools

3 tools
get_chord_chart_by_idGet a chord chart by idA
Read-only
Inspect

Fetch one specific chord voicing by its numeric id, as returned by get_chord_chart_by_name. Use this to re-render a chart the user already saw without looking it up again.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNumeric chord id.
formatNoWhich representations to return. Defaults to "text", which includes a direct URL to a PNG of the chart — embed that where your surface renders images. Use "image" or "both" only if you need the PNG bytes inline; they cost image tokens and many clients bury them.
contextYesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
llm_modelYesThe exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful context about re-rendering an already-seen chart and id provenance, but does not disclose additional behavioral details such as error handling, caching, or response shape. It does not contradict the annotations.

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 tightly written sentences with zero filler. The primary action is front-loaded, and the intended use case follows immediately. Every sentence earns its place.

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 simple single-id fetch tool, the description plus fully covered schema and read-only annotation are nearly sufficient. The main gap is the absence of an output schema, but the format parameter already explains how text/image/both representations are returned, so the agent has enough to invoke the tool correctly.

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 100%, so the schema already documents every parameter thoroughly. The tool description adds a small amount of extra meaning by clarifying that the id comes from get_chord_chart_by_name, but it does not need to compensate for missing parameter documentation.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Fetch one specific chord voicing by its numeric id.' It also distinguishes itself from the sibling get_chord_chart_by_name by noting the id is 'as returned by get_chord_chart_by_name,' so the agent understands this is a targeted lookup, not a search.

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?

Clear context and a concrete use case are provided: 'Use this to re-render a chart the user already saw without looking it up again.' The mention of get_chord_chart_by_name as the source of the id strongly implies when not to use this tool, though it stops short of an explicit when-not statement or a direct comparison to get_chord_of_the_day.

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

get_chord_chart_by_nameGet a chord chart by nameA
Read-only
Inspect

Look up one guitar chord chart by name and return it as a text chord diagram ready to show the user. Returns the same single voicing that https://guitarpracticeroutine.com/find-a-chord-chart shows for that name. The library holds 12,708 standard-tuning (EADGBE) chord names, exactly one voicing each. Pass a plain chord name as it would be written on a chart — "G", "Am7", "Cmaj7", "D/F#", "F#m7b5" — not a sentence. Convert spoken forms yourself first: "G major" is "G", "A minor" is "Am", and use "#" and "b" rather than the unicode sharp and flat signs. Charts are drawn on a five-fret grid starting at the nut, the same as the website; any notes above the fifth fret are named in words underneath the chart. Prefer this over recalling a fingering from memory — these are curated chart data, and a remembered fingering is often wrong. Each result leads with a direct PNG URL for the chart — a permanently cacheable image of the same diagram, which you can show or link however your surface handles images. The chord name is on the first line; keep it next to any image you show, since a chart on its own can arrive unlabelled.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesA single chord name as written on a chart, e.g. "Am7" or "D/F#".
formatNoWhich representations to return. Defaults to "text", which includes a direct URL to a PNG of the chart — embed that where your surface renders images. Use "image" or "both" only if you need the PNG bytes inline; they cost image tokens and many clients bury them.
contextYesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
llm_modelYesThe exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description adds genuine behavioral value beyond these: it discloses the return format (five-fret grid starting at the nut, notes above the fifth fret named in words), that the result leads with a permanently cacheable PNG URL, and that the chord name sits on the first line and should be kept beside the image since charts can arrive unlabelled. No contradiction with the read-only annotation — 'Look up' and 'return' are consistent with a read operation.

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?

The description is dense but each sentence carries purpose: purpose is front-loaded, followed by data provenance, input formatting rules, output layout, and usage preference. It is longer than strictly necessary — the PNG URL and grid details could arguably be trimmed — but nothing is filler or redundant with the schema. Efficient for the amount of critical guidance it conveys.

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 output schema, the description correctly carries the burden of explaining the return shape: text diagram format, five-fret grid, note-naming convention, PNG URL presence, and labelling advice. It also covers edge cases like unicode input conversion. Minor gap: it does not state behavior for invalid or unknown chord names (e.g., misspelled or unsupported names), which an agent might need to handle gracefully. Overall adequate for a lookup 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?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful value on top: for 'name' it provides concrete examples ('G', 'Am7', 'Cmaj7', 'D/F#', 'F#m7b5'), conversion rules for spoken forms ('G major' → 'G'), and a directive to use '#'/'b' instead of unicode sharp/flat signs. For 'format' it explains the default 'text' behavior and the token cost of 'image'/'both'. These enrich the schema beyond its base definitions.

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

Purpose5/5

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

The description opens with a specific verb ('Look up'), a specific resource ('one guitar chord chart by name'), and an explicit outcome ('return it as a text chord diagram ready to show the user'). It further narrows scope by stating the library holds 12,708 standard-tuning chord names with exactly one voicing each, which clearly distinguishes it from any multi-voicing or generic lookup tool.

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?

The description gives clear when-to-use guidance: 'Prefer this over recalling a fingering from memory — these are curated chart data, and a remembered fingering is often wrong.' It also instructs when NOT to use certain formats ('Use "image" or "both" only if you need the PNG bytes inline; they cost image tokens'). However, it does not explicitly contrast against the siblings get_chord_chart_by_id or get_chord_of_the_day, relying on the name to imply the distinction.

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

get_chord_of_the_dayChord of the dayA
Read-only
Inspect

Return today's Chord of the Day from Guitar Practice Routine App — the same chord posted to the app's Bluesky and Facebook feeds that day. Useful as a practice prompt or a daily nudge for someone learning chords.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoWhich representations to return. Defaults to "text", which includes a direct URL to a PNG of the chart — embed that where your surface renders images. Use "image" or "both" only if you need the PNG bytes inline; they cost image tokens and many clients bury them.
contextYesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
llm_modelYesThe exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful context that the result mirrors the app's Bluesky and Facebook feed post, but it does not describe output behavior like error cases, availability, or how 'today' is determined beyond the schema's format details.

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 sentences, with the core return value stated first and the use case briefly placed at the end. Every sentence earns its place and there is no redundant repetition of the title or schema details.

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

Completeness5/5

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

For a simple read-only tool with rich schema coverage and clear annotations, the description provides enough for an agent to call it correctly. It explains what is returned, the context of the daily feed post, and the intended use; no pagination, side effects, or complex options need disclosure.

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 100%, so the schema fully documents all three parameters, including the format enum and the analytics purpose of context and llm_model. The tool description itself adds no parameter-level meaning, which is acceptable because the schema carries the burden.

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

Purpose5/5

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

The description states a specific verb ('Return'), a specific resource ('today's Chord of the Day from Guitar Practice Routine App'), and distinguishes the date-based retrieval from the sibling tools, which retrieve by id or name. The feed reference adds clarity about exactly what is being returned.

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 an implied use case ('practice prompt or a daily nudge') but does not explicitly state when to choose this tool over the sibling by-id or by-name tools. There are no exclusions or alternative routing conditions, so an agent must infer the distinction from the tool name and description.

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. 3 tool updates
    • Changedget_chord_chart_by_id5 fields changed
      • changedInput schema / properties / context / description
        Previous value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
      • removedInput schema / properties / id / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / llm_model
        Added value: +{
        +  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "context"
        -]New value: +[
        +  "id",
        +  "context",
        +  "llm_model"
        +]
    • Changedget_chord_chart_by_name4 fields changed
      • changedInput schema / properties / context / description
        Previous value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
      • addedInput schema / properties / llm_model
        Added value: +{
        +  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
        +  "type": "string"
        +}
      • removedInput schema / properties / name / minLength
        Removed value: -1
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "context"
        -]New value: +[
        +  "name",
        +  "context",
        +  "llm_model"
        +]
    • Changedget_chord_of_the_day3 fields changed
      • changedInput schema / properties / context / description
        Previous value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
      • addedInput schema / properties / llm_model
        Added value: +{
        +  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "context"
        -]New value: +[
        +  "context",
        +  "llm_model"
        +]
  2. 3 tool updates
    • First observedget_chord_chart_by_id
    • First observedget_chord_chart_by_name
    • First observedget_chord_of_the_day

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Multilingual name romanization lookup across Chinese, Japanese, Korean, Arabic, Vietnamese, and more. Resolves whether two name spellings refer to the same person — Chan/Chen/陳/陈, Hsu/Xu, Chou/Zhou — across Pinyin, Wade-Giles, Cantonese, Hokkien, and other romanization systems.
    24 PyPI
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables looking up ISO standards (e.g., 27001, 9001) with live status, pricing, compliance catalogue, and ISO Open Data file pointers.
    5 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.