obsidian-bridge
Provides a secure OAuth reverse proxy that allows MCP clients to interact with a self-hosted Obsidian vault, supporting authenticated streamable HTTP and read-only access.
Click on "Install 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., "@obsidian-bridgesearch my vault for notes about the Q3 planning meeting"
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.
GrokBot ↔ Obsidian Bridge
A small, fail-closed OAuth reverse proxy that lets Grok Bot and other compatible MCP clients reach a self-hosted Obsidian vault. The public process terminates owner approval. Authenticated Streamable HTTP is forwarded only to a loopback Optimike Obsidian MCP backend.

This repository defaults to the standard tool profile and
headless-readonly runtime. It contains no real vault, hostname,
credential, private path, or note.
How it works
Clone this repository and run the guided installer.
The installer pins and builds public Optimike Obsidian MCP
v3.0.0, installs the bridge in a local venv, and writes a mode-600 environment file. It does not start the proxy, start Optimike, or touch a vault.You start Optimike yourself on loopback, then start this proxy on loopback, then put HTTPS in front of the proxy.
Grok Bot discovers OAuth, registers a client, and waits for owner approval. After PKCE exchange it calls
/mcp. The proxy strips client secrets and forwards the session to Optimike.
Optimike source is not vendored here. See docs/UPSTREAM.md.
Related MCP server: obsidian-vault-mcp
Requirements
Python 3.11+
Node.js 22.7.5+ and npm
git
A public HTTPS hostname that forwards to
127.0.0.1:8099An Optimike checkout pinned by the installer to tag
v3.0.0(0a40387206a19deb6430f9b61b81fc7a07704717)A vault copy you already manage. This installer never creates, opens, or mutates one.
One command after clone
./scripts/install.sh --non-interactiveThe script refuses root and sudo, never pipes a download into a shell, and never prints the generated owner code. Then inspect health:
python3 scripts/doctor.pyFill the remaining local vault placeholder in .env.local. Start Optimike
yourself with headless-readonly, standard, readonly, production JWT
authentication, and the generated internal secret:
set -a
. ./.env.local
set +a
cd .runtime/upstream
NODE_ENV=production MCP_TRANSPORT_TYPE=http MCP_HTTP_HOST=127.0.0.1 \
MCP_HTTP_PORT=3010 MCP_AUTH_MODE=jwt \
MCP_AUTH_SECRET_KEY="$OBSIDIAN_BRIDGE_UPSTREAM_JWT_SECRET" \
node dist/index.jsIn a second terminal, start the public OAuth proxy:
.venv/bin/python -m obsidian_bridge serveGET /health should return {"status":"ok"}. Do not expose the Python
port directly.
Configure the plugin
python3 scripts/configure_plugin.py https://mcp.example.com/mcpThe generated mcp.json and .mcp.json contain only the public URL.
Do not add an Authorization header. Grok Bot, Codex, and Cursor use
OAuth discovery and PKCE.
Add Composio beside this bridge
Corey Ganim's Grok Bot tip uses Composio Connect to go beyond a client's native connector catalog. Composio describes Connect as one hosted MCP endpoint for 1000+ apps through 7 meta-tools. It is not literally every MCP server, and it is not bundled with this repository.
Keep the two connections separate:
Client | This repository | Optional Composio connection |
Grok Bot | Install the Grok plugin and connect | Add Composio Connect as a second MCP connector |
Cursor | Install the Cursor plugin or add this MCP URL | Add Composio Connect as a second MCP server |
Codex | Install the Codex plugin or add this MCP URL | Prefer Composio's native Codex plugin, or choose Connect MCP explicitly |
The .grok-plugin, .cursor-plugin, and .codex-plugin manifests here install
only the read-only Obsidian bridge. Composio traffic does not pass through the
vault and Composio does not replace this bridge. See the
tutorial for
the complete setup model and safety boundaries.
Security model
single-owner OAuth 2.1 with DCR, S256 PKCE, and rotating refresh tokens
owner code is required on the approval page and is never a bearer token
loopback bind; TLS stays outside this process
the client bearer token is stripped and replaced with a short-lived, separately signed internal JWT before Optimike sees the request
/mcp/fulland non-readonly modes fail closedsecrets stay in a mode-600 local file and out of git, argv, and stdout
Read docs/SECURITY.md and docs/ARCHITECTURE.md before exposing the
endpoint.
Test and audit
python3 -m unittest discover -s tests -v
python3 src/privacy_scan.py --root .
python3 scripts/audit_git_history.pyLicense
This bridge is MIT. Optimike Obsidian MCP remains a separate Apache-2.0
project and is not copied into this tree. See docs/UPSTREAM.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Obsidian vaults — search, memory, link graph, 23 tools, OAuth-protected. Runs locally via Docker or remotely with Obsidian Sync + OAuth 2.1.4301,06317MIT
- AlicenseNot gradedqualityBmaintenanceMulti-tenant remote MCP server that exposes any GitHub-backed Obsidian vault to any MCP client via OAuth authentication.9MIT
- AlicenseNot gradedqualityBmaintenanceActs as a secure OAuth 2.0/2.1 proxy gateway for MCP servers, enabling integration with Claude and ChatGPT platforms.12MIT
- FlicenseDqualityCmaintenanceEnables Claude Desktop to securely search and retrieve knowledge from an Obsidian vault through a stateless MCP interface, with progressive disclosure and gated write capabilities.13
Related MCP Connectors
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Self-hosted federated MCP gateway: one OAuth 2.1 MCP server in front of N apps, user-level scopes.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/iamsupersocks/grokbot-obsidian-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server