{"name":"com.playbykey/theory-mcp","slug":"playbykey-theory-mcp","title":"PlayByKey Music Theory","description":"Chords, scales, progressions, transposition, and MIDI tools for music theory AI agents.","url":"https://mcp.market/server/playbykey-theory-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":27,"stars":1,"forks":0,"downloads_week":76,"last_push_at":"2026-09-14T21:14:57.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/DigitalBrewLLC/playbykey-dev-tools","website":null,"version":"1.6.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@playbykey/theory-mcp","version":"1.6.0","runtimeHint":"npx","transport":{"type":"stdio"},"runtimeArguments":[{"value":"-y","type":"positional"}]}],"tools":[{"name":"build_note_map","description":"Returns structured per-note data for a scale: note name, scale degree (1-based), and semitone offset from root.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_available_inversions","description":"Returns the valid inversion numbers for a chord type, based on its note count.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_bebop_scale_notes","description":"Returns the eight notes of a bebop scale variant for a root - a diatonic scale plus one chromatic passing tone.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_chord_by_degree","description":"Returns the diatonic chord at a specific scale degree (1-7) for a key/mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_chord_inversion","description":"Reorders a chord's notes so the given inversion's chord tone is lowest.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_chord_notes","description":"Returns the notes of a chord given a root and chord type.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_circle_of_fifths","description":"Returns all 12 chromatic notes in ascending-fifths order starting from C.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_diatonic_chords","description":"Returns the 7 diatonic triads for a key/mode, one per scale degree, in degree order.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_enharmonic_labels","description":"Returns combined sharp/flat display labels for a list of sharp-spelled notes, e.g. [\"C#\", \"D\"] -> [\"Db/C#\", \"D\"]. Natural notes are unaffected. Input must already be sharp-spelled - use get_sharps first if you have flat-spelled notes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_flats","description":"Respells a list of sharp-spelled notes as flats, e.g. [\"C#\", \"D\"] -> [\"Db\", \"D\"]. Natural notes are unaffected. Input must already be sharp-spelled (as returned by get_scale_notes, get_mode_notes, etc.) - use get_sharps first if you have flat-spelled notes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_harmonic_minor_mode_notes","description":"Returns the seven notes of a harmonic minor mode for a root.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_key_signature","description":"Returns the sharp or flat count for a given key, treated as a major-key tonic (minor-key signatures are not exposed by this tool).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_melodic_minor_mode_notes","description":"Returns the seven notes of a melodic minor mode for a root.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_melodic_minor_notes","description":"Returns the seven notes of the ascending melodic minor scale for a root.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_modal_root","description":"Returns the root note of a mode within a given parent (Ionian/major) key.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_mode_info","description":"Returns display metadata for a mode: name, scale degree, and characteristic description.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_mode_notes","description":"Returns the 7 notes of a diatonic mode for a given root note.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_parent_scale_modes","description":"Returns all 7 modal rotations of the parent key for a given root and mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_progression_in_key","description":"Renders a named catalog progression as chords in a given key, in order.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_relative_major","description":"Returns the relative major root for a minor key.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_relative_minor","description":"Returns the relative minor root for a major key.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_roman_numeral","description":"Returns the roman numeral for a scale degree in a mode - case and suffix reflect diatonic triad quality.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_scale_degree","description":"Returns the 1-based scale degree of a note within a root + scale type, or null if the note is not in the scale.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_scale_notes","description":"Returns the notes of a scale by type. Covers all ScaleType values: major, blues, pentatonic-major, pentatonic-minor, harmonic-minor, melodic-minor, chromatic.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_semitone_distance","description":"Returns the ascending semitone distance between two notes (0-11).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_sharps","description":"Respells a list of notes to canonical sharp spelling, e.g. [\"Db\", \"C#\", \"D\"] -> [\"C#\", \"C#\", \"D\"]. Most tools accept flat-spelled input directly, but get_flats and get_enharmonic_labels require sharp-spelled input - use this to normalize flat-spelled notes before calling those two.","write_action":false,"price_micros":0,"input_schema":null},{"name":"is_note_in_scale","description":"Returns true if the given note is present in the specified root + scale type, false otherwise.","write_action":false,"price_micros":0,"input_schema":null},{"name":"midi_to_note","description":"Returns the note and octave for a given MIDI note number - the inverse of note_to_midi.","write_action":false,"price_micros":0,"input_schema":null},{"name":"note_to_frequency","description":"Returns the frequency in Hz for a note at a given octave, equal temperament, A4 = 440Hz.","write_action":false,"price_micros":0,"input_schema":null},{"name":"note_to_midi","description":"Returns the MIDI note number for a note at a given octave, using scientific pitch notation (C4 = middle C = MIDI 60).","write_action":false,"price_micros":0,"input_schema":null},{"name":"resolve_interval","description":"Returns the from-note and to-note for a named interval within a root context.","write_action":false,"price_micros":0,"input_schema":null},{"name":"transpose","description":"Transposes a set of notes from one key to another by the semitone distance between the two roots.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-24T21:39:52.574Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T21:39:52.549Z","components":{"code":{"score":20,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 10 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/index.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@playbykey/theory-mcp","version":"1.6.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-07-28T00:03:44.159Z","repositoryUrl":"https://github.com/DigitalBrewLLC/playbykey-dev-tools","weeklyDownloads":76}],"repo":{"found":true,"owner":"DigitalBrewLLC","repo":"playbykey-dev-tools","archived":false,"pushedAt":"2026-09-14T21:14:57Z","stars":1,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/157861944?v=4","ownerCreatedAt":"2024-01-27T02:27:49Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/157861944?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":76,"license":"MIT","lastPushAt":"2026-09-14T21:14:57.000Z","score":27}}}},"grade_history":[],"reviews":[]}