How to Integrate Claude With Obsidian (Plugins & API)
Obsidian has no official Claude plugin, so integrating the two means either configuring a community plugin that accepts a custom API endpoint, or writing a small script that calls Claude directly from your vault. Both routes work well, and which one you pick depends on whether you want a chat sidebar inside Obsidian or automated actions (summarizing, tagging, cleaning up meeting notes) triggered from your notes.
This guide covers the practical setup: which plugins to use, how to wire up an API key, and how to build a simple Templater workflow that sends note content to Claude and writes the response back into your vault.
Option 1: Use a community plugin that supports custom API endpoints
The fastest path is a plugin from the Obsidian community store that already speaks to chat completion APIs. A few worth knowing:
- BMO Chatbot — adds a chat sidebar and lets you point it at a custom base URL and API key, so it's not locked to one provider.
- Text Generator — generates text inline (summaries, rewrites, outlines) using a configurable API endpoint and model name.
- Smart Connections — focuses on semantic search across your vault, with an optional chat feature that uses your API key.
To set any of these up:
- Install the plugin from Settings → Community plugins → Browse.
- Open the plugin's settings and find the field for API endpoint / base URL and API key.
- Enter your key and the model name you want to use.
- Test with a small note before running it against your whole vault.
The catch: most of these plugins were built against OpenAI's API shape first, and Anthropic support varies by plugin version. If a plugin only accepts an OpenAI-compatible endpoint, you have two choices — wait for the maintainer to add native Anthropic support, or route your requests through a service that gives Claude a standard HTTPS API key and messages endpoint, which is exactly what SubToAPI does. It turns your existing Claude access into a sub_live_... key you can drop into any plugin field that expects an API key and base URL, without you managing separate provider auth for each tool.
Option 2: Build a custom Templater script
If you want more control — say, summarizing a daily note, extracting action items, or auto-tagging — a Templater or QuickAdd script gives you that without depending on a third-party plugin's UI limitations.
Basic structure with a JavaScript function inside Templater:
async function askClaude(prompt) {
const response = await fetch("https://api.subtoapi.app/v1/messages", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SUBTOAPI_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "claude-sonnet-4-5",
max_tokens: 500,
messages: [{ role: "user", content: prompt }]
})
});
const data = await response.json();
return data.content[0].text;
}
You'd call this from a Templater user script bound to a command, passing in the active note's text as the prompt (for example, "Summarize this note in 3 bullet points" plus the note content). The response gets inserted at the cursor or appended under a ## Summary heading.
For anyone unfamiliar with the request/response shape, the docs/messages reference walks through the payload fields, and docs/quickstart has a minimal working example you can adapt directly into a Templater script.
Option 3: Automate note processing outside Obsidian
If you'd rather not run scripts inside the app, a lightweight external script (Node, Python, whatever) watching your vault folder is often more reliable than an in-app plugin, especially for batch jobs like:
- Tagging every new daily note with topics extracted from its content
- Generating a weekly digest from all notes created that week
- Cleaning up voice-transcribed meeting notes into structured markdown
A minimal Node script using SubToAPI:
import fs from "fs";
const note = fs.readFileSync("./vault/2024-06-01.md", "utf8");
const res = await fetch("https://api.subtoapi.app/v1/messages", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SUBTOAPI_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "claude-sonnet-4-5",
max_tokens: 300,
messages: [{
role: "user",
content: `Extract action items as a markdown checklist:\n\n${note}`
}]
})
});
const { content } = await res.json();
fs.appendFileSync("./vault/2024-06-01.md", `\n\n## Action Items\n${content[0].text}`);
Run this on a cron job or a file-watcher, and your vault gets processed without opening Obsidian at all. If you're processing longer notes or want the response to appear incrementally rather than all at once, streaming is worth setting up — see docs/streaming for the SSE format.
Why route through an API layer instead of raw provider access
If you already pay for Claude, wiring plugins directly to a provider account often means juggling separate keys, rate limits, and billing per tool. Running everything through a single API key — one that plugins, scripts, and any other tool you build later can all share — keeps usage in one dashboard and avoids re-authenticating every integration separately. That's the specific problem SubToAPI solves: a stable sub_live_... key, usage metadata per request, and support for tool use if you want Claude to call functions from within a Templater script (see docs/tools). Plans start at Solo €9/month, with Team and Scale tiers for shared vaults and multi-seat setups — full breakdown at pricing, and you can try it from signup.
Practical tips once it's running
- Keep prompts scoped. Sending your entire vault to Claude in one request is slow and expensive — process one note or one folder at a time.
- Cache summaries. Don't regenerate a summary every time a note is opened; trigger it on save or on a manual command.
- Watch your context window. Long notes with embedded images or large tables eat tokens fast — strip non-text content before sending.
- Version your prompts. Keep the prompt templates you use in a separate note or config file so you can tweak wording without touching the script logic.
Questions
Is there an official Claude plugin for Obsidian? No. Integration happens through community plugins that support custom API endpoints (like BMO Chatbot or Text Generator) or through custom Templater/QuickAdd scripts that call the API directly.
Which Obsidian plugin works best with Claude? BMO Chatbot and Text Generator are the most flexible since they let you set a custom base URL and API key rather than hardcoding a single provider, which is what makes Claude compatibility possible.
Do I need a developer API key to integrate Claude with Obsidian? You need some form of API key to call Claude programmatically. If you already have Claude access and want a simple HTTPS key without setting up separate provider billing, a service like SubToAPI provides that — see docs/quickstart to get started.