Obsidian via REST

Acesse e gerencie seu cofre do Obsidian por meio de uma API REST local.

Documentação

Implantação / Uso

Ask DeepWiki NPM Version GitHub Stars GitHub Forks NPM Downloads Docker Hub obsidian-mcp Docker Hub obsidian-vnc License: MIT

Status de CI/CD

NPM (npmjs.org) NPM (GitHub)

Docker (GitHub) Docker (Docker Hub)

Screenshots Cleanup


  • mcp-obsidian
    • Implantação / Uso
    • Status de CI/CD
    • Ferramentas e Recursos MCP
      * Ferramentas
      * Recursos
      * Teste Rápido
    • Configurar MCP
      * Configuração Multi-URL (Recomendado)
      * Configuração de Transporte HTTP
      * Configuração Desacoplada com Autenticação
      * Configuração de Transporte Stdio
      * Configuração Legada de URL Única
      * Endpoint de Saúde
    • Configuração de Ferramentas CLI
      * Claude Code CLI
      * Gemini CLI
      * OpenCode CLI
      * Kilo Code CLI
      * Codex CLI
      * GitHub Copilot CLI
      * Referência Rápida
    • Configuração e Solução de Problemas
      * Configuração
      * Verifique se a API REST do Obsidian está em execução (Windows Host, MacOS, Linux)
      * WSL2, Docker hospedado no Ubuntu
      * Verificar Firewall do Windows
      * Desabilitar/Habilitar Firewall
      * Verificar Conectividade no Contêiner BusyBox
    • Obsidian em Docker

Ferramentas e Recursos MCP

Este servidor MCP expõe as seguintes ferramentas e recursos para assistentes de IA:

Ferramentas

ToolDescriptionParameters
get_note_contentRetrieve content and metadata of an Obsidian notefilePath (string) - Path to the note
obsidian_searchSearch notes using a query stringquery (string) - Search query
obsidian_semantic_searchSemantic search for notesquery (string) - Search query

Recursos

ResourceURI PatternDescription
Obsidian Noteobsidian://{path}Access notes via URI (e.g., obsidian://Daily/2025-01-16.md)

Teste Rápido

1. Set your Obsidian API key

export OBSIDIAN_API_KEY="your-obsidian-rest-api-key"

2. Add MCP server and test (Claude Code)

claude mcp add obsidian -- bunx -y @oleksandrkucherenko/mcp-obsidian claude "Search my Obsidian vault for monitoring tools, summarize findings"

2. Alternative: Codex CLI

codex mcp add obsidian --command "bunx -y @oleksandrkucherenko/mcp-obsidian" codex "Find notes about logging frameworks and create a comparison table"

Exemplo de caso de uso: "Encontre todas as ferramentas no meu cofre Obsidian para rastrear logs e métricas, faça um relatório resumido" — a IA pesquisa seu cofre, encontra notas sobre OpenTelemetry, Datadog, Prometheus, etc., e gera um resumo estruturado.

Para outras ferramentas CLI (Gemini, OpenCode, Kilo Code, Copilot), consulte o Guia de Teste Manual.

Gemini CLI Example

Configurar MCP

Configuração Multi-URL (Recomendado)

Use API_URLS para failover automático e auto-recuperação. O servidor testa todas as URLs em paralelo, seleciona a mais rápida e reconecta automaticamente em caso de falha.

