Skip to main content
Glama
Bundled Notes MCP

Bundled Notes MCP

by guipmilek

Este servidor local expõe bundles, notas Markdown, tags/tarefas, quadros Kanban, templates personalizados, busca e Files & Photos pelo mesmo modelo Firebase usado pelo aplicativo web.

WARNING

Este projeto não é afiliado ao Bundled Notes. O aplicativo não publica uma API estável ou suportada; mudanças de schema ou regras Firebase podem quebrar a integração. Mantenha backup e revise toda escrita.

Este servidor é vinculado a uma única conta. Faça fork do repositório, publique seu próprio deployment no Prefect Horizon e configure somente os seus secrets. Não use nem compartilhe o deployment de outra pessoa: ele acessa a conta definida nos secrets daquele servidor.

Contrato de segurança

  • Toda ferramenta que altera estado retorna confirmation_required sem chamar a API, a menos que receba confirm=true.

  • Arquivamento e restauração são explícitos. Exclusões permanentes têm nomes claros e removem recursivamente as subcoleções Firestore conhecidas.

  • Atualizações usam update masks e preservam campos desconhecidos.

  • Tokens de autenticação, compra e download nunca são retornados pelas ferramentas.

  • Downloads autenticados retornam Base64 somente até 10 MiB e nunca expõem URLs assinadas ou tokens do Firebase Storage.

  • Movimentações criam e verificam o destino antes de remover a origem, com rollback compensatório da cópia quando necessário.

  • Exclusões de tag bloqueiam referências pendentes por padrão.

  • Uploads respeitam o limite observado de 400 MiB, validam tamanho/metadados no Storage, relêem o catálogo e compensam falhas parciais.

  • bundled_schema_status compara formas sanitizadas do Firestore com um contrato versionado sem retornar títulos, conteúdo, nomes de arquivo, IDs ou outros valores.

Consulte WRITES.md antes de habilitar mutações.

Related MCP server: Datacron

Início rápido

Requer Python 3.11+ e uv.

uv sync --locked --extra dev

O bootstrap descobre a configuração pública atual do site e obtém um refresh token sem imprimir a senha ou o token:

uv run bundled-notes-bootstrap-auth --output .env

O helper solicita e-mail e senha interativamente. O .env é ignorado pelo Git e deve ser tratado como uma senha. Se a descoberta automática deixar de funcionar, informe a chave pública atual com --api-key.

Executar

Prefect Horizon (seu próprio deployment)

  1. Faça fork deste repositório.

  2. Entre no Prefect Horizon com GitHub e selecione o seu fork.

  3. Use o entrypoint src/bundled_notes_mcp/server.py:mcp.

  4. Use pyproject.toml como arquivo de dependências.

  5. Cadastre somente as credenciais da sua conta Bundled Notes como secrets.

  6. Mantenha Authentication habilitada e faça o deploy.

O endpoint será semelhante a https://seu-servidor.fastmcp.app/mcp. Cada fork e deployment deve representar uma única conta. Não conecte ao ChatGPT um deployment publicado por outra pessoa. Mantenha os payloads MCP de requisição e resposta desabilitados nos logs porque eles podem conter notas e metadados privados.

Local (stdio)

uv run bundled-notes-mcp

Exemplo de configuração no Codex; em ambientes compartilhados, use um gerenciador de secrets:

[mcp_servers.bundled-notes]
command = "uv"
args = ["--directory", "C:/Users/guipm/Desktop/MCPs/bundled-notes-mcp", "run", "bundled-notes-mcp"]

[mcp_servers.bundled-notes.env]
BUNDLED_FIREBASE_API_KEY = "..."
BUNDLED_FIREBASE_REFRESH_TOKEN = "..."
BUNDLED_FIREBASE_UID = "..."

Comece com bundled_status e bundled_list_bundles. Para uma escrita, chame uma vez sem confirmação, revise IDs e payload, depois repita com confirm=true.

Conectar ao ChatGPT

Depois de publicar o seu próprio fork, use estes metadados ao adicionar o MCP no ChatGPT:

Campo

Valor

Nome

Bundled Notes

Descrição

Consulte e gerencie bundles, notas, tags, Kanban, templates e arquivos da sua conta Bundled Notes, com confirmação obrigatória antes de alterações.

URL

https://seu-servidor.fastmcp.app/mcp — substitua pela URL do seu deployment

Autenticação

OAuth

Imagem

assets/bundled-notes-mcp.png — PNG quadrado, 512 × 512, menor que 100 KB

Ative o modo de desenvolvedor em Configurações → Segurança e login, abra Plugins, selecione +, preencha os campos acima e conclua a autenticação. O passo a passo completo, incluindo validação e atualização do catálogo, está no guia de conexão com o ChatGPT.

Ferramentas

O catálogo da versão 0.3.0 expõe 43 ferramentas. A leitura de lembretes é suportada; criação e agendamento permanecem deliberadamente bloqueados até existir um contrato upstream validado end-to-end.

Grupo

Capacidades

