flat-mcp
Integrates with the Flat.io REST API to manage music scores: list and find scores and collections, inspect score metadata and measures, read MusicXML, edit measures or text by creating validated new revisions with dry-run support, restore previous revisions, update metadata, create or fork scores, and export scores to PDF, PNG, MusicXML, MXL, MIDI, MP3, and WAV.
Click on "Deploy 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., "@flat-mcp show me my recent Flat.io scores"
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.
flat-mcp — edite suas partituras do Flat.io pelo Claude
Criado por @eubrunodiego · 2026-10-27
Servidor MCP local que conecta o Claude (app desktop) diretamente à REST API do Flat.io usando a sua conta, por meio de um token pessoal. Com ele, o Claude consegue listar, ler, editar, restaurar, exportar e criar partituras.
Por que não usar o conector oficial do Flat?
O Flat oferece um servidor MCP oficial (https://mcp.flat.io/mcp), mas ele
só lê e cria partituras — não edita as existentes — e exige assinatura
Flat Power. Esta integração fala direto com a REST API, onde editar é possível.
Related MCP server: google-drive-mcp
Como a edição funciona
A API do Flat não altera notas "no lugar": cada edição grava uma nova revisão
da partitura (POST /scores/{id}/revisions). O fluxo de cada ferramenta de edição é:
baixa a última revisão em MusicXML;
aplica a alteração (troca de compassos ou substituição exata de texto);
valida o XML — se ficar inválido, nada é gravado;
grava a nova revisão com uma descrição do que mudou.
Nada é apagado. Para desfazer, peça ao Claude para restaurar uma revisão anterior.
Atenção: a documentação do Flat avisa que a última revisão pode não refletir alterações muito recentes feitas no editor web (ele consolida revisões a cada ~100 modificações). Antes de editar pela API, feche a partitura no navegador ou salve uma revisão manualmente, para não sobrescrever trabalho recente.
1. Gere seu token pessoal
Acesse https://flat.io/developers/apps e crie um app (ex.: "Claude").
No menu lateral, abra REST API → Personal tokens.
Dê um nome ao token e marque os escopos:
scores,collectionseaccount.public_profile.Copie o token e guarde-o — ele dá acesso total às suas partituras.
2. Instale
2.1 Instale o uv
O uv instala o Python e as dependências sozinho.
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Anote o caminho completo do executável, que será usado no passo 3:
which uv # macOS/Linux — ex.: /Users/voce/.local/bin/uvwhere.exe uv # Windows — ex.: C:\Users\voce\.local\bin\uv.exe2.2 Baixe este repositório
Coloque-o num local fixo (não mova a pasta depois de configurar):
git clone https://github.com/eubrunodiego/flat-mcp.git ~/flat-mcpSem git, use Code → Download ZIP no GitHub e descompacte em ~/flat-mcp.
2.3 Teste a conexão
cd ~/flat-mcp
FLAT_ACCESS_TOKEN=cole-seu-token-aqui uv run python -c "from flat_mcp import FlatClient; print(FlatClient().me()['username'])"Se aparecer seu nome de usuário do Flat, está tudo certo.
cd ~/flat-mcp
python3 -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install .No passo 3, use como command o caminho completo de .venv/bin/flat-mcp
(Windows: .venv\Scripts\flat-mcp.exe) e deixe args vazio.
3. Conecte ao Claude
3.1 Claude desktop (macOS e Windows)
No app Claude, abra Configurações → Desenvolvedor → Editar configuração. Isso abre o arquivo
claude_desktop_config.json:macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Acrescente a chave
mcpServersno nível de cima do arquivo, ao lado das chaves que já existem (não dentro depreferences). Lembre da vírgula depois do bloco anterior:
{
"preferences": { "...": "o que já existia no seu arquivo" },
"mcpServers": {
"flat": {
"command": "/CAMINHO/COMPLETO/DO/uv",
"args": ["--directory", "/CAMINHO/COMPLETO/flat-mcp", "run", "flat-mcp"],
"env": {
"FLAT_ACCESS_TOKEN": "cole-seu-token-aqui",
"FLAT_EXPORT_DIR": "/CAMINHO/onde/salvar/exportacoes"
}
}
}
}command: o caminho completo douvanotado no passo 2.1. Use o caminho completo — o app nem sempre enxerga o PATH do terminal.--directory: o caminho completo da pasta deste repositório.No Windows, escreva as barras dobradas:
"C:\\Users\\voce\\flat-mcp".FLAT_EXPORT_DIRé opcional (padrão: pasta Downloads).
Confira se o JSON é válido:
python3 -m json.tool "$HOME/Library/Application Support/Claude/claude_desktop_config.json" > /dev/null && echo "JSON OK"Feche o Claude por completo (⌘Q no macOS; no Windows, saia pelo ícone da bandeja) e abra de novo. As ferramentas
flat_*aparecem no menu de ferramentas da conversa. Peça "teste a conexão com o Flat" para confirmar.
3.2 Claude Code (terminal)
claude mcp add flat --scope user \
--env FLAT_ACCESS_TOKEN=cole-seu-token-aqui \
-- uv --directory ~/flat-mcp run flat-mcpConfira com claude mcp list. Dentro do Claude Code, /mcp mostra o status.
3.3 Resolução de problemas
Os registros do servidor ficam em:
macOS:
~/Library/Logs/Claude/mcp-server-flat.logWindows:
%APPDATA%\Claude\logs\mcp-server-flat.log
Mensagem no log | Causa e solução |
| O |
| Token errado, expirado ou sem os escopos do passo 1. |
Servidor não aparece | JSON inválido ou |
| O caminho em |
4. Use
Exemplos de pedidos:
"Liste minhas partituras do Flat modificadas recentemente."
"Na partitura Ave Maria, mostre os compassos 9 a 16 do Contralto."
"No compasso 12 do Soprano, troque o Fá por Sol e mantenha o ritmo. Mostre o dry-run antes de gravar."
"Corrija o título para 'Ave Maria (Schubert)' e o compositor para 'F. Schubert'."
"Desfaça a última edição da partitura X."
"Exporte a partitura X em PDF e em MusicXML."
Ferramentas
Ferramenta | O que faz |
| Testa a conexão e mostra a conta |
| Lista ou procura partituras (paginado) |
| Lista as coleções (pastas) |
| Metadados + partes, nº de compassos, armadura e compasso |
| MusicXML de um trecho de compassos |
| MusicXML bruto, paginado |
| Histórico de revisões |
| Troca compassos inteiros de uma parte → nova revisão |
| Substituições exatas de texto (com contagem obrigatória) → nova revisão |
| Substitui a partitura inteira por um MusicXML/MXL/MIDI |
| Desfaz: copia uma revisão antiga para uma nova |
| Título, subtítulo, compositor, letrista, arranjador, descrição, privacidade |
| Cria nova partitura (privada por padrão) ou duplica uma |
| Salva em PDF, PNG, MusicXML, MXL, MIDI, MP3, WAV |
flat_replace_measures e flat_edit_musicxml aceitam dry_run=true, que confere
o resultado sem gravar.
Usar como biblioteca Python
from flat_mcp import FlatClient
from flat_mcp import musicxml as mx
flat = FlatClient() # lê FLAT_ACCESS_TOKEN
scores, _ = flat.list_scores()
sid = scores[0]["id"]
xml = flat.get_musicxml(sid)
print(mx.summarize(xml))
novo = mx.apply_text_edits(xml, [{"find": "<work-title>Rascunho</work-title>",
"replace": "<work-title>Versão final</work-title>"}])
flat.create_revision(sid, novo, description="Título final")Segurança
O token fica apenas no seu computador (variável de ambiente). Não o coloque em repositórios. Para revogá-lo, apague-o em https://flat.io/developers/apps.
Partituras criadas são privadas por padrão; tornar pública exige que você peça.
Os escopos
scores/collectionspermitem apagar partituras pela API, mas este servidor não expõe nenhuma ferramenta de exclusão.
Testes
uv run --extra dev pytest -qOs testes usam uma API do Flat simulada em memória — não tocam na sua conta.
Limitações
Edição por compasso suporta MusicXML
score-partwise(o formato que o Flat exporta).Exportações pesadas (MP3/WAV/PDF de partituras longas) podem demorar; o tempo limite é 60 s.
Limites de requisição da API: veja https://flat.io/developers/docs/api/rate-limits.
Créditos e licença
Desenvolvido por @eubrunodiego em 2026-10-27.
Distribuído sob a licença MIT. Você pode usar, modificar e redistribuir, desde que mantenha o aviso de copyright.
Este projeto não é afiliado ao Flat.io (Tutteo Ltd). "Flat" é marca de seus respectivos donos.
Available Tools
16 toolsflat_create_scoreB
Cria uma partitura nova (privada por padrão) a partir de MusicXML em texto ou de um arquivo local (.musicxml, .xml, .mxl, .mid).
Inputs: title (required), privacy, musicxml, file_path, +1 more.
flat_edit_musicxmlA
Edita por substituição exata de texto no MusicXML e grava nova revisão. edits: [{"find": "...", "replace": "...", "count": 1}] — 'count' é o nº EXATO de ocorrências esperadas (padrão 1); se não bater, nada é gravado. Útil para título, letra, dinâmicas, andamento.
Inputs: edits (required), score_id (required), description (required), dry_run.
flat_exportB
Exporta e salva no computador. fmt: xml, mxl, midi, mp3, wav, pdf, png, json. Pasta padrão: FLAT_EXPORT_DIR ou ~/Downloads.
Inputs: score_id (required), fmt, revision, output_dir.
flat_find_scoreC
Procura partituras da conta cujo título/compositor contenha o texto (sem diferenciar maiúsculas).
Inputs: query (required), max_pages.
flat_fork_scoreC
Duplica uma partitura (útil para editar uma cópia e preservar a original).
Inputs: score_id (required), collection.
flat_get_measuresA
Devolve o MusicXML dos compassos nas posições start..end (1-based, inclusivo). Sem part_id, traz o trecho de todas as partes. Prefira trechos de até ~16 compassos.
Inputs: end (required), start (required), score_id (required), part_id, +1 more.
flat_get_musicxmlC
MusicXML bruto da partitura, paginado por caracteres (use offset para continuar).
Inputs: score_id (required), offset, revision, max_chars.
flat_list_collectionsB
Lista as coleções (pastas) da conta.
Inputs: no named parameters.
flat_list_revisionsB
Histórico de revisões (id, data, descrição) — útil para desfazer edições.
Inputs: score_id (required).
flat_list_scoresB
Lista partituras. collection: 'allScores' (todas), 'collaborations', 'trash' ou o id de uma coleção. sort: modificationDate | creationDate | title. Use 'next_cursor' do resultado para a próxima página.
Inputs: sort, limit, cursor, collection.
flat_replace_measuresC
Substitui compassos inteiros de uma parte (casando pelo atributo number) e grava nova revisão. measures_xml: um ou mais ... completos, já editados. description: o que mudou (fica no histórico do Flat).
Inputs: score_id (required), description (required), measures_xml (required), dry_run, +1 more.
flat_restore_revisionB
Desfaz edições: copia o conteúdo de uma revisão antiga para uma nova revisão (o histórico é mantido).
Inputs: score_id (required), revision_id (required), description.
flat_score_overviewC
Metadados + estrutura musical (partes, ids, nº de compassos, armadura e compasso iniciais).
Inputs: score_id (required), revision.
flat_update_metadataB
Altera metadados da partitura no Flat (título, compositor, descrição...). privacy: private | public | privateLink. Tornar pública exige confirmação explícita do usuário.
Inputs: score_id (required), title, privacy, arranger, +4 more.
flat_upload_revisionB
Substitui a partitura inteira por um MusicXML completo (texto ou arquivo .musicxml/.xml/.mxl/.mid local), gravando como nova revisão.
Inputs: score_id (required), description (required), musicxml, file_path.
flat_whoamiA
Mostra a conta Flat autenticada pelo token (teste de conexão).
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
The four write paths (flat_upload_revision, flat_replace_measures, flat_edit_musicxml, flat_restore_revision) all produce new revisions but operate at clearly different granularities (whole score, measure range, exact text substitution, revert), and the descriptions spell this out. The only mild overlaps are flat_get_measures vs flat_get_musicxml and flat_score_overview vs flat_get_musicxml, which are differentiated by range/pagination.
Almost every tool follows a flat_verb_noun pattern in snake_case (flat_create_score, flat_list_scores, flat_replace_measures), which is highly predictable. The lone deviation is flat_score_overview being noun-first, plus flat_whoami which lacks a noun but is a recognizable idiom.
16 tools is slightly on the heavy side but each maps to a plausible, non-redundant operation in a music-score editing lifecycle (read, edit, history, export, account). Nothing feels padded, though the set could be tightened by merging the two MusicXML getters.
Create, read (overview, measures, raw XML), update (metadata, measures, text, whole-score), fork, revision history/restore, and multi-format export are all covered, so most workflows reach no dead end. The notable gap is deletion/trashing of scores (the 'trash' collection is listed but no tool moves a score there) and collaboration management.
Maintenance
Related MCP Connectors
Read, edit, publish, and preview your pepita websites from Claude.
Find, read, create and edit Plainer files with Claude Code or Codex. Approve access in your browser.
Notes, tasks, habits, journal and 6 more tools Claude can read and change, with undo. Free.
Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables Claude AI to convert, edit, and analyze MuseScore files (.mscz, .musicxml, MIDI) through natural language commands, supporting format conversion, transposition, harmony analysis, and more.201-
- FlicenseNot gradedqualityCmaintenanceEnables managing Google Drive files, Docs, and Sheets through natural language via Claude Code, with tools for listing, searching, editing, and formatting documents and spreadsheets.-
- AlicenseBqualityCmaintenanceEnables Claude to manage Spotify playlists and analyze personal listening history, including account reads, playlist writes, local analytics from data exports, and building playlists from track lists.35MIT
- AlicenseAqualityBmaintenanceEnables AI clients to generate and edit MuseScore scores from compact text notation and export them as mscz, PDF, PNG, SVG, MIDI, or MP3 without opening the MuseScore GUI.11MIT