{ "mcpServers": { "obsidian": { "command": "docker", "args": [ "run", "--name", "mcp-obsidian", "--rm", "-i", // Keep STDIN open for stdio transport "-p", "3000:3000", "-e", "API_KEY", "-e", "API_URLS", "-e", "DEBUG", // for logs "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest" ], "env": { "API_KEY": "<secret_key>", // JSON array - automatically tests and selects fastest URL "API_URLS": "["https://127.0.0.1:27124","https://172.26.32.1:27124","https://host.docker.internal:27124"]", "DEBUG": "mcp:*" } } } }

Recursos de Auto-Recuperação:

  • ✅ Teste paralelo de URLs na inicialização
  • ✅ Seleção automática da URL mais rápida
  • ✅ Monitoramento de saúde a cada 30 segundos
  • ✅ Failover automático em caso de perda de conexão
  • ✅ Backoff exponencial para evitar oscilações

Transportes disponíveis:

  • stdio - Entrada/saída padrão (padrão, melhor para clientes MCP locais)
  • http - HTTP JSON-RPC com streaming SSE (melhor para acesso remoto)

Exemplo WSL2:

Determine automaticamente o IP do gateway WSL

export WSL_GATEWAY_IP=$(ip route show | grep -i default | awk '{ print $3}')

Configure com múltiplas URLs de fallback

API_URLS='["https://127.0.0.1:27124", "https://'$WSL_GATEWAY_IP':27124", "https://host.docker.internal:27124"]'

Configuração de Transporte HTTP

O servidor MCP suporta transporte HTTP para acesso remoto com failover automático de URL:

{ "mcpServers": { "obsidian-http": { "command": "docker", "args": [ "run", "--name", "mcp-obsidian-http", "--rm", "-p", "3000:3000", "-e", "API_KEY", "-e", "API_URLS", "-e", "MCP_HTTP_PATH", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest" ], "env": { "API_KEY": "<secret_key>", "API_URLS": "["https://127.0.0.1:27124","https://172.26.32.1:27124","https://host.docker.internal:27124"]", "MCP_HTTP_PATH": "/mcp" // caminho do endpoint (padrão: /mcp) } } } }

Configuração Desacoplada com Autenticação

execute o servidor MCP no docker separadamente do IDE

docker run --name mcp-obsidian-http --rm
-p 3000:3000
-e API_KEY="<secret_key>"
-e API_URLS="${API_URLS}"
-e MCP_HTTP_TOKEN=
ghcr.io/oleksandrkucherenko/obsidian-mcp:latest

{ "mcpServers": { "obsidian": { "type": "streamable-http", "url": "http://localhost:3000/mcp", "headers": { "Authorization": "Bearer " }
} } }

Os clientes devem incluir o cabeçalho Authorization:

Authorization: Bearer your-secret-token-here

Configuração de Transporte Stdio

Para desenvolvimento local com transporte stdio (padrão):

{ "mcpServers": { "obsidian": { "command": "docker", "args": [ "run", "--name", "mcp-obsidian-windsurf", "--interactive", "--rm", "-e", "API_KEY", "-e", "API_URLS", "-e", "DEBUG", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest" ], "env": { "API_KEY": "<secret_key>", "API_URLS": "["https://127.0.0.1:27124","https://172.26.32.1:27124"]", "DEBUG": "mcp:*" // padrão: logs desabilitados } } } }

  • --rm - Remove automaticamente o contêiner e seus volumes anônimos associados ao sair
  • -i, --interactive - Mantém o STDIN aberto
  • -e, --env - Define variáveis de ambiente
  • --name string - Atribui um nome ao contêiner
  • -p, --publish - Publica a porta do contêiner no host
  • Lançamentos de Pacotes NPM
  • Lançamentos de Imagens Docker

Configuração Legada de URL Única

Para compatibilidade retroativa, você ainda pode usar configuração de URL única com API_HOST e API_PORT:

{ "mcpServers": { "obsidian": { "command": "docker", "args": [ "run", "--name", "mcp-obsidian", "--rm", "-i", "-e", "API_KEY", "-e", "API_HOST", "-e", "API_PORT", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest" ], "env": { "API_KEY": "<secret_key>", "API_HOST": "https://172.26.32.1", // URL única sem failover "API_PORT": "27124" } } } }

Nota: A configuração de URL única não fornece failover automático nem monitoramento de saúde. Use API_URLS para implantações em produção.

Endpoint de Saúde

Quando o transporte HTTP está habilitado, o servidor expõe um endpoint de verificação de saúde em /health:

curl http://localhost:3000/health

Resposta:

{ "status": "healthy", "timestamp": "2025-01-12T12:00:00.000Z", "transport": "http", "authEnabled": false }

Para status de saúde abrangente, incluindo a conexão com a API do Obsidian e todos os transportes, você pode usar a função getHealthStatus() que retorna:

{ "healthy": true, "obsidian": { "connected": true, "url": "https://obsidian:27124", "lastCheck": 1705065600000 }, "transports": { "stdio": { "running": true, "enabled": true }, "http": { "running": true, "enabled": true } }, "uptime": 3600, "timestamp": 1705065600000 }

Configuração de Ferramentas CLI

Esta seção mostra como configurar ferramentas CLI populares de IA para usar o servidor MCP Obsidian.

MacOs ou Linux

curl -fsSL https://bun.sh/install | bash

Windows

powershell -c "irm bun.sh/install.ps1 | iex"

Claude Code CLI

Docker:

Crie a configuração mcp.json

cat > mcp.json << 'EOF' { "mcpServers": { "obsidian": { "command": "docker", "args": ["run", "--rm", "-i", "-e", "API_KEY", "-e", "API_URLS", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest"], "env": { "API_KEY": "", "API_URLS": "["https://host.docker.internal:27124"]" } } } } EOF

Execute o Claude com a configuração MCP

claude --mcp-config ./mcp.json

NPX/Bunx:

cat > mcp.json << 'EOF' { "mcpServers": { "obsidian": { "command": "bunx", "args": ["-y", "@oleksandrkucherenko/mcp-obsidian"], "env": { "API_KEY": "", "API_URLS": "["https://127.0.0.1:27124"]" } } } } EOF

claude --mcp-config ./mcp.json

Gemini CLI

Docker:

gemini mcp add
-e API_KEY=
-e API_URLS='["https://host.docker.internal:27124"]'
obsidian
docker run --rm -i ghcr.io/oleksandrkucherenko/obsidian-mcp:latest

NPX/Bunx:

gemini mcp add
-e API_KEY=
-e API_URLS='["https://127.0.0.1:27124"]'
obsidian
bunx -y @oleksandrkucherenko/mcp-obsidian

Transporte HTTP (servidor remoto):

gemini mcp add --transport http obsidian-http http://localhost:3000/mcp

Listar e gerenciar servidores:

gemini mcp list gemini mcp remove obsidian

OpenCode CLI

Crie opencode.json na raiz do seu projeto:

Docker:

{ "mcp": { "obsidian": { "type": "local", "command": ["docker", "run", "--rm", "-i", "-e", "API_KEY", "-e", "API_URLS", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest"], "environment": { "API_KEY": "{env:API_KEY}", "API_URLS": "["https://host.docker.internal:27124"]" }, "enabled": true } } }

NPX/Bunx:

{ "mcp": { "obsidian": { "type": "local", "command": ["bunx", "-y", "@oleksandrkucherenko/mcp-obsidian"], "environment": { "API_KEY": "{env:API_KEY}", "API_URLS": "["https://127.0.0.1:27124"]" }, "enabled": true } } }

Transporte HTTP:

{ "mcp": { "obsidian-http": { "type": "remote", "url": "http://localhost:3000/mcp", "enabled": true } } }

Kilo Code CLI

Crie .kilocode/mcp.json no seu projeto ou ~/.kilocode/cli/global/settings/mcp_settings.json globalmente:

Docker:

{ "mcpServers": { "obsidian": { "command": "docker", "args": ["run", "--rm", "-i", "-e", "API_KEY", "-e", "API_URLS", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest"], "env": { "API_KEY": "", "API_URLS": "["https://host.docker.internal:27124"]" } } } }

NPX/Bunx:

{ "mcpServers": { "obsidian": { "command": "bunx", "args": ["-y", "@oleksandrkucherenko/mcp-obsidian"], "env": { "API_KEY": "", "API_URLS": "["https://127.0.0.1:27124"]" } } } }

{ "mcpServers": { "obsidian-http": { "type": "streamable-http", "url": "http://localhost:3000/mcp", "headers": { "Authorization": "Bearer " } } } }

Codex CLI

Docker:

Registre o servidor MCP

codex mcp add obsidian
--command "docker run --rm -i -e API_KEY -e API_URLS ghcr.io/oleksandrkucherenko/obsidian-mcp:latest"
--env API_KEY=
--env 'API_URLS=["https://host.docker.internal:27124"]'

NPX/Bunx: codex mcp add obsidian
--command "bunx -y @oleksandrkucherenko/mcp-obsidian"
--env API_KEY=
--env 'API_URLS=["https://127.0.0.1:27124"]'

GitHub Copilot CLI

Crie ~/.copilot/mcp-config.json (ou .copilot/mcp-config.json na raiz do repositório):

Docker:

{ "mcpServers": { "obsidian": { "type": "local", "command": "docker", "args": ["run", "--rm", "-i", "-e", "API_KEY", "-e", "API_URLS", "ghcr.io/oleksandrkucherenko/obsidian-mcp:latest"], "env": { "API_KEY": "${OBSIDIAN_API_KEY}", "API_URLS": "["https://host.docker.internal:27124"]" }, "tools": ["*"] } } }

NPX/Bunx:

{ "mcpServers": { "obsidian": { "type": "local", "command": "bunx", "args": ["-y", "@oleksandrkucherenko/mcp-obsidian"], "env": { "API_KEY": "${OBSIDIAN_API_KEY}", "API_URLS": "["https://127.0.0.1:27124"]" }, "tools": ["*"] } } }

Nota: O Copilot CLI v0.0.340+ requer a sintaxe ${VAR} para expansão de variáveis de ambiente. Defina OBSIDIAN_API_KEY no seu shell antes de executar.

Referência Rápida

Ferramenta CLIArquivo de ConfiguraçãoSuporte a DockerTransporte HTTP
Claude Codemcp.json
Geminisettings.json
OpenCodeopencode.json
Kilo Code.kilocode/mcp.json
Codexcomandos CLI
Copilot~/.copilot/mcp-config.json

Para testes e verificação detalhados, consulte o Guia de Testes Manuais.

Configuração e Solução de Problemas

Configuração

  • Execute o aplicativo Obsidian Desktop e habilite a API REST Local nas Configurações.

Obsidian Local REST API Setup

Essa configuração permitirá que você se conecte à API REST Local a partir de qualquer interface de rede (não apenas localhost, o que é essencial para a configuração do WSL2).

  • Copie a chave de API das Configurações do Obsidian; você precisará dela para a configuração do MCP.
  • Verifique se a API REST Local do Obsidian está em execução e acessível a partir da sua máquina.
  • O próximo passo é sempre verificar a configuração de rede na sua máquina (regras de firewall, etc.).

Verifique se a API REST do Obsidian está em execução (Windows Host, MacOS, Linux)

Execute no terminal CMD do Windows:

windows CMD, verify that port is listening (that rest api is running)

netstat -an | findstr 27124

Expected output:

TCP 0.0.0.0:27124 0.0.0.0:0 LISTENING

Verify that Obsidian Local REST API is working

curl --insecure https://localhost:27124 wget --no-check-certificate -S https://localhost:27124 http --verify=no https://localhost:27124

Resposta esperada da API REST:

{ "status": "OK", "manifest": { "id": "obsidian-local-rest-api", "name": "Local REST API", "version": "3.2.0", "minAppVersion": "0.12.0", "description": "Get, change or otherwise interact with your notes in Obsidian via a REST API.", "author": "Adam Coddington", "authorUrl": "https://coddingtonbear.net/", "isDesktopOnly": true, "dir": ".obsidian/plugins/obsidian-local-rest-api" }, "versions": { "obsidian": "1.8.10", "self": "3.2.0" }, "service": "Obsidian Local REST API", "authenticated": false }

WSL2, Docker hospedado no Ubuntu

graph LR subgraph "Windows Machine" obs("Obsidian Application")

  subgraph "WSL2"
    subgraph "Ubuntu"
      subgraph "Docker"
        mcp("mcp-obsidian:latest")
      end
    end
  end

  firewall(["Windows Firewall"]) -->|27124| obs

  mcp -->|https://$WSL_GATEWAY_IP:27124| firewall

  IDE -.->|MCP Server Tools| mcp
end

Execute dentro do terminal Ubuntu do WSL2:

export WSL_GATEWAY_IP=$(ip route show | grep -i default | awk '{ print $3}') echo $WSL_GATEWAY_IP # expected something like: 172.26.32.1

Verify that Obsidian Local REST API is working

curl --insecure https://$WSL_GATEWAY_IP:27124 wget --no-check-certificate -S https://$WSL_GATEWAY_IP:27124 http --verify=no https://$WSL_GATEWAY_IP:27124

Verifique o Firewall do Windows

Execute a GUI e configure as regras manualmente:

Windows Defender Firewall / Inbound Rules. Press Win+R and type WF.msc or firewall.cpl

WF.msc firewall.cpl # and then press 'Advanced settings'

Ou execute no Windows PowerShell como Administrador:

Add firewall rule to allow port 27124 (Run in Admin PowerShell)

New-NetFirewallRule -DisplayName "WSL2 Obsidian REST API" -Direction Inbound -LocalPort 27123,27124 -Protocol TCP -Action Allow

Ou execute no terminal CMD do Windows:

check firewall rules (CMD) that manage 27124 port

netsh advfirewall firewall show rule name=all | findstr /C:"Rule Name" /C:"LocalPort" /C:"RemotePort" | findstr /C:"27124"

display rules that has WSL2 keyword in own name

netsh advfirewall firewall show rule name=all | grep -A 13 WSL2

display rule definition by port number (4 line after, 9 lines before)

netsh advfirewall firewall show rule name=all | grep -A 4 -B 9 27124

Desabilitar/Habilitar Firewall

Execute no Windows PowerShell como Administrador:

Temporarily turn off firewall (for testing ONLY, not recommended for regular use)

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

Restore Firewall state

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True

Verifique a Conectividade no Contêiner BusyBox

Estas etapas nos permitem confirmar que a configuração de rede está correta e que o contêiner pode se conectar à API REST Local.

Execute dentro do terminal Ubuntu do WSL2:

export WSL_GATEWAY_IP=$(ip route | grep default | awk '{print $3}') echo "Windows host IP from WSL2: $WSL_GATEWAY_IP"

Output:

Windows host IP from WSL2: 172.26.32.1

run docker container to verify the connectivity from Docker inside

docker run --rm -it --network=host busybox sh

inside the container run:

which wget

/bin/wget

export WINDOWS_HOST_IP="172.26.32.1" echo $WINDOWS_HOST_IP

172.26.32.1

try to connect to the Local REST API

wget -qO- --no-check-certificate "https://$WINDOWS_HOST_IP:27124" wget -qO- --no-check-certificate https://172.26.32.1:27124

Obsidian Dockerizado

Obsidian Dockerizado