knowledge-to-action-mcp is an MCP server for people whose real project context lives in notes, decisions, roadmaps, and meeting docs, not just code. Most Obsidian MCP servers stop at "read a note" or "search a vault." This one goes further: That means an MCP client can move from: If you work out of Obsidian, your important context is usually spread across: - roadmap notes - meeting notes - decisio
Add this skill
npx mdskills install tac0de/knowledge-to-action-mcpGraph-aware Obsidian integration that transforms notes into structured context packets and actionable plans
1# Knowledge-to-Action MCP23> Turn Obsidian notes into agent-ready context, preview-only plans, and safe repo handoffs.45[](https://github.com/tac0de/knowledge-to-action-mcp/actions/workflows/ci.yml)6[](https://www.npmjs.com/package/@tac0de/knowledge-to-action-mcp)7[](./LICENSE)891011`knowledge-to-action-mcp` is an MCP server for people whose real project context lives in notes, decisions, roadmaps, and meeting docs, not just code.1213Most Obsidian MCP servers stop at "read a note" or "search a vault."1415This one goes further:1617```text18notes -> retrieval -> context packet -> action plan -> repo handoff19```2021That means an MCP client can move from:2223```text24"open this markdown file"25```2627to:2829```text30"understand the note, pull nearby context, summarize risks,31propose next steps, and show which repo files probably matter"32```3334## Why It Matters3536If you work out of Obsidian, your important context is usually spread across:3738- roadmap notes39- meeting notes40- decisions41- linked references42- repo assumptions4344Normal note integrations make an agent read those files.4546`knowledge-to-action-mcp` helps an agent recover the surrounding context and turn it into something actionable without exposing a general shell runner.4748## What Makes It Different4950| Capability | Typical vault MCP | `knowledge-to-action-mcp` |51| --- | --- | --- |52| Read notes | Yes | Yes |53| Search notes | Yes | Yes |54| Follow links / backlinks | Sometimes | Yes |55| Graph-aware context recovery | Rarely | Yes |56| Optional embeddings | Rarely | Yes |57| Agent-ready context packet | No | Yes |58| Preview-only plan from note | No | Yes |59| Note-to-repo handoff | No | Yes |60| General shell access | Sometimes | No |6162## 1-Minute Quickstart6364Install:6566```bash67npm install @tac0de/knowledge-to-action-mcp68```6970Run in graph-only mode:7172```bash73OBSIDIAN_VAULT_ROOT="/path/to/vault" \74npx @tac0de/knowledge-to-action-mcp75```7677Turn on optional embeddings and planning:7879```bash80OBSIDIAN_VAULT_ROOT="/path/to/vault" \81EMBEDDINGS_ENABLED=true \82PLANNING_ENABLED=true \83OPENAI_API_KEY="..." \84npx @tac0de/knowledge-to-action-mcp85```8687Then call:8889- `context.retrieve`90- `context.bundle_for_agent`91- `action.plan_from_note`92- `action.handoff_to_repo`9394See also:9596- sample vault: [`examples/sample-vault/`](./examples/sample-vault/)97- sample outputs: [`examples/sample-output/`](./examples/sample-output/)98- Claude Desktop config example: [`examples/claude-desktop-config.json`](./examples/claude-desktop-config.json)99- VS Code config example: [`examples/vscode-mcp.json`](./examples/vscode-mcp.json)100- Cursor config example: [`examples/cursor-mcp.json`](./examples/cursor-mcp.json)101102## What You Actually Get103104### 1. Obsidian-aware retrieval105106- deterministic note listing, reading, and search107- wikilink resolution108- backlinks109- shared-tag neighbors110- graph-aware context recovery111112### 2. Optional GraphRAG113114When embeddings are enabled, retrieval becomes:115116```text117lexical + graph + semantic rerank118```119120No external graph database is required.121122### 3. Agent-ready context packets123124`context.bundle_for_agent` returns a structured packet instead of dumping raw markdown into a prompt.125126That packet includes:127128- brief129- key facts130- open questions131- risks132- related notes133- repo hints134135### 4. Preview-only action planning136137`action.plan_from_note` turns a note into:138139- summary140- goals141- constraints142- decisions143- open questions144- suggested actions145- handoff prompt146147It does not mutate files.148149### 5. Safe repo handoff150151`action.handoff_to_repo` connects note context to a workspace using:152153- bounded ripgrep queries154- bounded git status155- matched file suggestions156157This is intentionally not a general-purpose shell runner.158159## Example Workflow160161Imagine you have these notes:162163- `roadmap/search.md`164- `meetings/2026-03-07-search-review.md`165- `decisions/search-scope.md`166167And a repo with:168169- `src/search.ts`170- `src/features/search/index.ts`171172This MCP can help an agent:1731741. Retrieve nearby notes with search, backlinks, tags, graph neighbors, and optional embeddings.1752. Compress that note cluster into a structured context packet.1763. Turn the source note into a preview-only action plan.1774. Suggest likely repo files before any edit happens.178179That jump from "read notes" to "prepare action safely" is the whole point.180181## Demo Assets182183If you want something concrete before wiring your own vault:184185- sample vault notes live in [`examples/sample-vault/`](./examples/sample-vault/)186- example `context.bundle_for_agent` output lives in [`examples/sample-output/context.bundle_for_agent.json`](./examples/sample-output/context.bundle_for_agent.json)187- example `action.plan_from_note` output lives in [`examples/sample-output/action.plan_from_note.json`](./examples/sample-output/action.plan_from_note.json)188- example Claude Desktop config lives in [`examples/claude-desktop-config.json`](./examples/claude-desktop-config.json)189190## Public Tools191192### Vault + Graph193194- `vault.list_notes`195- `vault.read_note`196- `vault.search_notes`197- `vault.get_metadata`198- `graph.build`199- `graph.get_neighbors`200- `graph.get_backlinks`201- `context.gather`202203### Retrieval + Planning204205- `embeddings.index_vault`206- `context.retrieve`207- `context.bundle_for_agent`208- `action.plan_from_note`209- `action.handoff_to_repo`210211### Workspace Inspection212213- `exec.list_capabilities`214- `exec.rg_search`215- `exec.list_dir`216- `exec.git_status`217218## Example Output219220`context.bundle_for_agent`:221222```json223{224 "brief": "Implement search using the existing dashboard flow.",225 "source": "roadmap/search.md",226 "keyFacts": [227 "Title: Search",228 "Tags: roadmap,search"229 ],230 "openQuestions": [231 "Where is the current search entrypoint?"232 ],233 "risks": [234 "Assumption: repo layout may differ from note context"235 ],236 "repoHints": {237 "matchedFiles": [238 "src/search.ts",239 "src/features/search/index.ts"240 ],241 "suggestedQueries": [242 "Search",243 "search"244 ]245 }246}247```248249`action.plan_from_note`:250251```json252{253 "source": "roadmap/search.md",254 "summary": "Implement search using the existing dashboard flow.",255 "goals": [256 "Ship dashboard search"257 ],258 "constraints": [259 "No mutation without explicit approval"260 ],261 "openQuestions": [262 "Where is the current search entrypoint?"263 ],264 "suggestedActions": [265 "Review matched repo files",266 "Resolve open questions before implementation"267 ],268 "generationMode": "deterministic"269}270```271272## Configuration273274### Required275276- `OBSIDIAN_VAULT_ROOT`277278### Optional embeddings279280- `EMBEDDINGS_ENABLED=false`281- `EMBEDDING_PROVIDER=openai`282- `EMBEDDING_MODEL=text-embedding-3-small`283- `EMBEDDING_SQLITE_PATH=.knowledge-to-action-mcp/index.sqlite`284- `OPENAI_API_KEY=...`285286### Optional planning287288- `PLANNING_ENABLED=false`289- `PLANNING_PROVIDER=openai`290- `PLANNING_MODEL=gpt-4.1-mini`291292### Optional workspace inspection293294- `EXECUTION_ENABLED=false`295- `EXECUTION_CAPABILITIES=workspace.search,workspace.inspect,workspace.git_status`296- `EXECUTION_TIMEOUT_MS=5000`297- `EXECUTION_MAX_OUTPUT_BYTES=32768`298299## Install In MCP Clients300301Example stdio config:302303```json304{305 "command": "npx",306 "args": ["-y", "@tac0de/knowledge-to-action-mcp"],307 "env": {308 "OBSIDIAN_VAULT_ROOT": "/path/to/vault"309 }310}311```312313### VS Code314315Add to `.vscode/mcp.json`:316317```json318{319 "servers": {320 "knowledge-to-action": {321 "command": "npx",322 "args": ["-y", "@tac0de/knowledge-to-action-mcp"],323 "env": {324 "OBSIDIAN_VAULT_ROOT": "/path/to/vault"325 }326 }327 }328}329```330331### Cursor332333Add to `.cursor/mcp.json`:334335```json336{337 "mcpServers": {338 "knowledge-to-action": {339 "command": "npx",340 "args": ["-y", "@tac0de/knowledge-to-action-mcp"],341 "env": {342 "OBSIDIAN_VAULT_ROOT": "/path/to/vault"343 }344 }345 }346}347```348349## Security Boundary350351This package is designed to be useful without turning into a local shell bomb.352353- vault access is read-only354- plan generation is preview-only355- embeddings are optional and local356- repo inspection is bounded to the configured working directory357- no generic `bash.exec` or arbitrary command tool is exposed358359## Good Fit360361Use this project if you want:362363- Obsidian-native GraphRAG364- note-to-action workflows for agents365- structured context instead of giant markdown dumps366- repo-aware handoff without broad execution access367368## Not Trying To Be369370- a general purpose agent runtime371- a write-enabled automation framework372- a hosted knowledge platform373- a vector database product374375## Compatibility376377- package name: `@tac0de/knowledge-to-action-mcp`378- legacy CLI alias: `obsidian-mcp`379- Node.js 20+380381## Status382383`v2.1.1` is usable now:384385- typecheck passes386- unit and integration tests pass387- npm pack dry-run passes388389The project is still early, but the main workflow is already working.390391## License392393MIT394
Full transparency — inspect the skill content before installing.