Obsidian
Um servidor para interagir com seu cofre Obsidian.
Documentação

Servidor de Ferramentas MCP do Obsidian
Este projeto fornece um servidor Model Context Protocol (MCP) que expõe ferramentas para interagir com um cofre do Obsidian.
Sumário
- Recursos
- Instalação
- Configuração
- Execução Manual (para Testes/Depuração)
- Configuração do Cliente (Exemplo: Claude Desktop)
- Ferramentas MCP Disponíveis
- Roteiro
- Perguntas Frequentes (FAQ)
- Contribuições Bem-Vindas!
Recursos
Permite que clientes MCP (como assistentes de IA) possam:
- Ler e escrever notas
- Gerenciar metadados de notas (frontmatter)
- Listar notas e pastas
- Pesquisar notas por conteúdo ou metadados
- Gerenciar notas diárias
- Obter links de saída, backlinks e tags
Instalação
-
Clone o repositório (se ainda não o fez):
# git clone <repository-url> # cd OMCP -
Navegue até o diretório do projeto:
cd /path/to/your/OMCP -
Crie um ambiente virtual Python (recomendado para evitar conflitos de dependências):
python -m venv .venv -
Ative o ambiente virtual:
- No Windows PowerShell:
.venv\Scripts\Activate.ps1 - No Linux/macOS:
source .venv/bin/activate
(Seu prompt de terminal agora deve mostrar
(.venv)no início) - No Windows PowerShell:
-
Instale o pacote e suas dependências:
pip install .
Configuração
Este servidor é configurado usando variáveis de ambiente, que podem ser convenientemente gerenciadas usando um arquivo .env na raiz do projeto.
-
Copie o arquivo de exemplo:
# From the project root directory (OMCP/) cp .env.example .env(No Windows, você pode usar
copy .env.example .env) -
Edite o arquivo
.env: Abra o arquivo.envrecém-criado em um editor de texto. -
Defina
OMCP_VAULT_PATH: Esta é a única variável obrigatória. Atualize-a com o caminho absoluto para o seu cofre do Obsidian. Use barras normais (/) para caminhos, mesmo no Windows.OMCP_VAULT_PATH="/path/to/your/Obsidian/Vault" -
Revise as Configurações Opcionais: Ajuste as outras variáveis
OMCP_para notas diárias, porta do servidor ou diretório de backup, se necessário. Leia os comentários no arquivo para obter explicações.
(Alternativamente, em vez de usar um arquivo .env, você pode definir essas variáveis como variáveis de ambiente reais do sistema. O servidor priorizará as variáveis de ambiente do sistema sobre o arquivo .env se ambos estiverem definidos.)
Execução Manual (para Testes/Depuração)
Embora aplicativos clientes como o Claude Desktop iniciem o servidor automaticamente usando a configuração descrita abaixo, você também pode executar o servidor manualmente a partir do seu terminal para testes diretos ou depuração.
- Garanta que a Configuração Esteja Feita: Certifique-se de ter criado e configurado seu arquivo
.envconforme descrito na seção Configuração. - Ative o Ambiente Virtual:
(Use# If not already active .venv\Scripts\Activate.ps1source .venv/bin/activateno Linux/macOS) - Execute o script do servidor:
(.venv) ...> python obsidian_mcp_server/main.py
O servidor iniciará e imprimirá o endereço em que está escutando (por exemplo, http://127.0.0.1:8001). Você normalmente pressionaria Ctrl+C para interrompê-lo quando terminar os testes.
Lembre-se: Se você pretende usar este servidor com o Claude Desktop ou um lançador similar, você não deve executá-lo manualmente dessa forma. Configure o aplicativo cliente (veja a próxima seção), e ele cuidará de iniciar e parar o processo do servidor.
Configuração do Cliente (Exemplo: Claude Desktop)
Muitos clientes MCP (como o Claude Desktop) podem iniciar processos de servidor diretamente. Para configurar tal cliente, você normalmente precisa editar seu arquivo de configuração JSON (por exemplo, claude_desktop_config.json no macOS/Linux, encontre o caminho equivalente no Windows em AppData).
⚠️ Regras Importantes de Formatação JSON:
- Arquivos JSON não suportam comentários (remova quaisquer comentários
//ou/* */) - Todas as strings devem ser devidamente citadas com aspas duplas (
") - Caminhos do Windows devem usar barras invertidas escapadas (
\\) - Use um validador JSON (como jsonlint.com) para verificar sua sintaxe
Aqui está um exemplo de entrada para adicionar sob a chave mcpServers na configuração JSON do cliente:
{
"mcpServers": {
"obsidian_vault": {
"command": "C:\\path\\to\\your\\project\\OMCP\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\your\\project\\OMCP\\obsidian_mcp_server\\main.py"],
"env": {
"OMCP_VAULT_PATH": "C:/path/to/your/Obsidian/Vault",
"OMCP_DAILY_NOTE_LOCATION": "Journal/Daily"
}
}
}
}
Pontos-Chave:
- Substitua os caminhos pelos caminhos absolutos relevantes para o seu sistema
- Para caminhos do Windows nos campos
commandeargs:- Use barras invertidas duplas (
\\) para separadores de caminho - Inclua a extensão
.exepara o executável Python
- Use barras invertidas duplas (
- Para caminhos do Windows no bloco
env:- Use barras normais (
/) para melhor compatibilidade - Não inclua a extensão
.exe
- Use barras normais (
- O caminho
commanddeve apontar para o executávelpython.exedentro do.venvque você criou - O caminho
argsdeve apontar para o arquivomain.pydentro da subpastaobsidian_mcp_server - Usar o bloco
envé a maneira mais confiável de garantir que o servidor encontre o caminho do seu cofre - Lembre-se de reiniciar o aplicativo cliente após modificar sua configuração JSON
Armadilhas Comuns a Evitar:
- Não use barras invertidas simples em caminhos do Windows
- Não inclua comentários no JSON
- Não se esqueça de escapar barras invertidas em caminhos do Windows
- Não misture barras normais e invertidas no mesmo caminho
- Não se esqueça de citar corretamente todas as strings
Ferramentas MCP Disponíveis
list_folderslist_notesget_note_contentget_note_metadataget_outgoing_linksget_backlinksget_all_tagssearch_notes_contentsearch_notes_metadatasearch_folderscreate_noteedit_noteappend_to_noteupdate_note_metadatadelete_noteget_daily_note_pathcreate_daily_noteappend_to_daily_note
Roteiro
Para um plano de implementação detalhado e faseado, incluindo considerações de tratamento de erros, consulte o arquivo ROADMAP.md.
Este projeto é desenvolvido ativamente. Aqui está uma visão dos recursos planejados:
v1.x (Curto Prazo)
- Criação de Notas Baseada em Modelos:
- Configurar um diretório de modelos (
OMCP_TEMPLATE_DIR). - Implementar a ferramenta
create_note_from_template(usando nome do modelo, caminho de destino, metadados opcionais). - Adicionar testes para criação de modelos.
- Configurar um diretório de modelos (
- Criação de Pastas:
- Implementar a função utilitária
create_folder. - Implementar a ferramenta MCP
create_folder. - Adicionar testes para criação de pastas.
- Implementar a função utilitária
v1.y (Médio Prazo / Melhorias Futuras)
- Substituição de variáveis em modelos (por exemplo,
{{DATE}}). - Ferramenta
list_templates. - Ferramentas avançadas de atualização de notas (por exemplo,
append_to_note_by_metadata). - Ferramenta
list_vault_structurepara visão abrangente da hierarquia do cofre. - Revisão e expansão abrangente de testes.
v2.x+ (Ideias Potenciais / Longo Prazo)
- Ferramentas de Organização:
move_item(source, destination)(A versão inicial pode não atualizar links).rename_item(path, new_name)(A versão inicial pode não atualizar links).
- Ferramentas de Manipulação de Conteúdo:
replace_text_in_note(path, old, new, count).prepend_to_note(path, content).append_to_section(path, heading, content)(Requer análise confiável de cabeçalhos).
- Ferramentas de Consulta:
get_local_graph(path)(Combinar links de saída/backlinks).search_notes_by_metadata_field(key, value).
- Ferramentas de Integração de Plugins:
- Integração Dataview:
execute_dataview_query(query_type, query)- Executar consultas Dataview e obter resultados estruturadossearch_by_dataview_field(field, value)- Pesquisar notas por campos Dataview
- Gerenciamento de Tarefas:
query_tasks(status, due_date, tags)- Pesquisar e filtrar tarefas em todo o cofre
- Integração Kanban:
get_kanban_data(board_path)- Obter dados estruturados de quadros kanban
- Integração de Calendário:
get_calendar_events(start_date, end_date)- Consultar eventos e tarefas do calendário
- Integração Dataview:
Perguntas Frequentes (FAQ)
Problemas de Configuração
P: Meu servidor não consegue encontrar meu cofre. O que está errado? R: Isso geralmente é devido à configuração incorreta do caminho. Verifique:
- O
OMCP_VAULT_PATHno seu arquivo.envusa barras normais (/) mesmo no Windows - O caminho é absoluto (começa da raiz)
- O caminho não termina com barra final
- O diretório do cofre existe e é acessível
P: Por que estou recebendo erros de permissão? R: Isso normalmente acontece quando:
- O caminho do cofre aponta para um diretório restrito
- O processo Python não tem permissões de leitura/escrita
- O cofre está em uma pasta sincronizada na nuvem (como OneDrive) que está sincronizando no momento
Tente:
- Mover seu cofre para um diretório local
- Executar o servidor com permissões elevadas
- Verificar se seu antivírus não está bloqueando o acesso
Problemas de Conexão do Cliente
P: Meu cliente de IA não consegue se conectar ao servidor. O que devo verificar? R: Verifique estes problemas comuns:
- O servidor está realmente em execução (verifique a saída do terminal)
- A porta na configuração do seu cliente corresponde à porta do servidor
- O caminho do Python na configuração do seu cliente aponta para o ambiente virtual correto
- Todas as variáveis de ambiente estão devidamente definidas na configuração do cliente
P: Por que recebo erros de "Conexão recusada"? R: Isso geralmente significa:
- O servidor não está em execução
- A porta já está em uso
- O firewall está bloqueando a conexão
Tente:
- Verifique se o servidor está em execução:
netstat -ano | findstr :8001(Windows) - Tente uma porta diferente definindo
OMCP_SERVER_PORTno seu.env - Desative temporariamente o firewall para testar
P: Recebo "[error] [obsidian_vault] Unexpected token 'S', "Starting O"... is not valid JSON". O que está errado? R: Este erro ocorre quando o arquivo de configuração JSON do cliente está malformado. Causas comuns:
- Vírgulas ausentes ou extras no JSON
- Barras invertidas não escapadas em caminhos do Windows
- Comentários no JSON (JSON não suporta comentários)
Verifique seu arquivo de configuração do cliente (por exemplo, claude_desktop_config.json):
- Use um validador JSON (como jsonlint.com) para verificar a sintaxe
- Para caminhos do Windows, escape barras invertidas:
"C:\\path\\to\\file" - Remova quaisquer comentários (// ou /* */)
- Garanta que todas as strings estejam devidamente citadas
- Verifique se todos os colchetes e chaves estão devidamente fechados
Exemplo de formatação correta de caminho do Windows:
{
"mcpServers": {
"obsidian_vault": {
"command": "C:\\path\\to\\your\\project\\OMCP\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\your\\project\\OMCP\\obsidian_mcp_server\\main.py"]
}
}
}
P: Recebo um erro de tempo limite e a mensagem "Servidor desconectado". O que está acontecendo? R: Este padrão de erro (inicialização bem-sucedida, depois tempo limite após 60 segundos) geralmente significa:
- O servidor já está em execução em outro processo
- A porta já está em uso por outro aplicativo
- O processo do servidor está sendo encerrado inesperadamente
Tente estes passos em ordem:
-
Verifique processos de servidor em execução:
# On Windows netstat -ano | findstr :8001 # Look for the PID and then: taskkill /F /PID <PID># On Linux/macOS lsof -i :8001 # Look for the PID and then: kill -9 <PID> -
Verifique outros aplicativos usando a porta:
- Feche quaisquer outros aplicativos que possam usar a porta 8001
- Isso inclui outros servidores MCP, servidores de desenvolvimento ou quaisquer aplicativos web
- Se não tiver certeza, tente mudar a porta no seu
.env:OMCP_SERVER_PORT=8002
-
Verifique o processo do servidor:
- Abra o Gerenciador de Tarefas (Windows) ou o Monitor de Atividade (macOS)
- Procure por quaisquer processos Python relacionados ao servidor MCP
- Encerre quaisquer processos suspeitos
-
Verifique os recursos do sistema:
- Garanta que você tenha memória e CPU suficientes disponíveis
- Verifique se algum antivírus ou software de segurança está bloqueando o processo
- Verifique se seu ambiente Python tem permissões adequadas
-
Redefina tudo:
- Pare o aplicativo cliente
- Encerre quaisquer processos de servidor restantes
- Exclua o arquivo
.enve crie um novo a partir de.env.example - Reinicie seu computador (se outros passos não funcionarem)
- Comece do zero com o aplicativo cliente
Se o problema persistir após tentar todos esses passos, compartilhe:
- O log de erro completo
- A saída de
netstat -ano | findstr :8001(Windows) oulsof -i :8001(Linux/macOS) - Quaisquer mensagens de erro dos logs de eventos do seu sistema P: O servidor desconecta imediatamente com "Server transport closed unexpectedly... process exiting early". O que está errado? R: Esse erro significa que o processo do servidor Python travou quase imediatamente após ser iniciado pelo cliente. Não é um timeout; o próprio script do servidor falhou ao executar ou permanecer em execução.
Causas comuns:
- Caminhos incorretos no JSON do cliente:
commandnão aponta para opython.execorreto dentro do.venv.argsnão aponta para o scriptobsidian_mcp_server/main.pycorreto.- Separadores de caminho incorretos ou escapes de barra invertida ausentes (
\\) no Windows.
- Dependências ausentes:
- Pacotes necessários do
requirements.txtnão estão instalados no.venv. - O cliente está iniciando o Python sem ativar corretamente o ambiente virtual.
- Pacotes necessários do
- Erros de sintaxe: Uma alteração recente no código introduziu um erro de sintaxe no Python.
- Erro crítico de configuração/permissão:
- Erro ao ler o arquivo
.envna inicialização. OMCP_VAULT_PATHinválido ou inacessível.- O processo Python não tem permissões para executar ou acessar arquivos.
- Erro ao ler o arquivo
- Exceção não tratada precoce: Ocorre um erro durante a configuração inicial antes de o servidor começar a escutar.
Etapas de solução de problemas:
- Verifique os caminhos no JSON do cliente: Verifique novamente os caminhos absolutos para
commandeargsna configuração JSON do seu cliente. Use barras invertidas escapadas (\\) para caminhos do Windows. - Teste manualmente (etapa crucial):
- Ative o ambiente virtual no seu terminal:
# On Windows .\.venv\Scripts\activate# On Linux/macOS source .venv/bin/activate - Execute o servidor diretamente:
python obsidian_mcp_server/main.py - Observe atentamente se há mensagens de erro impressas diretamente no terminal. Isso ignora o cliente e frequentemente revela a causa raiz (como
ImportError,SyntaxError,FileNotFoundError).
- Ative o ambiente virtual no seu terminal:
- Verifique as dependências: Com o venv ativado, execute
pip checkepip install -r requirements.txt. - Valide
.enve o caminho do cofre: Garanta que.envexista, seja legível e queOMCP_VAULT_PATHesteja correto (use barras normais/). - Revise alterações recentes no código: Verifique se há erros de sintaxe ou problemas em arquivos Python editados recentemente.
Operações de Nota
P: Por que não consigo criar/editar notas em certas pastas? R: Isso pode ser devido a:
- Restrições de segurança de caminho (tentativa de escrever fora do cofre)
- Permissões de pasta
- Bloqueios de arquivo por outros processos
Tente:
- Usar caminhos relativos dentro do seu cofre
- Verificar as permissões da pasta
- Fechar outros programas que possam ter os arquivos abertos
P: Por que minhas atualizações de notas não estão sendo salvas? R: Causas comuns:
- O caminho da nota está incorreto
- O formato do conteúdo é inválido
- A criação do backup falhou
Verifique:
- Se o caminho da nota existe e é acessível
- Se o conteúdo é markdown válido
- Se o diretório de backup tem permissões de escrita
Notas Diárias
P: Por que minhas notas diárias não estão sendo criadas no local correto? R: Verifique:
- Se
OMCP_DAILY_NOTE_LOCATIONestá definido corretamente em.env - Se o caminho usa barras normais
- Se a pasta de destino existe
- Se o formato da data corresponde às configurações do seu cofre
Solução de Problemas Gerais
P: Como verifico se o servidor está funcionando corretamente? R: Execute o cliente de teste:
python test_client.py
Isso realizará uma série de operações e relatará quaisquer problemas.
P: Onde posso encontrar logs de erro? R: Verifique:
- O terminal onde o servidor está em execução
- O diretório de backup para operações com falha
- Os logs de eventos do sistema para problemas de permissão
P: Como faço para redefinir tudo e começar do zero? R: Tente estas etapas:
- Pare o servidor
- Exclua o arquivo
.env - Crie um novo
.enva partir de.env.example - Reinicie o servidor
Contribuições são bem-vindas!