Obsidian MCP Wrapper
Provides controlled retrieval and human-gated write access to an Obsidian vault's Markdown notes, including search, section reading, entity context, and append operations.
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 MCP Wrapperfind notes about the Q3 roadmap"
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.
Obsidian MCP Wrapper
Obsidian MCP Wrapper is a session-stateless MCP retrieval system for an agency Obsidian vault. It gives Claude Desktop users controlled access to indexed Markdown knowledge without giving the model direct, unbounded filesystem access or unsupervised write privileges.
The runtime has two layers:
pf-mcp: a lightweight STDIO MCP shim that runs on each Claude Desktop workstation.pf-index: a shared LAN/VPN retrieval service that owns the vault index, signed handles, bearer-token authentication, rate limits, write locking, and the audit log.
The design goal is progressive disclosure: search returns compact snippets and signed section handles first, then Claude expands only the context it needs.
Highlights
Standard-library core runtime for the default HTTP server path.
Optional FastAPI/uvicorn ASGI boundary.
SQLite FTS5 lexical search over immutable vault index epochs.
HMAC-signed section handles that resolve against retained snapshots.
Manifest-only filesystem access for indexed Markdown paths.
Human-gated append writes into client, provider, carrier, and operational notes.
Autonomous AI notes routed to a rotated capture inbox by default.
File locking and SQLite audit records for write operations.
Sanitized error envelopes that avoid leaking paths, tokens, URLs, or tracebacks into Claude.
Quick-start, deployment, teardown, and nightly-refresh scripts.
Related MCP server: MCP Tools for Obsidian
Runtime Topology
Claude Desktop
-> STDIO MCP JSON-RPC
-> pf-mcp workstation shim
-> HTTP POST /tools/<tool_name>
-> pf-index LAN/VPN service
-> Obsidian_Vault Markdown snapshots and .pf_index artifactspf-index consumes Markdown and derived index artifacts. It does not need the
source DuckDB database at runtime.
Repository Layout
.
|-- Docs/
| |-- ARCHITECTURE.md
| |-- DEPLOYMENT.md
| |-- QUICKSTART.md
| `-- MCP_WRAPPER_MASTER_PROMPT.md
|-- config/
| |-- claude_desktop_config.example.json
| |-- deployment_manifest.example.json
| |-- pf-index.example.toml
| `-- pf-mcp.env.example
|-- pf_index/
| |-- api/ HTTP boundaries
| |-- core/ indexing, retrieval, crypto, paths, writes
| `-- config.py TOML and environment configuration
|-- pf_mcp/
| `-- main.py STDIO MCP shim
|-- scripts/
| |-- build_index.py
| |-- run_pf_index.py
| |-- quickstart.sh
| |-- quickstart_teardown.sh
| |-- nightly_refresh.sh
| |-- deploy_interactive.sh
| `-- deploy_teardown.sh
|-- tests/
|-- pyproject.toml
`-- requirements.lockMCP Tools
The shim exposes these tools to Claude:
Tool | Purpose |
| Search indexed vault sections and return snippets with signed handles. |
| Search strategy, advisory, sales, renewal, and operating-system material. |
| Find likely note paths by query. |
| Return a bounded summary/outline for one note path. |
| Entity-oriented search wrapper. |
| Search indexed table-like content. |
| Resolve one signed handle into a larger section excerpt. |
| Resolve several signed handles within a token budget. |
| Retrieve full materialized context for one known client or provider. |
| Combine profile evidence with strategy context for planning questions. |
| Return index and vault statistics. |
| Append a factual note through the gated write pipeline. |
| Remove a specific generated note entry by note id. |
Security Model
Important boundaries:
The MCP shim validates argument shapes and hard limits before forwarding to the LAN service.
The LAN service requires
Authorization: Bearer <token>.Tokens map to user ids for audit and idempotency.
Runtime reads are limited to paths listed in the active index manifest.
Path validation rejects absolute paths, traversal, null bytes, URL schemes, Windows drive paths, and backslash paths.
Section handles contain path, line range, content hash, file hash, vault id, and index epoch, then are signed with HMAC-SHA256.
Old handles resolve against retained immutable snapshots, not changed live vault files.
Autonomous writes are redirected to the configured capture inbox unless the human explicitly directs a write to a specific note.
Write operations are append-only/gated, locked, audited, and bounded by configured note length limits.
Requirements
Python 3.11 or newer
Markdown Obsidian vault directory
HMAC secret for handle signing
One or more bearer tokens for users
The default pf_index.api.server HTTP boundary uses only the Python standard
library. Optional FastAPI dependencies are listed in requirements.lock:
python -m pip install -r requirements.lockQuick Start
For a complete local smoke test, use the maintained guide:
sed -n '1,240p' Docs/QUICKSTART.mdThe short version:
export PF_APP_DIR="$PWD"
export PF_DEMO_ROOT=/tmp/pf-mcp-demo
export PF_VAULT_ROOT="$PF_DEMO_ROOT/Obsidian_Vault"
export PF_INDEX_ROOT="$PF_DEMO_ROOT/.pf_index"
export PF_AUDIT_DB="$PF_INDEX_ROOT/write_audit.sqlite"
export PF_INDEX_HMAC_SECRET="local-demo-secret-change-me"
export PF_INDEX_TOKEN="local-demo-token"
export PF_INDEX_CONFIG="$PF_DEMO_ROOT/pf-index.toml"Create a small test vault and config as shown in Docs/QUICKSTART.md, then
build an index:
PYTHONPATH="$PF_APP_DIR" python -m scripts.build_index \
--config "$PF_INDEX_CONFIG" \
--epoch 2026-06-08T120000ZRun the stdlib HTTP server:
PYTHONPATH="$PF_APP_DIR" \
PF_INDEX_HMAC_SECRET="$PF_INDEX_HMAC_SECRET" \
python -m pf_index.api.server \
--host 127.0.0.1 \
--port 8765 \
--config "$PF_INDEX_CONFIG"Search through the API:
curl -s \
-H "Authorization: Bearer $PF_INDEX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"Coverage","max_results":3,"max_tokens":1000}' \
http://127.0.0.1:8765/tools/vault_search \
| python -m json.toolList MCP tools through the shim:
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| PYTHONPATH="$PF_APP_DIR" \
PF_INDEX_URL="http://127.0.0.1:8765" \
PF_INDEX_TOKEN="$PF_INDEX_TOKEN" \
python -m pf_mcp.main \
| python -m json.toolOr run the automated path:
bash scripts/quickstart.shTear down demo artifacts:
bash scripts/quickstart_teardown.shConfiguration
Server-side config lives in TOML. Start from:
cp config/pf-index.example.toml pf-index.tomlKey sections:
[paths]:vault_root,index_root, andaudit_db[limits]: result, token, note length, lock timeout, and concurrency limits[security]:vault_idand HMAC secret source[tokens]: bearer token to user id map[inbox]: rotated inbox path for autonomous captures[retention]: retained immutable index epochs
Workstation shim config is environment-based. Start from:
cp config/pf-mcp.env.example pf-mcp.envClaude Desktop config example:
cat config/claude_desktop_config.example.jsonIndexing
Build an immutable index epoch:
PYTHONPATH="$PWD" python -m scripts.build_index --config /path/to/pf-index.tomlEach epoch contains:
.pf_index/builds/<epoch>/
|-- manifest.json
|-- lexical.sqlite
`-- content/<sha256-of-relative-path>.mdThe active epoch is selected through .pf_index/ACTIVE. Rolling back is a
controlled edit of that pointer to a retained epoch.
Running The Service
Default stdlib server:
PYTHONPATH="$PWD" python -m pf_index.api.server \
--host 127.0.0.1 \
--port 8765 \
--config /path/to/pf-index.tomlOptional FastAPI boundary:
python -m pip install -r requirements.lock
PYTHONPATH="$PWD" uvicorn pf_index.api.fastapi_app:create_app --factory \
--host 127.0.0.1 \
--port 8765Testing
Run acceptance and structure tests:
PYTHONDONTWRITEBYTECODE=1 python -m unittest discover -s tests -vThe tests focus on safety contracts such as path validation, signed handles, indexing behavior, write routing, and repository structure.
Deployment
Use Docs/DEPLOYMENT.md for the production runbook. It covers:
Dedicated service user and filesystem permissions
Code and vault placement
HMAC secret generation
User token generation
Index build and startup checks
systemdservice setupLAN/VPN binding and firewall posture
Runtime egress denial
Token rotation
Audit recovery
Rollback
scripts/deploy_interactive.sh and scripts/deploy_teardown.sh support guided
deployment and cleanup flows.
Nightly Refresh
scripts/nightly_refresh.sh supports a scheduled flow:
sync or refresh source data
-> optionally rebuild Markdown vault from DuckDB
-> build a new immutable index epoch
-> atomically update ACTIVEIf DuckDB-to-Markdown generation happens elsewhere, omit PF_SOURCE_DATABASE
and rebuild the index from the current vault.
Data Boundary
Do not commit or deploy local data artifacts:
agency_core.duckdbGenerated
Obsidian_Vault/.pf_index/builds.obsidian/.vault_saltReal
.envfilesAudit databases
Exported CSVs, spreadsheets, or reports
The repository is meant to contain application code, tests, docs, and placeholder configuration only.
Further Reading
Docs/ARCHITECTURE.mdfor the full design and safety modelDocs/QUICKSTART.mdfor local smoke testingDocs/DEPLOYMENT.mdfor production operationsDocs/MCP_WRAPPER_MASTER_PROMPT.mdfor operator-facing MCP usage guidance
Available Tools
13 toolsadvisory_contextD
advisory_context
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| query | No | ||
| max_tokens | No | ||
| strategy_query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided and the description discloses no behavioral traits, side effects, or operational context. The description carries the full burden and entirely fails to address it.
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 extremely short but this is under-specification rather than conciseness. A single word that repeats the tool name adds no value, so it fails to earn its place.
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 four parameters, no output schema, and no annotations, the description is severely incomplete. It does not hint at the tool's function, return value, or how it differs from a large set of sibling tools.
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 schema has four parameters (path, query, max_tokens, strategy_query) with no descriptions, and the tool description does not clarify their purpose or relationships. Schema coverage is 0% and the description provides no compensation.
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?
Tautological: description restates name/title.
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 the sibling tools. The empty description gives no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_human_noteD
append_human_note
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| heading | No | ||
| evidence | Yes | ||
| note_text | Yes | ||
| is_human_directed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose that this is a mutation/write operation, any side effects, or required permissions. The name implies appending, but that is not stated behavior.
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 placeholder token, which is under-specification rather than conciseness. It does not communicate any useful information, so it does not earn its place.
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, no output schema, and no annotations, the description carries the full burden but offers nothing. An agent would be completely lost on how to invoke this tool correctly.
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 the tool description provides no parameter semantics. While parameter names like 'path' and 'note_text' give hints, others like 'evidence' and 'is_human_directed' remain unexplained.
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?
Tautological: description restates name/title.
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 given on when to use this tool versus alternatives like find_note or read_section. There is no mention of use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expand_contextD
expand_context
| Name | Required | Description | Default |
|---|---|---|---|
| handles | Yes | ||
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and a one-word description, there is zero disclosure of behavioral traits. The tool could be read-only, destructive, rate-limited, or stateful—nothing is communicated.
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 minimal but not usefully concise. It is under-specification, not efficient writing. There is no front-loaded meaning or structural benefit.
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?
The tool has two parameters, one required, with a nested object shape, no output schema, and no annotations. The description fails to explain what 'expand_context' does, when it is appropriate, or what the parameters mean, making it completely inadequate.
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 the description does not compensate. The parameters 'handles' and 'max_tokens' are left completely unexplained, despite their complex nested structure.
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?
Tautological: description restates name/title.
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 alternatives like get_entity_context or advisory_context. No context is provided about applicable scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_noteD
find_note
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and a one-word description, the behavioral burden is entirely on the description, which reveals nothing about side effects, return format, or operational characteristics. The agent cannot know if this is a read-only operation or something else.
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 extremely short, but this is under-specification rather than effective conciseness. Every sentence should earn its place, but here there is not even a sentence, and the single word adds no value.
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 output schema, no annotations, and zero parameter descriptions, the description is completely inadequate. Even for a simple search tool, the agent needs at least some indication of what results look like or what the query format is.
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 schema shows two parameters (query, max_results) with zero description coverage. The description adds no semantic meaning to any parameter, so the agent receives no help beyond the bare type and requiredness.
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?
Tautological: description restates name/title.
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 absolutely no guidance on when to use this tool versus alternatives. No context, prerequisites, or exclusions are provided, leaving the agent without any decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_contextD
get_entity_context
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_tokens | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description is absent, offering no information about side effects, output, or operational constraints.
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 extremely short, but this is under-specification rather than effective conciseness. It fails to earn its place as a useful description, adding no value beyond the tool name.
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 there are 3 parameters, no output schema, and no annotations, the description is completely inadequate. It provides no context for how the tool operates, returns data, or integrates with sibling tools.
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 the description provides no explanation of parameters. The schema lists 'query', 'max_tokens', and 'max_results' with types only, leaving their semantics entirely undocumented.
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?
Tautological: description restates name/title.
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 alternatives. Sibling tools such as 'vault_search' and 'strategy_search' exist, but the description provides no contextual distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_full_profileD
get_full_profile
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| query | No | ||
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says nothing about what a 'profile' is, what data it returns, whether it has side effects, or any rate limits or permissions needed.
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 extremely short, but this is under-specification rather than conciseness. One sentence (or word) does not earn its place if it provides zero information beyond the name.
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 3 parameters, no annotations, no output schema, and no description content, the definition is completely inadequate for an agent to select or invoke the tool correctly. It offers no context about the tool's purpose, use case, or expected behavior.
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 the description adds no meaning to the parameters (path, query, max_tokens). The schema only provides names and types, leaving the agent without any understanding of what each parameter should contain.
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?
Tautological: description restates name/title.
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 or when to prefer an alternative like get_note_summary or expand_context. No context, prerequisites, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_note_summaryD
get_note_summary
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description discloses zero behavioral traits—what it does, side effects, prerequisites, return format, or limitations. The full burden falls on the description, which is empty.
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 short but this is under-specification rather than conciseness. No useful information is provided, so it fails to earn its place.
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 one parameter, no output schema, and no annotations, the description is completely inadequate. Even a minimal tool needs some detail about what the summary contains or how the path is used.
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 only parameter 'path' has no description in the schema, and the description adds no meaning. With 0% schema coverage and no explanatory text, the agent has no idea what value to pass or its format.
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?
Tautological: description restates name/title.
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 given about when to use this tool versus the many sibling tools (vault_search, find_note, read_section, etc.). There is no context or alternative indication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_sectionD
read_section
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | ||
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description contains no behavioral details. The agent is left without any information about side effects, permissions, pagination, or return format, making this a complete transparency failure.
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?
Although the description is short, it is under-specified rather than concise. A single word adds no value and forces the agent to rely entirely on the schema, which itself lacks descriptions. This is closer to an empty placeholder than effective 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 the nested schema, lack of output schema, and absence of annotations, the description is severely inadequate. It provides no context about what a 'section' is, how the handle works, or what the tool returns, making it nearly unusable 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?
The description adds no meaning to the schema. The schema has two parameters (handle and max_tokens) with no descriptions, and schema coverage is 0%. The description does not mention parameters or how to construct them, so the agent cannot infer their purpose.
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?
Tautological: description restates name/title.
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 alternatives. The description provides no context about the intended use case, prerequisites, or situations to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_noteD
remove_note
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| reason | No | ||
| heading | No | ||
| note_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It discloses nothing about whether this is a destructive action, whether it requires permissions, whether removal is reversible, or what the impact on linked data might be. The bare name 'remove_note' implies mutation but offers no behavioral context.
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 word, which is technically concise, but this is under-specification rather than conciseness. It omits all essential information, so the brevity is not earned; every useful sentence is missing.
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?
The tool has four parameters, two required, no output schema, and no annotations. A robust description is essential here, but the description provides zero explanatory content. It is completely inadequate for the tool's complexity.
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 does not explain any of the four parameters (path, reason, heading, note_id) or their roles. The schema provides only names and types, leaving the agent to infer semantics from parameter names alone, 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?
Tautological: description restates name/title.
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 alternatives. The description gives no context, prerequisites, or exclusions, leaving the agent without any basis for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tablesD
search_tables
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description discloses no behavioral traits such as read-only vs. mutating, required permissions, or return format. The tool's behavior is completely opaque.
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 extremely short but this is under-specification, not conciseness. It fails to provide any substantive content beyond the name.
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?
For a tool with 2 parameters and no output schema or annotations, the description is wholly inadequate. It provides no functional details and leaves the agent without any guidance 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 the description adds no meaning to the query and max_results parameters. The agent cannot infer what 'query' refers to or how max_results behaves.
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?
Tautological: description restates name/title.
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 alternatives like vault_search or strategy_search. The description offers no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strategy_searchD
strategy_search
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_tokens | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing side effects, permissions, rate limits, or return behavior. The description simply restates the name and reveals nothing beyond the fact that some search operation may occur.
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 short but this is under-specification, not conciseness. It contains a single word and earns no place because it supplies zero informative content.
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 3 parameters, no output schema, and 12 sibling tools providing potential alternatives, this description is completely inadequate. An agent cannot know what the tool does, when to invoke it, or how to configure it.
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 the description adds no meaning to the parameters (query, max_tokens, max_results). The agent receives no hints about query syntax, result limits, or token usage.
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?
Tautological: description restates name/title.
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 offers no guidance on when to use this tool or when to prefer an alternative. There are no usage contexts, exclusions, or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_searchD
vault_search
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_tokens | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description offers no behavioral details such as search semantics, filtering, or data access. The description carries no burden of disclosure.
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 one-word description is under-specified rather than concise; it lacks a sentence or any useful content.
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 no output schema, no annotations, and multiple sibling tools, the description is completely inadequate for an agent to understand purpose, behavior, or expected use.
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 the description does not explain any of the three parameters. It provides no meaning beyond the schema's bare names.
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?
Tautological: description restates name/title.
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 alternatives like strategy_search or find_note. The description provides no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_statsD
vault_stats
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It fails completely, disclosing nothing about side effects, return values, permissions, or any other behavioral traits. A tool named 'vault_stats' could return statistics, but this is not stated.
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 extremely concise, but it is under-specified rather than appropriately concise. A single word that repeats the tool name does not earn its place; it provides no informative content. This is analogous to the 'Process' example, which scored 2 for being an under-specification.
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 complete absence of annotations, output schema, and any descriptive text, the description is entirely inadequate for understanding the tool's functionality, input, or output. Even with no parameters, an agent cannot know what 'vault_stats' does or what it returns, making this far from complete.
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 tool has zero parameters, as indicated by the empty input schema, so there are no parameter meanings to clarify. The baseline for 0 parameters is 4, and the description does not introduce any confusion or contradiction. However, the description also adds no value beyond the schema for this dimension.
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?
Tautological: description restates name/title.
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 whatsoever on when to use this tool versus alternatives. No context about typical use cases, prerequisites, or exclusions is provided. The description offers zero practical help for an agent deciding between this and the sibling tools.
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
v0.1.0- First observed
advisory_context - First observed
append_human_note - First observed
expand_context - First observed
find_note - First observed
get_entity_context - First observed
get_full_profile - First observed
get_note_summary - First observed
read_section - First observed
remove_note - First observed
search_tables - First observed
strategy_search - First observed
vault_search - First observed
vault_stats
TDQS
Scored across 13 tools
Multiple tools overlap in purpose: vault_search, strategy_search, find_note, and search_tables all appear to perform search-like operations with unclear distinctions. Similarly, get_entity_context, get_full_profile, and advisory_context all seem to provide contextual or profile information, making it difficult for an agent to choose the right tool.
Most tools follow a verb_noun pattern (find_note, get_note_summary, read_section), but vault_search and advisory_context break this convention, and search_tables mixes the order. The inconsistency is moderate, not chaotic, but noticeable.
13 tools is well within the typical 3-15 range and seems appropriately scoped for an Obsidian wrapper covering search, retrieval, and basic note management. The number does not feel excessive or thin.
The tool set covers search and read operations comprehensively, but lacks an explicit update or edit tool. append_human_note may create or append, but there is no clear mechanism to modify existing notes, which leaves a notable gap for a note management server.
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
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceObsidian vault connector for Claude Desktop - enables reading and writing Markdown notes using Model Context Protocol (MCP)175-
- AlicenseNot gradedqualityFmaintenanceA local MCP server that enables AI applications like Claude Desktop to securely access and work with Obsidian vaults, providing capabilities for reading notes, executing templates, and performing semantic searches.832MIT
- FlicenseNot gradedqualityDmaintenanceProvides semantic search capability over Obsidian vaults and exposes recent notes as resources to Claude through the MCP protocol.9-
- AlicenseAqualityCmaintenanceGive Claude (and any MCP client) real agent access to your Obsidian vault — graph traversal, Dataview queries, daily-note awareness, and more.25221MIT
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/UwUGreed/obsidian-mcp-wrapper'
If you have feedback or need assistance with the MCP directory API, please join our Discord server