Conta

Status autenticado e projeção segura do usuário

Compatibilidade

Auditoria sanitizada de schema e detecção de drift aditivo/quebrável

Backup

Exportar a conta ou um bundle em JSON estruturado

Bundles

Listar, consultar, criar, editar, reordenar, arquivar, restaurar e excluir

Notas

Listar, buscar, criar, editar, reordenar, duplicar, mover, concluir e excluir

Tags e tarefas

Gerenciar tags locais/globais, assinaturas, prioridade e ações

Kanban

Configurar colunas ordenadas e mover notas para coluna/backlog

Templates

Criar a partir de bundle, aplicar e excluir

Files & Photos

Listar, baixar até 10 MiB, enviar, anexar, desanexar e excluir

Rich links

Gerar ou atualizar previews pela callable function nativa

Lembretes

Listar metadados de lembretes anexados às notas

A busca filtra notas localmente porque o aplicativo também usa um índice/cache no cliente, não um endpoint Firestore de texto completo. Os limites são finitos por padrão; aumente-os deliberadamente em contas grandes.

Desenvolvimento

uv sync --locked --extra dev
uv run ruff format --check .
uv run ruff check .
uv run pytest
uv run fastmcp inspect src/bundled_notes_mcp/server.py:mcp
uv build

Consulte o índice de documentação, o mapa de arquitetura, o playbook para agentes, o guia de deploy, a manutenção de schema e os testes. O arquivo llms.txt contém o mapa compacto e o catálogo exato para agentes.

Limites conhecidos

  • Endpoints Firebase e caminhos Firestore são detalhes de implementação, não uma promessa de compatibilidade.

  • Escritas de lembretes continuam bloqueadas até que o contrato Android de agendamento/notificação possa ser validado end-to-end; persistir um documento Firestore sem garantir o disparo não é considerado suporte funcional.

  • Importação do Google Keep permanece fora do MCP enquanto o fluxo oficial ainda estiver em desenvolvimento.

  • Antes de excluir um arquivo da conta, desanexe-o das notas relevantes.

  • Contadores do documento de usuário podem atrasar; as listagens são a fonte operacional deste servidor.

Available Tools

33 tools
bundled_apply_tagApply TagB
DestructiveIdempotent

Apply a tag; optionally execute its completion/archive/swap actions.

Inputs: tag_id (required), entry_id (required), bundle_id (required), confirm, +1 more.

bundled_apply_templateApply Bundle TemplateC

Create a new bundle from a custom template.

Inputs: template_id (required), name, confirm, default_bundle.

bundled_configure_kanbanConfigure KanbanC
DestructiveIdempotent

Enable/configure a board using ordered tag IDs as columns.

Inputs: bundle_id (required), column_tag_ids (required), confirm, enabled, +3 more.

bundled_create_bundleCreate BundleB

Create a Notes, List, or Board bundle. Requires confirm=true.

Inputs: spec (required), confirm.

bundled_create_entryCreate EntryC

Create a Markdown entry in a bundle.

Inputs: spec (required), bundle_id (required), confirm.

bundled_create_tagCreate Tag or TaskB

Create a local/global tag, optionally with completion, archive, or tag-swap task actions.

Inputs: spec (required), bundle_id (required), confirm.

bundled_create_templateCreate Bundle TemplateB

Create a custom template from a bundle, copying local tags and optionally entries.

Inputs: name (required), bundle_id (required), confirm, description, +1 more.

bundled_current_userGet Bundled Notes AccountA
Read-onlyIdempotent

Return a safe account projection; purchase and authentication tokens are always omitted.

Inputs: no named parameters. Returns: object

bundled_delete_account_attachmentDelete Account FileA
DestructiveIdempotent

Permanently delete the account catalog record and storage object; detach references first.

Inputs: attachment_id (required), confirm.

bundled_delete_bundlePermanently Delete BundleA
DestructiveIdempotent

Permanently delete a bundle plus all entry and tag subdocuments.

Inputs: bundle_id (required), confirm.

bundled_delete_entryPermanently Delete EntryB
DestructiveIdempotent

Permanently delete one entry. Account-storage files are not deleted.

Inputs: entry_id (required), bundle_id (required), confirm.

bundled_delete_tagPermanently Delete TagB
DestructiveIdempotent

Delete a tag. By default refuses when entries or Kanban still reference it.

Inputs: tag_id (required), bundle_id (required), confirm, global_tag, +1 more.

bundled_delete_templatePermanently Delete TemplateB
DestructiveIdempotent

Permanently delete a custom template and its copied tags/entries.

Inputs: template_id (required), confirm.

bundled_duplicate_entryDuplicate EntryA

Copy an entry. The copy gets a new document and numeric ID; destination tags are explicit.

Inputs: entry_id (required), source_bundle_id (required), target_bundle_id (required), confirm, +1 more.

bundled_get_bundleGet BundleA
Read-onlyIdempotent

Get one bundle and all known presentation/Kanban settings.

Inputs: bundle_id (required).

