knowledge-to-action-mcp
Provides bounded git status inspection and file matching to connect note context to repository files, enabling safe repo handoff.
Provides tools for retrieving and gathering context from Obsidian notes, including listing, reading, searching, backlinks, graph neighbors, and optional embeddings-based retrieval. It turns notes into structured context packets and action plans.
Uses OpenAI's embedding models and planning models to enable semantic search and preview-only action planning from Obsidian notes.
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., "@knowledge-to-action-mcpCreate an action plan from my roadmap note about search"
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.
Knowledge-to-Action MCP
Turn Obsidian notes into agent-ready context, preview-only plans, and safe repo handoffs.
![]()
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:
notes -> retrieval -> context packet -> action plan -> repo handoffThat means an MCP client can move from:
"open this markdown file"to:
"understand the note, pull nearby context, summarize risks,
propose next steps, and show which repo files probably matter"Why It Matters
If you work out of Obsidian, your important context is usually spread across:
roadmap notes
meeting notes
decisions
linked references
repo assumptions
Normal note integrations make an agent read those files.
knowledge-to-action-mcp helps an agent recover the surrounding context and turn it into something actionable without exposing a general shell runner.
Related MCP server: mcp-obsidian-vault
What Makes It Different
Capability | Typical vault MCP |
|
Read notes | Yes | Yes |
Search notes | Yes | Yes |
Follow links / backlinks | Sometimes | Yes |
Graph-aware context recovery | Rarely | Yes |
Optional embeddings | Rarely | Yes |
Agent-ready context packet | No | Yes |
Preview-only plan from note | No | Yes |
Note-to-repo handoff | No | Yes |
General shell access | Sometimes | No |
1-Minute Quickstart
Install:
npm install @tac0de/knowledge-to-action-mcpRun in graph-only mode:
OBSIDIAN_VAULT_ROOT="/path/to/vault" \
npx @tac0de/knowledge-to-action-mcpTurn on optional embeddings and planning:
OBSIDIAN_VAULT_ROOT="/path/to/vault" \
EMBEDDINGS_ENABLED=true \
PLANNING_ENABLED=true \
OPENAI_API_KEY="..." \
npx @tac0de/knowledge-to-action-mcpThen call:
context.retrievecontext.bundle_for_agentaction.plan_from_noteaction.handoff_to_repo
See also:
sample vault:
examples/sample-vault/sample outputs:
examples/sample-output/Claude Desktop config example:
examples/claude-desktop-config.jsonVS Code config example:
examples/vscode-mcp.jsonCursor config example:
examples/cursor-mcp.json
What You Actually Get
1. Obsidian-aware retrieval
deterministic note listing, reading, and search
wikilink resolution
backlinks
shared-tag neighbors
graph-aware context recovery
2. Optional GraphRAG
When embeddings are enabled, retrieval becomes:
lexical + graph + semantic rerankNo external graph database is required.
3. Agent-ready context packets
context.bundle_for_agent returns a structured packet instead of dumping raw markdown into a prompt.
That packet includes:
brief
key facts
open questions
risks
related notes
repo hints
4. Preview-only action planning
action.plan_from_note turns a note into:
summary
goals
constraints
decisions
open questions
suggested actions
handoff prompt
It does not mutate files.
5. Safe repo handoff
action.handoff_to_repo connects note context to a workspace using:
bounded ripgrep queries
bounded git status
matched file suggestions
This is intentionally not a general-purpose shell runner.
Example Workflow
Imagine you have these notes:
roadmap/search.mdmeetings/2026-03-07-search-review.mddecisions/search-scope.md
And a repo with:
src/search.tssrc/features/search/index.ts
This MCP can help an agent:
Retrieve nearby notes with search, backlinks, tags, graph neighbors, and optional embeddings.
Compress that note cluster into a structured context packet.
Turn the source note into a preview-only action plan.
Suggest likely repo files before any edit happens.
That jump from "read notes" to "prepare action safely" is the whole point.
Demo Assets
If you want something concrete before wiring your own vault:
sample vault notes live in
examples/sample-vault/example
context.bundle_for_agentoutput lives inexamples/sample-output/context.bundle_for_agent.jsonexample
action.plan_from_noteoutput lives inexamples/sample-output/action.plan_from_note.jsonexample Claude Desktop config lives in
examples/claude-desktop-config.json
Public Tools
Vault + Graph
vault.list_notesvault.read_notevault.search_notesvault.get_metadatagraph.buildgraph.get_neighborsgraph.get_backlinkscontext.gather
Retrieval + Planning
embeddings.index_vaultcontext.retrievecontext.bundle_for_agentaction.plan_from_noteaction.handoff_to_repo
Workspace Inspection
exec.list_capabilitiesexec.rg_searchexec.list_direxec.git_status
Example Output
context.bundle_for_agent:
{
"brief": "Implement search using the existing dashboard flow.",
"source": "roadmap/search.md",
"keyFacts": [
"Title: Search",
"Tags: roadmap,search"
],
"openQuestions": [
"Where is the current search entrypoint?"
],
"risks": [
"Assumption: repo layout may differ from note context"
],
"repoHints": {
"matchedFiles": [
"src/search.ts",
"src/features/search/index.ts"
],
"suggestedQueries": [
"Search",
"search"
]
}
}action.plan_from_note:
{
"source": "roadmap/search.md",
"summary": "Implement search using the existing dashboard flow.",
"goals": [
"Ship dashboard search"
],
"constraints": [
"No mutation without explicit approval"
],
"openQuestions": [
"Where is the current search entrypoint?"
],
"suggestedActions": [
"Review matched repo files",
"Resolve open questions before implementation"
],
"generationMode": "deterministic"
}Configuration
Required
OBSIDIAN_VAULT_ROOT
Optional embeddings
EMBEDDINGS_ENABLED=falseEMBEDDING_PROVIDER=openaiEMBEDDING_MODEL=text-embedding-3-smallEMBEDDING_SQLITE_PATH=.knowledge-to-action-mcp/index.sqliteOPENAI_API_KEY=...
Optional planning
PLANNING_ENABLED=falsePLANNING_PROVIDER=openaiPLANNING_MODEL=gpt-4.1-mini
Optional workspace inspection
EXECUTION_ENABLED=falseEXECUTION_CAPABILITIES=workspace.search,workspace.inspect,workspace.git_statusEXECUTION_TIMEOUT_MS=5000EXECUTION_MAX_OUTPUT_BYTES=32768
Install In MCP Clients
Example stdio config:
{
"command": "npx",
"args": ["-y", "@tac0de/knowledge-to-action-mcp"],
"env": {
"OBSIDIAN_VAULT_ROOT": "/path/to/vault"
}
}VS Code
Add to .vscode/mcp.json:
{
"servers": {
"knowledge-to-action": {
"command": "npx",
"args": ["-y", "@tac0de/knowledge-to-action-mcp"],
"env": {
"OBSIDIAN_VAULT_ROOT": "/path/to/vault"
}
}
}
}Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"knowledge-to-action": {
"command": "npx",
"args": ["-y", "@tac0de/knowledge-to-action-mcp"],
"env": {
"OBSIDIAN_VAULT_ROOT": "/path/to/vault"
}
}
}
}Security Boundary
This package is designed to be useful without turning into a local shell bomb.
vault access is read-only
plan generation is preview-only
embeddings are optional and local
repo inspection is bounded to the configured working directory
no generic
bash.execor arbitrary command tool is exposed
Good Fit
Use this project if you want:
Obsidian-native GraphRAG
note-to-action workflows for agents
structured context instead of giant markdown dumps
repo-aware handoff without broad execution access
Not Trying To Be
a general purpose agent runtime
a write-enabled automation framework
a hosted knowledge platform
a vector database product
Compatibility
package name:
@tac0de/knowledge-to-action-mcplegacy CLI alias:
obsidian-mcpNode.js 20+
Status
v2.1.1 is usable now:
typecheck passes
unit and integration tests pass
npm pack dry-run passes
The project is still early, but the main workflow is already working.
License
MIT
Available Tools
13 toolsaction.handoff_to_repoCRead-only
Connect note context to a related workspace using read-only inspection commands.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| workspacePath | No | ||
| queryHints | No | ||
| maxMatches | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| noteSummary | Yes | |
| matchedFiles | Yes | |
| ripgrepHits | Yes | |
| gitStatus | Yes | |
| nextSteps | Yes | |
| warnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. Description adds minimal behavioral context beyond restating 'read-only inspection commands', providing no new insights about side effects, permissions, or operational scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is very concise but sacrifices necessary detail. Every sentence should earn its place; here, the brevity leads to vagueness rather than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with zero schema descriptions and no output schema explanation, the description is insufficient. The tool's purpose and usage are inadequately communicated for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and description does not explain any parameter. The parameters path, workspacePath, queryHints, and maxMatches remain undocumented, leaving agents to guess their meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('connect') and resource ('note context to a related workspace'), distinguishing it from sibling tools like context.retrieve or graph.get_neighbors. However, it lacks specificity on what 'connect' entails, leaving ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not mention appropriate contexts, exclusions, or references to sibling tools despite 12 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
action.plan_from_noteBRead-only
Create a preview-only action plan from a note and nearby context.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| objective | No | ||
| style | No | ||
| useModel | No | ||
| maxRelatedNotes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| summary | Yes | |
| goals | Yes | |
| constraints | Yes | |
| decisions | Yes | |
| openQuestions | Yes | |
| suggestedActions | Yes | |
| handoffPrompt | Yes | |
| generationMode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'preview-only' which aligns with readOnlyHint=true from annotations, and 'from a note and nearby context' gives behavioral context. However, it doesn't disclose other traits like whether writing or side effects occur, but annotations already cover read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and efficient. Every word adds value: 'preview-only' limits scope, 'from a note and nearby context' explains inputs. No unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters and no schema descriptions, the description should provide more context on parameters or usage flow. While output schema exists, the description omits details like required path, optional objective, and style options, making it incomplete for selecting and invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must explain parameters, but it does not. It only implies 'path' is a note and 'maxRelatedNotes' might control context, but no explicit semantics. The enum 'style' is unexplained. This leaves agents guessing about parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (create), resource (action plan), and key constraint (preview-only from note and nearby context). It distinguishes this tool from siblings like 'action.handoff_to_repo' and 'context.gather' which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not specify when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. For example, it doesn't indicate that this tool is for planning before execution, or contrast it with other action tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context.bundle_for_agentCRead-only
Build an agent-ready context packet from a note and related vault context.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| objective | No | ||
| maxNotes | No | ||
| maxTotalBytes | No | ||
| workspacePath | No | ||
| includeRepoHints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| brief | Yes | |
| objective | No | |
| source | Yes | |
| relatedNotes | Yes | |
| keyFacts | Yes | |
| openQuestions | Yes | |
| risks | Yes | |
| repoHints | Yes | |
| packet | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's a safe read. The description adds little beyond that, just mentioning building a context packet. No further behavioral traits are described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, just one sentence. While it is not verbose, it sacrifices detail that could be added without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters including maxNotes, maxTotalBytes, etc., the description lacks completeness. It does not explain what the context packet contains, how parameters affect output, or what the output schema provides. The output schema exists but is not referenced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and no parameter explanations in the description, most parameters (objective, maxNotes, etc.) are not clarified. The description only hints that 'path' is a note and it uses vault context, but that is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it builds an agent-ready context packet from a note and related vault context, which is a specific verb and resource. However, it does not differentiate from sibling tools like context.gather or context.retrieve, leaving ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternative tools. No conditions, exclusions, or recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context.gatherCRead-only
Gather related context for a note using the knowledge graph. Returns scored related notes with snippets, ranked by relationship strength.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| maxNotes | No | ||
| maxTotalBytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| relatedNotes | Yes | |
| totalNodes | Yes | |
| graphDepth | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the description adds value by describing the output (scored snippets, ranked) and method (knowledge graph). However, it does not disclose any potential limitations, rate limits, or authentication needs. The description is consistent with annotations, no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently communicates the core purpose and output. It is front-loaded and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (one required), multiple siblings, and a potentially complex output (scored notes with snippets), the description lacks sufficient detail. It does not clarify what 'related context' means, how scoring works, or how parameters influence results. The presence of an output schema reduces the burden but does not compensate for missing parameter explanations and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, and the description provides no explanation of the three parameters (path, maxNotes, maxTotalBytes). The agent must infer meaning from names alone, which is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gathers related context for a note via the knowledge graph and returns scored snippets ranked by strength. The verb 'gather' and resource 'related context' are specific, and the output format helps distinguish it from siblings like context.retrieve or graph.get_neighbors, though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention scenarios where context.gather is preferred over context.retrieve or graph.get_neighbors, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context.retrieveCRead-only
Retrieve notes using lexical, graph, and optional embedding-based reranking.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| path | No | ||
| maxResults | No | ||
| maxTotalBytes | No | ||
| useEmbeddings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| sourcePath | No | |
| retrievalMode | Yes | |
| results | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's indication of retrieval is consistent. It adds the method (lexical, graph, embedding) but does not disclose any additional behavioral traits like rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that is well front-loaded. While brief, it efficiently communicates the core purpose without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and an output schema, the description is too brief. It does not explain the different retrieval modes, usage context, or what the output contains, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'lexical, graph, and optional embedding-based reranking', which suggests the 'query' parameter is used, but it does not elaborate on any of the five parameters. With 0% schema coverage, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves notes using lexical, graph, and optional embedding-based reranking. The verb 'retrieve' and resource 'notes' are specific, but it doesn't explicitly distinguish from sibling tools like 'vault.search_notes' or 'context.gather'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'context.gather' or 'vault.search_notes'. The description lacks explicit when/when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
embeddings.index_vaultC
Chunk vault notes and persist optional embeddings to a local SQLite index.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | ||
| maxNotes | No | ||
| chunkSize | No | ||
| chunkOverlap | No | ||
| forceReindex | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| notesIndexed | Yes | |
| chunksIndexed | Yes | |
| skipped | Yes | |
| provider | Yes | |
| durationMs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (destructive hint false). The description adds that embeddings are 'optional' and stored locally, which is useful but does not detail potential side effects like overwriting existing indexes or performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but may be too brief. It front-loads the main action but could be restructured to include parameter hints without increasing length significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, output schema, indexing behavior), the description is incomplete. It does not explain how the indexed embeddings are used, error conditions, or the effect of 'forceReindex'. The output schema exists but the description adds no context about return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%; the description does not explain any of the 5 parameters (glob, maxNotes, chunkSize, chunkOverlap, forceReindex). The agent must infer their meaning solely from names and schema types, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Chunk' and 'persist', the resource 'vault notes', and the destination 'local SQLite index'. This distinguishes it from sibling tools which focus on reading, searching, or graph operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'context.retrieve' or 'vault.search_notes'. It does not specify prerequisites (e.g., vault must exist) or situations where it should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph.buildARead-only
Build the knowledge graph from the vault. Parses all wikilinks, tags, and computes backlinks. Must be called before using other graph/context tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| nodes | Yes | |
| edges | Yes | |
| tags | Yes | |
| buildTimeMs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Build the knowledge graph,' indicating a mutation, yet annotations declare readOnlyHint: true. This contradiction severely misleads about the tool's behavior. No additional behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, front-loaded with purpose. Efficiently conveys the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and a clear prerequisite role, the description is mostly complete, but the annotation contradiction undermines confidence in behavioral correctness, leaving a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema coverage is 100%, so the baseline of 4 applies. The description adds no parameter info, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Build the knowledge graph from the vault. Parses all wikilinks, tags, and computes backlinks.' It distinguishes from sibling tools like graph.get_backlinks and context.gather by positioning itself as a prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Must be called before using other graph/context tools,' providing clear context for when to use it, though it does not mention exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph.get_backlinksARead-only
Get all notes that link to the specified note. Graph must be built first.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| backlinks | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint: true, so the description doesn't need to repeat that. It adds the behavioral requirement of building the graph first, which is beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the key action front-loaded. Every sentence adds value: the first states the purpose, the second states the prerequisite. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only, output schema exists), the description covers the essential purpose and the only important prerequisite. No missing context that would hinder correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that the 'path' parameter refers to the specified note, which adds meaning beyond the schema definition. For a single simple parameter, this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all notes that link to the specified note' with a specific verb and resource. It distinguishes itself from sibling tools like graph.get_neighbors by specifying the direction (incoming links).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('Graph must be built first'), which provides some guidance on when to use the tool. However, it does not explicitly state when not to use it or offer alternatives, leaving usage context somewhat implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph.get_neighborsARead-only
Get neighbor nodes of a note in the knowledge graph (BFS traversal). Includes outLinks, backLinks, and shared-tag neighbors. Graph must be built first.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| neighbors | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=false. The description adds behavioral context: BFS traversal, specific neighbor types, and the graph build requirement. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. It front-loads the main action and subsequently adds traversal details and a prerequisite. Slight improvement could be ordering, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 0% schema coverage and existence of an output schema, the description covers the core behavior but misses parameter semantics. It does not describe the depth parameter's role or default behavior, leaving a gap in completeness for a tool with two parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameters. It mentions 'a note' implying path but does not describe the path parameter's format or the depth parameter's meaning, range, or default. This severely limits an agent's ability to use parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get neighbor nodes' with specific verb and resource, and distinguishes from siblings like graph.get_backlinks by noting the inclusion of outLinks, backLinks, and shared-tag neighbors. It also specifies BFS traversal, adding unique context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('Graph must be built first') but does not explicitly guide when to use this tool versus alternatives like graph.get_backlinks. The context of use is implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault.get_metadataBRead-only
Return frontmatter and metadata from a note.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| title | No | |
| tags | Yes | |
| frontmatter | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description aligns by indicating a read operation. However, it does not disclose behavior for missing paths or notes without frontmatter, but annotations reduce the burden. Score 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence) but sacrifices necessary detail about the parameter. It is front-loaded with core purpose, but the lack of parameter info reduces effectiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one simple parameter and an output schema (not shown), a minimal description might suffice. However, the description omits parameter semantics and does not clarify what 'frontmatter and metadata' entails, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description provides no explanation for the 'path' parameter. Without parameter descriptions, an agent cannot know the expected format or meaning of the path. This is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns frontmatter and metadata from a note, using specific verbs and resource. It distinguishes itself from siblings like vault.read_note (full content) and vault.search_notes (searching).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. It does not mention that it should be used when only metadata is needed, nor does it contrast with vault.read_note. The agent must infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault.list_notesARead-only
List notes in the vault using deterministic ordering.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | ||
| glob | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true (safe read) and openWorldHint=false. The description adds 'deterministic ordering', a useful behavioral trait beyond annotations, but lacks details on default behavior, pagination, or effect of optional parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single short sentence, no redundant words, front-loaded with action and key differentiator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too minimal for a listing tool with three optional filters. It omits default behavior, ordering details, and whether filters are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for three parameters (folder, glob, limit). It does not mention any parameter or explain how they affect the result, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies the action (list), the resource (notes in the vault), and a distinctive ordering property (deterministic ordering). This differentiates it from sibling tools like vault.search_notes and vault.read_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (listing notes with deterministic order for pagination or comparison) but does not explicitly state when not to use it or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault.read_noteBRead-only
Read one note from the vault and return stable hash metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| maxBytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| content | Yes | |
| bytes | Yes | |
| sha256 | Yes | |
| lineCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by mentioning 'return stable hash metadata', hinting at the output. However, it does not fully disclose behavioral aspects like whether the note content is returned, which could be important for an agent. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the core purpose without any redundant words. It is well-structured and front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of parameter explanations, missing usage guidelines, and no mention of return value structure (despite an output schema being present), the description leaves significant gaps. The tool is simple, but completeness is low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fails to add any meaning to the parameters 'path' and 'maxBytes'. The agent must infer from parameter names alone, leaving ambiguity (e.g., the range or unit of maxBytes is unmentioned).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'one note from the vault', and specifies the return of 'stable hash metadata'. This distinguishes it from sibling tools like vault.list_notes and vault.search_notes, which handle listing or searching rather than reading a single note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as the note's existence, nor does it contrast with sibling tools like vault.get_metadata or vault.list_notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault.search_notesBRead-only
Search note contents in deterministic order.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| caseSensitive | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=false. The description adds a notable behavioral trait: 'deterministic order', which informs the agent that results are consistent across calls. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the action, and adds a key qualifier. It is concise but could be slightly expanded to include parameter hints without losing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 sibling tools and 3 parameters with 0% schema coverage, the description lacks enough context for an agent to decide when to use this tool. Key details like default case sensitivity, pagination behavior, and result format are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter semantics, but it does not mention any parameters. The words 'Search note contents' only vaguely imply the query applies to content, but no details on caseSensitive, limit, or query format are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' and resource 'note contents', and adds the qualifier 'deterministic order' which helps distinguish from siblings like vault.list_notes. However, it does not specify whether the search is full-text or limited to specific fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as vault.list_notes or context.retrieve. There are no exclusions, prerequisites, or context about the best use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
13 tool updates
v2.1.1- First observed
action.handoff_to_repo - First observed
action.plan_from_note - First observed
context.bundle_for_agent - First observed
context.gather - First observed
context.retrieve - First observed
embeddings.index_vault - First observed
graph.build - First observed
graph.get_backlinks - First observed
graph.get_neighbors - First observed
vault.get_metadata - First observed
vault.list_notes - First observed
vault.read_note - First observed
vault.search_notes
TDQS
Scored across 13 tools
Each tool has a clearly distinct purpose within its category (actions, context, embeddings, graph, vault). No overlapping functionality detected; even tools within the same category (e.g., context.gather and context.retrieve) have different retrieval methods.
All tool names follow a consistent pattern: category.snake_case_action (e.g., action.handoff_to_repo, vault.list_notes). The naming is descriptive and predictable, with no mixed conventions.
13 tools is well within the optimal range for a server of this scope. The count covers all necessary operations for knowledge management and action planning without unnecessary bloat.
The tool surface covers core workflows: graph building, context retrieval, note reading/searching, embedding indexing, and action planning. Missing tools for note creation or modification are acceptable given the read-analysis-plan focus, but a minor gap exists for editing vault content.
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 Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Research-backed linting + generation for agent context files (CLAUDE.md, AGENTS.md, Cursor rules).
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Related MCP Servers
- AlicenseBqualityCmaintenanceConnects AI assistants directly to Obsidian vaults with intelligent note creation using templates, semantic search, smart tagging to avoid duplicates, and specialized agent roles (Guardian, Researcher, Connection Weaver) for managing knowledge bases.359MIT
- AlicenseAqualityCmaintenanceProvides AI agents with direct filesystem access to an Obsidian vault for note management, task orchestration, context persistence, and git synchronization.27822MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to search, read, and write notes in an Obsidian vault via MCP tools, and monitor product handoffs and state.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to store and retrieve project context, bugs, decisions, and session logs by reading and appending markdown files in a local Obsidian vault, without requiring any cloud services.6MIT
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/tac0de/knowledge-to-action-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server