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
Uptime
100.0% over 43 days
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.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct retrieval key: by numeric id, by exact chord name, and by date for chord of the day. The id-based tool explicitly depends on the name lookup's return value, so an agent won't confuse it with a direct name search.

Naming Consistency5/5

All tools use the consistent `get_` prefix with descriptive snake_case object phrases. Two are `get_chord_chart_by_*` and the third naturally extends the pattern as `get_chord_of_the_day`, making the tool names predictable.

Tool Count5/5

With three tools, the server is tightly scoped to a read-only chord chart lookup service. Each tool covers a meaningful user need: lookup by name, re-render by id, and a daily practice prompt.

Completeness4/5

The core surface of looking up a chord by name and retrieving a previously seen chart by id is covered, plus chord of the day. There is no search/browse capability across the 12,708 chord library, but for exact-name lookups the workflow has no dead ends.

Available Tools

4 tools
get_chord_chart_by_idGet a chord chart by id
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
idNoNumeric chord id, e.g. 123 (a numeric string like "123" also works).
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."
get_chord_chart_by_nameGet a chord chart by name
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
nameNoA 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."
get_chord_of_the_dayChord of the day
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."
send_feedback
Read-onlyIdempotent
Inspect

Send feedback about this chord chart server: a chord or capability you needed that its tools could not provide, a problem with a chart or a result, or praise. Only for feedback about these chord chart tools, not about other tasks. Do not include personal information about the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailsNoOptional longer context: what you tried, exact parameter values, the error text you saw, and any workaround you used. Omit when the summary says it all.
summaryYesOne self-contained sentence. For 'missing_capability': the capability you needed, e.g. 'No tool to delete multiple cohorts in one call.' For 'issue': the tool and the problem, e.g. 'query-trends rejects relative date ranges with an unclear error.'
sentimentNoOptional: how the experience felt overall.
tool_nameNoOptional: the existing tool this feedback is about (for 'issue' or 'praise'). Leave empty for 'missing_capability' - the point is that no tool fits.
feedback_typeYesWhat kind of feedback this is. Use 'missing_capability' when the tool you needed does not exist in the tool list - nothing failed, the capability is absent (this is the most valuable report; send it even if you found a workaround). Use 'issue' when an existing tool behaved badly: it failed, returned a confusing error, or its description or schema misled you. Use 'praise' when something worked notably well. Use 'other' for anything else.
task_completedNoOptional: whether you still completed the user's task despite the problem.
friction_pointsNoOptional: the specific moments that slowed you down, as short bullet-like sentences, quoting exact tool names, parameters, or error text.
suggested_improvementNoOptional: the concrete change that would have helped, e.g. the tool to add, the description to reword, or the error message to improve.

Tool Schema Changelog

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

  1. 4 tool updates
    • Changedget_chord_chart_by_id6 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Numeric chord id."New value: +"Numeric chord id, e.g. 123 (a numeric string like \"123\" also works)."
      • removedInput schema / properties / id / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / id / minimum
        Removed value: --9007199254740991
      • changedInput schema / properties / id / type
        Previous value: -"integer"New value: +[
        +  "number",
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / llm_model
        Removed 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",
        -  "llm_model"
        -]New value: +[
        +  "context"
        +]
    • Changedget_chord_chart_by_name2 fields changed
      • removedInput schema / properties / llm_model
        Removed 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",
        -  "llm_model"
        -]New value: +[
        +  "context"
        +]
    • Changedget_chord_of_the_day2 fields changed
      • removedInput schema / properties / llm_model
        Removed 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",
        -  "llm_model"
        -]New value: +[
        +  "context"
        +]
    • Addedsend_feedback
  2. 2 tool updates
    • Changedget_chord_chart_by_id1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "context",
        -  "llm_model"
        -]New value: +[
        +  "context",
        +  "llm_model"
        +]
    • Changedget_chord_chart_by_name1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "context",
        -  "llm_model"
        -]New value: +[
        +  "context",
        +  "llm_model"
        +]
  3. 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"
        +]
  4. 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.
    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.
    380 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to look up IANA protocol parameters—ports, media types, HTTP status codes and fields, URI schemes, enterprise numbers, and BCP 47 language tags—and check RFC and Internet-Draft status, while searching and reading any registry in the IANA protocol index. Runs over STDIO or Streamable HTTP with cached, keyless reads of IANA and RFC Editor sources.
    319 npm
    1
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.