Chatgpt Obsidian Mcp Proxy — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Chatgpt Obsidian Mcp Proxy (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A local proxy that lets ChatGPT connect to the Obsidian Local REST API MCP endpoint through a public HTTPS tunnel such as ngrok.
The proxy keeps your Obsidian API key on your machine. ChatGPT connects with No Auth, and this server adds the required Authorization: Bearer ... header before forwarding requests to Obsidian.
Connect ChatGPT to Obsidian so ChatGPT can search, read, create, and append notes using the Obsidian Local REST API MCP server.
There are four moving parts:
| Component | What it does | Example |
|---|---|---|
| ChatGPT | MCP client that wants to use tools | ChatGPT App / Connector |
| ngrok | Creates a public HTTPS URL | https://xxxx.ngrok-free.app |
| Proxy server | Adds the Obsidian API key automatically | http://127.0.0.1:3000 |
| Obsidian | Stores and manages notes | https://127.0.0.1:27124 |
flowchart LR
A[ChatGPT App] -->|No Auth| B[ngrok HTTPS URL]
B --> C[Local Proxy Server :3000]
C -->|Adds Authorization Bearer API Key| D[Obsidian Local REST API :27124]
D --> E[(Obsidian Vault)]Do not paste the Obsidian API key into ChatGPT OAuth fields.
Obsidian Local REST API uses a bearer token:
Authorization: Bearer YOUR_OBSIDIAN_API_KEYChatGPT OAuth fields are for real OAuth URLs such as auth URL, token URL, and registration URL. They are not for static API keys.
Correct setup:
ChatGPT Authentication = No Auth
Proxy Server = Adds Obsidian API Key in the backgroundDefault Obsidian Local REST API endpoint:
https://127.0.0.1:27124MCP endpoint:
https://127.0.0.1:27124/mcp/Install Node.js LTS.
Check installation:
node -v
npm -vExpected result:
node version should appear
npm version should appearClone or download this repository, then open PowerShell in the project folder.
For example, if you cloned the repo into C:\Projects, go to:
cd "C:\Projects\chatgpt-obsidian-mcp-proxy"npm install.env FileCopy-Item .env.example .envEdit .env and set:
OBSIDIAN_API_KEY=your_local_rest_api_key
OBSIDIAN_TARGET=https://127.0.0.1:27124
PORT=3000Do not commit .env. It contains the secret token for your vault.
Install and sign in to the ChatGPT Desktop app before creating the connector.
This setup uses ChatGPT Apps / Connectors in Developer Mode, which should be configured from the desktop app.
Use this every time you want ChatGPT to connect to Obsidian.
Test Obsidian directly:
curl.exe -k https://127.0.0.1:27124/When the API key is included by the proxy later, the response should show:
"authenticated": trueOpen PowerShell in the project folder:
cd "C:\Projects\chatgpt-obsidian-mcp-proxy"Start the proxy:
npm startExpected output:
Obsidian MCP proxy running on http://127.0.0.1:3000
Forwarding to https://127.0.0.1:27124Keep this PowerShell window open. The proxy stops if you close the window or press Ctrl+C.
Open a second PowerShell window:
curl.exe http://127.0.0.1:3000/Expected output should contain:
"authenticated": trueThen test the MCP endpoint:
curl.exe http://127.0.0.1:3000/mcp/ -H "Accept: text/event-stream"Possible behavior:
Open a third PowerShell window.
If ngrok.exe is in your current folder:
.\ngrok.exe http http://127.0.0.1:3000If ngrok is available globally:
ngrok http http://127.0.0.1:3000Expected output:
Forwarding https://xxxx.ngrok-free.app -> http://127.0.0.1:3000Copy the HTTPS URL.
Example:
https://3a94-xxxx.ngrok-free.appYour ChatGPT MCP URL becomes:
https://3a94-xxxx.ngrok-free.app/mcp/Always add /mcp/ at the end when giving the URL to ChatGPT.
Open the ChatGPT Desktop app.
Go to:
ChatGPT > Settings > Apps / Connectors > Developer Mode > Create AppUse:
| Field | Value |
|---|---|
| Name | Obsidian Notes |
| Description | Search, read, create, and append notes in my Obsidian vault. |
| Connection | Server URL |
| Server URL | https://YOUR-NGROK-URL.ngrok-free.app/mcp/ |
| Authentication | No Auth |
Correct:
https://xxxx.ngrok-free.app/mcp/Wrong:
https://xxxx.ngrok-free.app
https://127.0.0.1:27124/mcp/
http://127.0.0.1:3000/mcp/Why:
127.0.0.1.flowchart TD
A[Start Obsidian] --> B[Test https://127.0.0.1:27124]
B --> C[Start Proxy on Port 3000]
C --> D[Test http://127.0.0.1:3000]
D --> E{authenticated true?}
E -->|No| F[Check API key in .env]
E -->|Yes| G[Start ngrok to port 3000]
G --> H[Copy HTTPS ngrok URL]
H --> I[Add /mcp/]
I --> J[Create ChatGPT App with No Auth]
J --> K[Use Obsidian from ChatGPT]Meaning: ChatGPT is asking for OAuth setup.
Fix: Do not use OAuth. Use:
Authentication = No AuthThe proxy handles the Obsidian API key.
/.well-known/... with 404Example:
GET /.well-known/oauth-authorization-server 404
GET /.well-known/openid-configuration 404
GET /.well-known/oauth-protected-resource 404Meaning: ChatGPT is trying OAuth discovery.
Fix: Set ChatGPT Authentication to No Auth and confirm the server URL ends with:
/mcp/POST / 404Meaning: ChatGPT is calling the root path instead of the MCP path.
Fix: Your ChatGPT URL is probably missing /mcp/.
Use:
https://xxxx.ngrok-free.app/mcp/Do not use:
https://xxxx.ngrok-free.appauthenticated: trueRun:
curl.exe http://127.0.0.1:3000/If output shows:
"authenticated": falseCheck:
.env?npm start after changing .env?curl -k Is InvalidPowerShell treats curl as Invoke-WebRequest.
Use:
curl.exe -k https://127.0.0.1:27124/Do not use:
curl -k https://127.0.0.1:27124/text/event-streamExample error:
{"jsonrpc":"2.0","error":{"code":-32000,"message":"Not Acceptable: Client must accept text/event-stream"},"id":null}Meaning: This is actually good. It means the MCP endpoint exists and expects event streaming.
Fix for manual testing:
curl.exe http://127.0.0.1:3000/mcp/ -H "Accept: text/event-stream"To stop the proxy:
Go to the proxy PowerShell window and press Ctrl+C.To stop ngrok:
Go to the ngrok PowerShell window and press Ctrl+C.To fully shut down:
Treat the ngrok URL like a temporary doorway into your Obsidian vault.
.env to GitHub.flowchart LR
A[Wrong Idea] --> B[Paste API key into OAuth fields]
C[Correct Idea] --> D[Use No Auth in ChatGPT]
D --> E[Proxy adds API key]
E --> F[Obsidian accepts request]Start proxy:
cd "C:\Projects\chatgpt-obsidian-mcp-proxy"
npm startTest proxy:
curl.exe http://127.0.0.1:3000/Start ngrok:
ngrok http http://127.0.0.1:3000ChatGPT URL format:
https://YOUR-NGROK-URL.ngrok-free.app/mcp/ChatGPT Authentication:
No Auth.env contains the correct Obsidian API key.3000.curl.exe http://127.0.0.1:3000/ shows authenticated: true.http://127.0.0.1:3000./mcp/.No Auth.ChatGPT
-> ngrok HTTPS URL /mcp/
-> Local proxy on port 3000
-> Obsidian Local REST API on port 27124
-> Obsidian vault notesOnce this works, ChatGPT can help maintain notes, study plans, CTI dashboards, SOC investigation templates, and learning logs directly inside Obsidian.
See docs/runbook.md for the repo-maintained setup runbook.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.