Vault MCP Server
Provides tools for setting and checking Telegram webhooks, and polling updates to forward to a local webhook.
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., "@Vault MCP Servercreate a new issue for login bug"
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.
Vault MCP Server
A Model Context Protocol (MCP) server for interacting with the UniHub Vault - a file-based issue tracking and knowledge management system.
Quick Start
Prerequisites
Python 3.12+
uvpackage manager
Installation
uv syncRunning the Server
uv run python main.pyConfiguration
Set the VAULT_PATH environment variable to point to your UniHub Vault directory:
export VAULT_PATH=/path/to/your/vaultDefault locations (checked automatically if VAULT_PATH not set):
./.unihub-vault/UniHubVault(relative to project root)~/Q/massage.kg/.unihub-vault/UniHubVault
Related MCP server: obsidian-mcp
MCP Client Configuration
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"vault": {
"command": "uv",
"args": ["run", "python", "/absolute/path/to/vault-mcp-server/main.py"],
"env": {
"VAULT_PATH": "/home/lexx/Q/massage.kg/.unihub-vault/UniHubVault"
}
}
}
}Cursor IDE
Add to .cursor/mcp.json in your workspace:
{
"mcpServers": {
"vault": {
"command": "uv",
"args": ["run", "python", "${workspaceFolder}/main.py"],
"env": {
"VAULT_PATH": "/home/lexx/Q/massage.kg/.unihub-vault/UniHubVault"
}
}
}
}Windsurf / Codeium
Add to your MCP settings:
{
"vault": {
"command": "uv",
"args": ["run", "python", "/absolute/path/to/vault-mcp-server/main.py"],
"env": {
"VAULT_PATH": "/path/to/vault"
}
}
}Generic MCP Client
{
"vault": {
"command": "python",
"args": ["/absolute/path/to/vault-mcp-server/main.py"],
"env": {
"VAULT_PATH": "/path/to/vault"
}
}
}Available Tools
Issue Management (5 tools)
Tool | Description |
| Create issue in |
| Read issue content by unique ID |
| Update or append to issue |
| Move issue to stage ( |
| List issues in stage (default: |
Vault Operations (3 tools)
Tool | Description |
| Read any note from vault (path relative to vault root) |
| List markdown files in directory |
| Search all |
Status (1 tool)
Tool | Description |
| Dashboard: issues by stage + recently modified notes |
Telegram (3 tools)
Tool | Description |
| Set bot webhook URL |
| Check webhook status |
| Poll and forward updates to local webhook |
Issue Lifecycle
10_Inbox → 20_Processing → 30_ToReview → 999_Finished
↑ ↑ ↑
create move moveTypical Workflow
1. create_issue("Bug in login", "Users can't login with SSO", ["bug", "auth"])
→ Returns: "a1b2c3d4"
2. list_issues("10_Inbox")
→ Shows new issue in inbox
3. read_issue("a1b2c3d4")
→ Returns full issue content
4. move_issue("a1b2c3d4", "20_Processing")
→ Moves to processing stage
5. update_issue("a1b2c3d4", "\n## Investigation\nChecked logs...", append=True)
→ Appends investigation notes
6. move_issue("a1b2c3d4", "30_ToReview")
→ Moves to review when done
7. get_status()
→ Shows overview of all stagesStage Names
Both full and short names are supported:
Short | Full |
|
|
|
|
|
|
|
|
Tool Examples
Create and Track an Issue
create_issue(name="Add dark mode", body="Users requested dark theme", tags=["feature", "ui"])
→ "f5e4d3c2"
read_issue("f5e4d3c2")
→ Full issue content
update_issue("f5e4d3c2", "\n## Notes\nPriority: high", append=True)
→ "Successfully appended to issue f5e4d3c2"
move_issue("f5e4d3c2", "processing")
→ "Moved issue f5e4d3c2 to 20_Processing"Search and Read Notes
search_vault("authentication")
→ 50_Protocols/Auth.md:5: ## Authentication Flow
20_Processing/<~15-nov~> abc123_login.md:12: User authentication fails...
read_note("50_Protocols/Auth.md")
→ Full protocol content
list_notes("50_Protocols")
→ Auth.md
Security.md
...Get Status Overview
get_status()
→ ## Vault Status Overview
### Issues by Stage
**10_Inbox**: 3 issue(s)
- <~15-nov~> abc123_login.md
- <~16-nov~> def456_search.md
- <~17-nov~> ghi789_ui.md
**20_Processing**: 1 issue(s)
- <~10-nov~> f5e4d3c2_dark_mode.md
**30_ToReview**: 0 issue(s)
**999_Finished**: 12 issue(s)
...
### Recently Modified Notes
- 20_Processing/<~10-nov~> f5e4d3c2_dark_mode.md (0d ago, 2025-03-29)
- 50_Protocols/Auth.md (2d ago, 2025-03-27)Running Tests
uv run python test_issue_tools.pyThis runs an integration test covering the full issue lifecycle.
Architecture
FastMCP server framework for MCP protocol handling
File-based storage using markdown files in stage directories
Path safety validation to prevent directory traversal
Telegram integration via bot token from
backend/.env
Available Tools
12 toolscheck_telegram_webhookA
Check Telegram bot webhook status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. The verb 'check' implies a safe read-only operation, but the description lacks explicit statements about side effects, error conditions, or what 'status' includes. It does not contradict the lack of annotations; it simply provides minimal safety information.
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, focused sentence that conveys the tool's purpose without extra fluff. It is appropriately concise and well-structured, with no wasted 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?
For a simple no-input, read-only status check, the description is nearly complete. The presence of an output schema covers return values, but the description could mention when to use this compared to set_telegram_webhook or what to do with the returned status. Overall, it provides enough context for a straightforward call.
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, and the schema is empty. The baseline for zero-parameter tools is 4, and the description adds nothing contradictory or confusing. No additional parameter explanation is needed.
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 uses a specific verb 'check' and names the resource 'Telegram bot webhook' and the aspect 'status'. It clearly distinguishes from sibling tools like set_telegram_webhook and poll_telegram_updates, which perform different actions.
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. It does not mention that set_telegram_webhook exists for configuring the webhook, nor does it state any prerequisites or exclusions, leaving the agent without clear decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_issueA
Create a new issue in the 10_Inbox directory.
Args:
name: Short descriptive name for the issue.
body: Detailed description of the issue.
tags: Optional list of tags for categorization.
Returns:
8-character unique issue ID.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| name | Yes | ||
| tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds context about the destination directory (10_Inbox) and the return format (8-character issue ID), but does not disclose potential side effects, required permissions, or behavior on failure. Some behavioral traits (e.g., that it's a write operation) are implied by 'create' but not explicitly 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 concise and well-structured: a one-line purpose followed by clearly labeled Args and Returns sections. Every sentence contributes useful information without unnecessary verbosity.
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 description covers all three parameters, mentions the return ID, and specifies the destination directory. Since an output schema exists, the return value mention is extra but not necessary. It lacks notes about constraints (e.g., uniqueness) or error handling, but for a simple create tool it is nearly 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?
Schema description coverage is 0%, so the description must compensate. It provides meaningful descriptions for each parameter: 'Short descriptive name', 'Detailed description', 'Optional list of tags for categorization.' This goes beyond the bare schema and gives clear semantic guidance.
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 action, resource, and destination: 'Create a new issue in the 10_Inbox directory.' This specific verb+resource+location distinguishes it from sibling tools like read_issue, update_issue, and move_issue.
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 is provided. The verb 'create' implies usage for new issues, but there are no exclusions or mentions of alternatives. The context from sibling names is not explicitly leveraged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusA
Get an overview of vault status: issues by stage and recent notes.
Provides a quick dashboard showing:
- Issue count per stage with recent items
- Recently modified notes across the vault
Returns:
Formatted status summary.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It mentions returning a 'formatted status summary' and describes the contents, but does not explicitly state whether the operation is read-only, safe, or has any side effects. While 'get' implies a read, the absence of explicit safety or side-effect disclosure keeps this at a minimal viable level.
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 concise and front-loaded with the main purpose. The bullet list and 'Returns' line are structured efficiently, with every sentence contributing information. No redundancy or filler is present, making it exemplary in structure.
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 zero-parameter tool with an output schema present, the description is complete. It explains the purpose, the dashboard contents, and the return type. Given the simple nature of the tool, there are no significant gaps in context. The existing output schema likely covers return details, so no further elaboration is needed.
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 contains zero parameters, so there are no parameter semantics to explain. The description adds value by describing the default scope (issues by stage, recent notes), which is more than the schema provides. Baseline 4 is appropriate because the parameter count is zero and the description is clear about what the dashboard includes.
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 purpose: 'Get an overview of vault status: issues by stage and recent notes.' It uses a specific verb ('Get') and resource ('vault status') and distinguishes itself from siblings like list_issues or list_notes by providing an aggregated dashboard. The bullet points further clarify the exact scope.
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 clear context by framing it as a 'quick dashboard' for checking status, implying use when a broad overview is needed rather than detailed issue/note queries. However, it does not explicitly name alternatives or say when not to use it, so it lacks the explicit exclusions seen in high-scoring examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issuesA
List all issues in a specific stage.
Args:
stage: Stage folder name. One of:
- "10_Inbox" or "inbox" (default)
- "20_Processing" or "processing"
- "30_ToReview" or "review"
- "999_Finished" or "finished"
Returns:
Newline-separated list of issue filenames.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | 10_Inbox |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses the default stage, accepted aliases, and the newline-separated return format, which adds meaningful behavioral context. However, it omits details about error handling, sorting order, or possible side effects, though these are less critical for a read-only listing tool.
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 compact and well-structured with clear Args and Returns sections. It front-loads the main purpose and then provides necessary specifics without any redundant or misleading 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?
The tool is simple with one parameter and an existing output schema. The description covers the essential behavior: what is listed, how the stage is specified, and the return format. No important gaps are evident for a basic list operation.
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 provides only a default with no description or enum. The description fully documents the single `stage` parameter, listing all valid folder names and aliases, effectively compensating for the 0% schema coverage and adding value beyond the structured data.
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 that the tool lists all issues within a specified stage, using the verb 'list' and specifying both the resource ('issues') and the filtering criterion ('stage'). This distinguishes it from sibling tools such as read_issue (single issue) and list_notes (notes).
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 explicitly provide usage guidance or mention alternatives. While the stage argument and its default are explained, it lacks exclusions such as 'for single issue details use read_issue' or 'for full-text search use search_vault,' making the usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesA
List all markdown files in a directory.
Args:
directory: Directory path relative to vault root.
If None, lists root directory.
Returns:
Newline-separated list of filenames.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the return format (newline-separated filenames) and directory handling, but does not specify whether listing is recursive or how markdown files are identified, leaving some behavioral ambiguity.
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 compact, front-loaded with the main purpose, and uses a clean Args/Returns structure with no redundant text.
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 simple list tool with one optional parameter and an output schema, the description adequately covers core behavior, but lacks explicit detail on recursive listing and sorting, so it is not fully 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 schema has 0% description coverage, but the description fully explains the single parameter: directory path relative to vault root and the None default meaning root directory, adding significant meaning beyond the schema.
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 a specific action ('List') with a clear resource ('all markdown files') and scope ('in a directory'), which distinguishes it from sibling tools like list_issues and 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 explains the directory argument (relative to vault root, None for root) but does not explicitly contrast this tool with alternatives like search_vault or read_note, leaving usage guidance implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_issueA
Move an issue to a different stage.
Args:
iss_uniq_id: 8-character unique issue ID.
stage: Target stage folder name. One of:
- "10_Inbox" or "inbox"
- "20_Processing" or "processing"
- "30_ToReview" or "review"
- "999_Finished" or "finished"
Returns:
Confirmation message with new location.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | Yes | ||
| iss_uniq_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the allowed stage values and the return type (confirmation message), but lacks details on error handling, reversibility, permissions, or side effects. More behavioral context would be helpful for a mutation tool.
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 concise and well-structured, with Args and Returns sections. It is front-loaded with the main purpose, and every sentence provides necessary information without redundancy.
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 two-parameter mutation tool, the description covers purpose, parameter details, and return value. It could mention edge cases or prerequisites, but given the simplicity, it is sufficiently 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 input schema has no descriptions (0% coverage). The description fully compensates by explaining both parameters: iss_uniq_id is an 8-character unique ID and stage lists all valid values. This goes well beyond the bare schema.
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 action ('Move an issue') and the resource ('to a different stage'), distinguishing it from create/read/update siblings. The verb 'move' is specific and unambiguous.
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 usage is implied: use when you want to change an issue's stage. However, it does not explicitly compare to alternatives like update_issue, or state when not to use it. There is no exclusion or alternative reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_telegram_updatesB
Poll Telegram for updates and forward them to local webhook.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action (poll and forward) without revealing details like whether this is a continuous or one-shot poll, whether it requires an existing webhook, how errors are handled, or what happens to updates that are already forwarded. This is a minimal 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 description is a single clear, front-loaded sentence with no wasted words. It efficiently conveys the primary action and output in a compact form.
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?
Even though this is a simple no-parameter tool (and an output schema exists), the description lacks essential context about the operational environment. It doesn't mention whether a webhook must already be set, how polling is triggered, or what happens to the updates after forwarding. Given the low complexity, this is still a notable gap for agents deciding when and how to invoke 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?
The input schema has zero parameters, so the baseline is 4 per guidelines. The description adds no parameter-specific meaning, but none is needed; it correctly implies the tool requires no inputs and does what it says.
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 a specific action ('Poll') on a specific resource ('Telegram') with a defined result ('forward them to local webhook'). It is immediately distinguishable from sibling tools like set_telegram_webhook and check_telegram_webhook, which manage webhook configuration rather than polling for updates.
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. The description does not mention prerequisites (e.g., a configured webhook), nor does it exclude situations where polling is inappropriate. Given sibling tools for webhook management, this omission leaves the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_issueA
Read an issue's content by its unique ID.
Args:
iss_uniq_id: 8-character unique issue ID.
Returns:
Full content of the issue file.
| Name | Required | Description | Default |
|---|---|---|---|
| iss_uniq_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must carry the burden of behavioral disclosure. The verb 'Read' clearly indicates a non-mutating operation, and the 'Returns: Full content of the issue file' discloses the output. However, it does not mention potential errors, authentication needs, or what happens if the ID is invalid. This is acceptable for a read operation but leaves some implicit details unaddressed.
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, using a clear structure: a one-sentence purpose statement, then 'Args:' and 'Returns:' sections. Every element earns its place, with no redundancy or padding. The key information is front-loaded, making it easy for an agent to quickly parse.
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 simple read tool with one parameter, the description is quite complete. It states the purpose, explains the parameter, and indicates the return value. The presence of an output schema covers detailed return structure. The main gaps are the lack of explicit error handling descriptions and no mention of authentication requirements, which are minor for a read operation.
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 provides meaningful detail about the single parameter: 'iss_uniq_id: 8-character unique issue ID.' This goes beyond the bare input schema, specifying the format (8 characters) and confirming its role as a unique identifier. Since schema description coverage is 0%, this compensation is valuable and mostly sufficient, though it could elaborate on the exact character set or source of the ID.
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 is highly specific: 'Read an issue's content by its unique ID.' It clearly states the action (read), the resource (issue), and the access method (unique ID). It naturally distinguishes itself from sibling tools like list_issues (which lists issues) and read_note (which reads notes), making the purpose unmistakable.
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 clear usage conditions: when you have an issue's unique ID and need its content. While it does not explicitly mention alternatives or exclusions, the prerequisite (having the ID) and the outcome (getting content) provide clear context. It stops short of naming contrasting siblings like 'create_issue' or 'list_issues', but the guidance is still sufficient for a simple read operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_noteA
Read any note from the vault.
Args:
path: Path relative to vault root (e.g., "50_Protocols/Auth.md").
Returns:
Full content of the note.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation reads and returns full content, which implies a non-destructive action. However, it does not mention error behavior (e.g., missing note), permissions, or any limitations, leaving some behavioral details uncovered.
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, using clear Args and Returns sections. Every sentence contributes necessary information, with no redundant or filler 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?
For a simple single-parameter read operation with an output schema, the description is largely complete: it specifies the input format and return value. It could be slightly richer by noting error cases or constraints, but the simplicity of the tool makes the current coverage adequate.
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 offers only a path string with no description. The description compensates fully by explaining that path is relative to the vault root and provides a concrete example. This adds significant meaning beyond the schema.
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 'Read any note from the vault,' using a specific verb and resource. It distinguishes itself from sibling tools like read_issue (read an issue) and list_notes/search_vault (which list or search rather than read full content).
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 usage when you need to retrieve the full content of a specific note given its path. However, it does not explicitly mention when to use this tool over alternatives like list_notes or search_vault, nor does it provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vaultA
Search through all .md files in the vault.
Auto-detects search type:
- If query contains regex metacharacters (.*+?^${}()|[]\), uses regex search.
- Otherwise, uses case-insensitive keyword search.
Args:
query: Search term or regex pattern.
Returns:
Matching lines in format: filepath:linenum: content
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the auto-detection logic (regex metacharacters trigger regex search, otherwise case-insensitive keyword search) and the return format ('filepath:linenum: content'). It does not mention permissions, performance, or edge cases, but the core behavior is well covered.
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 concisely formatted with a short top-line purpose, bullet points for search detection, and a clear args/returns structure. Every sentence earns its place with no redundancy or 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?
The description provides essential information: purpose, search type detection, parameter meaning, and return format. Minor gaps include whether search is recursive across subfolders and whether regex search is case-sensitive. These are not critical for a simple tool but keep it from a perfect score.
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 only provides a query string with no description. The description adds semantics by defining query as 'Search term or regex pattern' and explains how it affects behavior (regex vs keyword). This fully compensates for the 0% schema coverage.
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 opens with a clear verb and resource: 'Search through all .md files in the vault.' This is specific and distinguishes it from sibling tools like read_note (reading a single note) and list_notes (listing notes). The scope is explicit (all .md files).
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 gives clear context: searching across all markdown files, with automatic regex vs keyword behavior. However, it does not explicitly mention when to use this tool over alternatives like read_note or list_notes, or provide exclusions. It implies usage but lacks direct comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_telegram_webhookB
Set the Telegram bot webhook URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Set', implying a mutation, but does not state whether this overwrites an existing webhook, requires authentication, or has any irreversible effects. This lack of detail is a significant gap for a mutation tool.
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 concise sentence that is direct and easy to read. It avoids redundancy and is appropriately sized for a simple setter, though it lacks additional context that could be expected.
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 low complexity (one parameter) and presence of an output schema, the description is not entirely insufficient. However, it omits usage guidance and behavioral details that would help an agent decide when to invoke this tool, especially with related sibling tools available.
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 a single required parameter 'url' with no description (0% coverage). The description clarifies that this is the webhook URL, but does not explain any constraints like HTTPS requirement or format. It adds minimal meaning beyond the parameter name, so it partially compensates for the lack of schema descriptions.
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 'Set the Telegram bot webhook URL' clearly states the specific action (set) and resource (Telegram bot webhook URL). It distinguishes itself from sibling tools like 'check_telegram_webhook' (checks) and 'poll_telegram_updates' (polls), making its purpose unambiguous.
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 'check_telegram_webhook' or 'poll_telegram_updates'. The description does not mention any prerequisites, side effects, or contexts where setting a webhook is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_issueA
Update an issue's content by its unique ID.
Args:
iss_uniq_id: 8-character unique issue ID.
content: New content to write or append.
append: If True, appends to end of file; otherwise replaces entirely.
Returns:
Confirmation message.
| Name | Required | Description | Default |
|---|---|---|---|
| append | No | ||
| content | Yes | ||
| iss_uniq_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full burden and does disclose key behavioral traits: the append parameter explicitly says it appends to the end of a file versus replacing entirely, and the return value is a confirmation message. It lacks detail on failure modes or permissions, but the core behavior is well covered.
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 concise and well-structured with a one-sentence summary, a bulleted Args list, and a Returns line. Every sentence provides necessary information without redundancy or 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?
The tool is simple, and the description covers the main purpose, all parameters, and return type. An output schema exists, so detailed return values are not needed. It lacks explicit edge-case handling or prerequisites, but for a straightforward update tool, the description is sufficiently 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?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter: iss_uniq_id is an 8-character unique ID, content is the new content to write or append, and append clarifies the append-vs-replace behavior. This adds meaning well beyond the raw schema.
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 immediately states 'Update an issue's content by its unique ID', using a specific verb and resource. It clearly differentiates from sibling tools like create_issue, read_issue, and move_issue by focusing on updating existing content via unique ID.
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 clearly implies when to use the tool (to update an issue's content), but it does not explicitly mention alternatives or exclusions. Since the purpose is unambiguous and the context is clear, it earns a 4 rather than a 5.
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.
12 tool updates
v0.1.0- First observed
check_telegram_webhook - First observed
create_issue - First observed
get_status - First observed
list_issues - First observed
list_notes - First observed
move_issue - First observed
poll_telegram_updates - First observed
read_issue - First observed
read_note - First observed
search_vault - First observed
set_telegram_webhook - First observed
update_issue
TDQS
Every tool has a clearly distinct purpose: issue CRUD and staging, note reading and listing, vault search, status overview, and three separate Telegram webhook operations (check, set, poll). No two tools overlap in function or could be confused for each other.
All tool names follow a consistent verb_noun snake_case pattern (create_issue, read_note, list_issues, set_telegram_webhook, etc.). The verb consistently leads, making the action obvious and the object clear, with no mixed conventions or ambiguous abbreviations.
With 12 tools, the set is well-scoped for a vault management server. Each tool addresses a specific need in issue tracking, note access, search, and Telegram integration; none are redundant or excessive for the intended functionality.
The core issue lifecycle (create, read, update, move between stages, list) is complete, and note reading/searching is well covered. Minor gaps include the lack of an explicit delete operation for issues and no create/update/delete for notes, but these are likely intentional design choices for a vault-based workflow.
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
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables interaction with Obsidian vaults through the official Obsidian CLI, allowing note management, search, and vault operations without plugins or API keys.21MIT
- FlicenseNot gradedqualityCmaintenanceEnables interaction with multiple Obsidian vaults through natural language, supporting note operations, search, and vault management with both REST and filesystem backends.-
- AlicenseAqualityBmaintenanceProvides an AI agent with a searchable markdown notes vault, offering tools to create, read, list, search, update, and delete notes stored as plain .md files.6MIT
- AlicenseNot gradedqualityAmaintenanceEnables LLM clients to read, create, edit, delete, move, and search notes in local Obsidian vaults via direct filesystem access, including tag management and support for multiple vaults.MIT
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/deceptikon/vault-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server