gpra-chord-charts-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gpra-chord-charts-mcpShow me the chord chart for C major"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Guitar chord charts — MCP server
A small, read-only Model Context Protocol server that lets MCP-capable AI clients look up guitar chord charts from Guitar Practice Routine App (GPRA) and show them to people as text chord diagrams.
It serves exactly what guitarpracticeroutine.com/find-a-chord-chart serves: one chord name in, one chart out, from a bundled snapshot of the same chord library. No database, no authentication, no secrets.
Am
E A D G B E
x o o
==================
1 | | | | 1 |
-+--+--+--+--+--+-
2 | | 3 2 | |
-+--+--+--+--+--+-
3 | | | | | |
-+--+--+--+--+--+-
4 | | | | | |
-+--+--+--+--+--+-
5 | | | | | |
-+--+--+--+--+--+-
x = muted o = open digits in grid = fingers (1 index, 2 middle, 3 ring, 4 pinky)
EADGBEFrets run top to bottom from the nut, and string 1 — the highest-pitched string — is the rightmost column, matching standard chord-box convention and the charts on the site.
Tools
Tool | What it does |
| One chord name ( |
| The same chart by its numeric id, for re-rendering something already returned. |
| Today's Chord of the Day — the same chord GPRA posts to Bluesky and Facebook. |
Each chord comes back twice: as a PNG image and then a text chart, in that
order, so the diagram leads and the text sits underneath it. Clients that can't
render images still get a complete answer from the text block. MCP has no way to
negotiate image support — ClientCapabilities covers roots, sampling,
elicitation and tasks, not content rendering — so sending both is the only
reliable approach. Images are ~15-20 KB, rendered on demand with SVGuitar and
cached.
Pass format: "text" to drop the image (useful when the user doesn't want
pictures, and it saves the caller an image's worth of context per call), or
format: "image" to drop the chart text. Attribution is kept either way.
Every tool also takes a context argument describing why it's being called.
That's injected by PostHog's MCP SDK and populates agent intent in analytics;
nothing in the response depends on it.
Related MCP server: mcp-google-sheets
What's in the library
12,708 standard-tuning (EADGBE) voicings, exactly one per chord name. This server does no fuzzy matching and no query cleanup — it passes the name through the same way the website does, so the tool description asks the calling assistant to send a plain chord name ("G", not "how do I play G major").
Charts are drawn on a five-fret grid starting at the nut, matching the site — which means a voicing with notes above the fifth fret has them fall outside the grid. The image drops them, exactly as the website does; the text names them underneath ("Also fretted, past this five-fret grid: string 5 (A) fret 6"). So the pair is honest even where the picture alone isn't.
Images use black ink on white rather than the site's white-on-transparent: the site can assume its own dark UI, and a chat client's background is unknown.
Connecting a client
Remote MCP means users add a URL, no install:
https://mcp.guitarpracticeroutine.com/mcpFor clients configured with a JSON config file, use the streamable-HTTP transport:
{
"mcpServers": {
"gpra-chord-charts": {
"type": "streamable-http",
"url": "https://mcp.guitarpracticeroutine.com/mcp"
}
}
}For a client that only speaks stdio, bridge with
mcp-remote:
{
"mcpServers": {
"gpra-chord-charts": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.guitarpracticeroutine.com/mcp"]
}
}
}Run locally
npm install
npm run build
npm test
npm start # stdio transport
npm run start:http # HTTP, listens on 127.0.0.1:2112, POST /mcp (set PORT / HOST)Health check: GET /health → status, version, chord count.
Preview charts from the terminal without a client:
npx tsx scripts/preview.ts G Am C F Bm D/F#No CORS headers are set. Claude and connector directories fetch server-side, so they don't need them — a browser-based MCP client would.
Rebuilding the chord snapshot
Requires access to a GPRA database. The source table changes rarely, so this is a manual step:
psql "$DATABASE_URL" -Atf scripts/dump-chords.sql > data/common-chords.raw.json
npm run build:index
npm run build && npm testbuild:index prints the library's fret range to the terminal and reports data
anomalies (voicings with no fretted notes, missing finger numbers, notes dropped
as unplayable) rather than quietly normalizing them away.
Privacy
The hosted server records anonymous usage analytics through
@posthog/mcp: which tool was
called, how long it took, whether it errored, the calling client's identity
(name and version on connect, user-agent on each call), and the context string
the agent supplied describing why it called. No personal identifier is stored and
no person profile is created.
Analytics are off entirely unless POSTHOG_API_KEY is set, so running this
yourself — including over stdio — sends nothing anywhere.
Deployment
deploy/ contains a systemd unit and an nginx reverse-proxy config, if you want
to host your own instance.
Credits
The chord library exists because of other people's work:
SVGuitar-ChordCollection by @TormodKv — the chord database this is built from, itself based on chord-collection by @T-vK.
SVGuitar by @omnibrain — the chord-diagram renderer whose data format this uses, and which draws the charts on guitarpracticeroutine.com. (This server renders text, not SVG.)
License
Code: MIT — see
LICENSE.Chord data: the voicings originate from SVGuitar-ChordCollection, which carries no stated licence, so no licence is asserted over them here. The fingerings themselves are factual descriptions of where fingers go on a fretboard. Please credit the projects above if you reuse the data.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityBmaintenanceProvides access to Chess.com player data, game records, and public information through standardized MCP interfaces, allowing AI assistants to search and analyze chess information.1082MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read, write, and manage Google Sheets spreadsheets through natural language commands, providing a bridge between MCP clients and the Google Sheets API.6191MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI to create, edit, and manage Mermaid diagrams via MCP, with real-time preview in a browser-based editor.3
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with a local Mermaid diagram editor via MCP, allowing them to get and set diagrams programmatically.11,762,51712Apache 2.0
Related MCP Connectors
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/slshults/gpra-chord-charts-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server