bundled_get_entryGet EntryB
Read-onlyIdempotent

Get an entry with Markdown content, tag IDs, state, and attachment metadata.

Inputs: entry_id (required), bundle_id (required).

bundled_list_attachmentsList Account FilesA
Read-onlyIdempotent

List account-level Files & Photos metadata without download tokens.

Inputs: limit.

bundled_list_bundlesList BundlesA
Read-onlyIdempotent

List bundles, optionally including archived bundles.

Inputs: limit, include_archived.

bundled_list_entriesList Bundle EntriesB
Read-onlyIdempotent

List notes/entries in one bundle.

Inputs: bundle_id (required), limit, include_archived.

bundled_list_tagsList Bundle TagsA
Read-onlyIdempotent

List bundle-local tags and subscribed global tags.

Inputs: bundle_id (required), include_global.

bundled_list_templatesList Custom TemplatesA
Read-onlyIdempotent

List user-created bundle templates.

Inputs: limit.

bundled_move_entryMove EntryA
DestructiveIdempotent

Copy to the destination, verify it, then delete the source; rolls back the copy if source deletion fails.

Inputs: entry_id (required), source_bundle_id (required), target_bundle_id (required), confirm, +1 more.

bundled_move_kanban_entryMove Entry Across KanbanC
DestructiveIdempotent

Move an entry to one configured column, or to backlog with null.

Inputs: entry_id (required), bundle_id (required), target_column_tag_id (required), confirm.

bundled_remove_attachmentDetach File from EntryA
DestructiveIdempotent

Remove an attachment reference from an entry but keep the account-storage file.

Inputs: entry_id (required), bundle_id (required), attachment_id (required), confirm.

bundled_remove_tagRemove TagB
DestructiveIdempotent

Remove one tag reference from an entry.

Inputs: tag_id (required), entry_id (required), bundle_id (required), confirm.

bundled_search_entriesSearch EntriesB
Read-onlyIdempotent

Client-side text search matching the web app's local title/content search semantics.

Inputs: query (required), limit, tag_id, bundle_id, +1 more.

bundled_set_bundle_archivedArchive or Restore BundleB
DestructiveIdempotent

Archive or restore a bundle without deleting its contents.

Inputs: archived (required), bundle_id (required), confirm.

bundled_set_entry_stateSet Entry StateA
DestructiveIdempotent

Set archived, markedAsComplete, or pinned explicitly; never toggles blindly.

Inputs: state (required), value (required), entry_id (required), bundle_id (required), +1 more.

bundled_statusBundled Notes MCP StatusA
Read-onlyIdempotent

Report configuration and validate the Firebase refresh token with a real read.

Inputs: no named parameters. Returns: object

bundled_update_bundleUpdate BundleB
DestructiveIdempotent

Partially update bundle details, layout, sorting, or display settings.

Inputs: spec (required), bundle_id (required), confirm.

bundled_update_entryUpdate EntryB
DestructiveIdempotent

Partially update entry text, tags, or pin state.

Inputs: spec (required), entry_id (required), bundle_id (required), confirm.

bundled_update_tagUpdate Tag or TaskC
DestructiveIdempotent

Partially update a local or global tag definition.

Inputs: spec (required), tag_id (required), bundle_id (required), confirm, +1 more.

bundled_upload_attachmentUpload and Attach FileA

Upload a local file to account storage and attach it to an entry (400 MiB maximum).

Inputs: entry_id (required), bundle_id (required), file_path (required), confirm.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 33 tools

    Disambiguation4/5

    Each tool targets a specific resource and action combination, with only minor overlap between update_entry and set_entry_state around pin state. Descriptions clearly distinguish attachment reference removal from account storage deletion.

    Naming Consistency5/5

    All tools share the bundled_ prefix and follow a consistent verb_noun structure, with the only exceptions being status and current_user which are intuitively named. No style mixing.

    Tool Count2/5

    At 33 tools, the set is substantial, exceeding the 25-tool threshold for appropriate scope. While each tool has a clear purpose, the number may overwhelm agents.

    Completeness5/5

    The surface covers the full lifecycle for bundles, entries, tags, templates, attachments, and Kanban configuration, with no obvious dead ends. The only minor gap is lack of template update or attachment download, but these are not critical.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      MCP server for managing a local, domain-agnostic knowledge base using Markdown notes with frontmatter. Enables AI agents to capture, read, search, link, and maintain notes with atomic writes and privacy controls.
      13
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Local MCP server for querying and maintaining a Markdown vault. Provides full-text search, backlinks, note retrieval, and optional confined write tools, without sending the whole vault to the client context.
      22
      61 PyPI
      1
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      A personal note store exposed as an MCP server. Enables any MCP-speaking assistant to create, search, list, and categorize notes, with per-client bearer tokens for author attribution.
      635 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Lets MCP clients search, read, create, append, replace, move, and batch-update local Markdown notes safely, with conflict detection via SHA-256 and optional managed update blocks, without requiring a vector database.
      MIT