mcp-knowledge-base
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., "@mcp-knowledge-baseSearch my notes for Python"
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.
π§ MCP Knowledge Base Server
A Personal Knowledge Base built as an MCP (Model Context Protocol) server in Python. Connect it to Claude Desktop, Claude Code, VS Code Copilot, Cursor, or any MCP-compatible client β and let your AI assistant manage your notes, tasks, and ideas.
This project teaches you the three core MCP primitives through a practical, useful application:
Primitive | What It Is | Examples in This Project |
Tools | Functions the LLM can call |
|
Resources | Data the LLM can browse |
|
Prompts | Reusable templates |
|
Architecture
βββββββββββββββββββββββ stdio / SSE ββββββββββββββββββββββββ
β MCP Client βββββββββββββββββββββββββββββββΊβ Knowledge Base β
β (Claude Desktop, β JSON-RPC 2.0 messages β MCP Server β
β Claude Code, β β β
β Cursor, etc.) β β ββββββββββββββββ β
β β tools/call βββββββββββββββΊ β β 12 Tools β β
β β resources/read βββββββββββΊ β β 4 Resources β β
β β prompts/get ββββββββββββββΊ β β 4 Prompts β β
βββββββββββββββββββββββ β ββββββββ¬ββββββββ β
β β β
β ββββββββΌββββββββ β
β β SQLite DB β β
β β + FTS5 idx β β
β ββββββββββββββββ β
ββββββββββββββββββββββββRelated MCP server: Memory Bear
Quick Start
Prerequisites
Python 3.11+
uv (modern Python package manager)
# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh1. Clone & Install
cd mcp-knowledge-base
# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv sync2. Verify It Works
uv run test_server.pyYou should see all tests pass β tools, resources, and prompts all registering correctly.
3. Connect to an MCP Client
Option A: Claude Desktop
Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"knowledge-base": {
"command": "uv",
"args": [
"--directory", "/FULL/PATH/TO/mcp-knowledge-base",
"run", "server.py"
]
}
}
}β οΈ Replace
/FULL/PATH/TO/mcp-knowledge-basewith the actual absolute path.
Restart Claude Desktop. You should see a π¨ hammer icon in the chat input β click it to see all 12 tools.
Option B: Claude Code
# From the project directory
claude mcp add knowledge-base -- uv run server.py
# Or globally
claude mcp add --scope user knowledge-base -- uv --directory /FULL/PATH/TO/mcp-knowledge-base run server.pyThen in Claude Code, your knowledge base tools are available automatically.
Option C: Cursor / VS Code
Add to your .cursor/mcp.json or VS Code MCP settings:
{
"mcpServers": {
"knowledge-base": {
"command": "uv",
"args": ["--directory", "/FULL/PATH/TO/mcp-knowledge-base", "run", "server.py"]
}
}
}What You Can Do
Once connected, try these conversations with Claude:
Notes
"Save a note about what I learned about MCP today β it uses JSON-RPC 2.0, has three primitives (tools, resources, prompts), and the Python SDK uses FastMCP for the high-level API."
"Search my notes for anything about Python"
"Show me all my notes tagged with 'learning'"
Tasks
"Add a task: Build a multi-agent system with CrewAI, high priority, due next Friday"
"What are my urgent tasks?"
"Mark task #3 as done"
Prompts (Workflows)
"Run my daily review" β triggers the
daily_reviewprompt
"Help me plan my week" β triggers
weekly_planning
"I want to capture what I learned about Docker" β triggers
capture_learning
Stats
"Give me an overview of my knowledge base"
Project Structure
mcp-knowledge-base/
βββ server.py # The MCP server β all tools, resources, prompts
βββ test_server.py # Test client to verify everything works
βββ pyproject.toml # Project config and dependencies
βββ README.md # You are hereData is stored in ~/.mcp-knowledge-base/knowledge.db (SQLite with FTS5 full-text search).
Key Concepts You'll Learn
1. Tools (the most important primitive)
Tools are Python functions decorated with @mcp.tool(). The MCP SDK automatically generates the JSON schema from your type hints and docstrings:
@mcp.tool()
def add_note(title: str, content: str, tags: list[str] | None = None) -> dict:
"""Create a new note in the knowledge base."""
...The LLM sees this as a callable function with typed parameters. Good docstrings = better tool use.
2. Resources (browsable data)
Resources are URIs the LLM can read, like a file system:
@mcp.resource("kb://notes/{note_id}")
def resource_single_note(note_id: int) -> str:
"""Full content of a specific note."""
...3. Prompts (workflow templates)
Prompts are pre-written instructions that guide the LLM through multi-step workflows:
@mcp.prompt()
def daily_review() -> str:
"""Generate a daily review of all open tasks and recent notes."""
return "Please review my current tasks and recent notes..."4. Full-Text Search with FTS5
SQLite's FTS5 extension gives you fast, relevance-ranked search across all your notes β no external search engine needed.
5. Transport Modes
stdio (default): The client spawns the server as a subprocess. Used by Claude Desktop, Claude Code, Cursor.
SSE: Server runs as an HTTP endpoint. Used by web-based clients.
Extending This Project
Here are ideas to keep building:
Add a
web_cliptool β save content from URLs as notes (usehttpx+BeautifulSoup)Add reminders β tasks with due dates that surface automatically
Add note linking β
[[wiki-style]]links between notesAdd export tools β export notes as Markdown files or a PDF
Add an embedding-based search β use OpenAI/Anthropic embeddings for semantic search alongside FTS5
Add OAuth β protect your server when running over SSE (the June 2025 MCP spec update covers this)
Deploy to the cloud β run on Cloudflare Workers, Fly.io, or Railway with Streamable HTTP transport
Troubleshooting
Issue | Fix |
Claude Desktop doesn't show tools | Restart Claude Desktop after editing config. Check the config path is correct. |
| Run |
Server crashes on startup | Check Python version: |
FTS search returns nothing | FTS index only covers notes added after the table was created |
Database locked errors | Make sure only one instance of the server is running |
Resources
FastMCP β the high-level API (v1 is built into the official SDK)
MCP Server Registry β discover community servers
MCP Specification (Nov 2025) β the full protocol spec
License
MIT β use this however you want. Build on it, learn from it, ship it.
Available Tools
11 toolsadd_noteA
Create a new note in the knowledge base.
Args: title: A short descriptive title for the note. content: The full body/content of the note (supports markdown). tags: Optional list of tags for categorization (e.g. ["python", "tutorial"]).
Returns: The newly created note with its assigned ID.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| content | 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. It discloses that content supports markdown and that it returns the newly created note with its ID, but it does not mention authorization requirements, potential errors, or side effects. This adds some transparency but is not exhaustive.
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, front-loaded with the purpose, and clearly structured with Args and Returns sections. Every sentence adds value; there is no filler or repetition of schema properties without added meaning.
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 create operation with three parameters and no output schema, the description covers the purpose, parameters, and return value adequately. It lacks explicit usage guidelines, but the low complexity and clear parameter documentation make it sufficiently complete for an agent.
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 0% description coverage, and the description fully compensates by explaining each parameter: title (short descriptive), content (full body, supports markdown), and tags (optional list with an example). This goes well beyond the schema, providing essential 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 'Create a new note in the knowledge base' with a specific verb and resource. It distinguishes from sibling tools like add_task by specifying 'note' as the object, making the tool's 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?
The description implies usage for creating new notes but does not explicitly mention when to use it over alternatives or provide exclusions. The purpose itself is clear, but no alternative guidance is given, such as 'use update_note for modifying existing notes.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_taskA
Create a new task.
Args: title: Short task title. description: Detailed description of what needs to be done. priority: One of "low", "medium", "high", or "urgent". due_date: Optional due date in ISO format (YYYY-MM-DD). tags: Optional list of tags.
Returns: The newly created task.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| due_date | No | ||
| priority | No | medium | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states the action ('create') and the return value ('the newly created task'). It does not disclose side effects, permissions, validation behavior, or error conditions, leaving the agent with limited 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 appropriately concise, front-loaded with the purpose, and uses a clear Args/Returns structure. Every sentence adds value with no 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?
Given the tool's simplicity (5 flat parameters, no output schema, no annotations), the description covers all required input semantics and states the return value. This is sufficient for an agent to select and invoke the 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 coverage is 0%, but the Description's 'Args' section explains each parameter: title, description, priority with allowed values, due_date with ISO format, and tags as optional. This fully compensates for the schema's lack of 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 opens with 'Create a new task,' which is a specific verb+resource action. It clearly distinguishes from siblings like list_tasks, update_task, and delete_task by focusing on creation.
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 instead of alternatives. The usage is implied by the 'create' purpose, but there are no exclusions or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteA
Delete a note by ID.
Args: note_id: The ID of the note to delete.
Returns: True if the note was deleted, False if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return behavior (True if deleted, False if not found), which is useful. However, with no annotations, it omits details about permanence, permissions, or side effectsβimportant context for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with a one-line purpose and clear Args/Returns sections. Every sentence earns its place, and no unnecessary detail is included.
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 delete operation, the description covers the purpose, parameter role, and return behavior. The output schema is indicated to exist, so return value handling is adequate. No significant gaps remain.
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 declares note_id as an integer, but the description explains it as 'The ID of the note to delete,' adding meaningful semantics. This compensates for the 0% schema description coverage, though the explanation is minimal.
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 the specific verb 'Delete' and identifies the resource as 'note' with a clear method ('by ID'). This unambiguously distinguishes it from sibling tools like update_note or delete_task.
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 intended usage is implied: use when you have a note ID to delete. However, the description does not explicitly state when to use this tool over alternatives, nor does it mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskA
Delete a task by ID.
Args: task_id: The ID of the task to delete.
Returns: True if deleted, False if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| task_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 of behavioral disclosure. It does disclose the return value semantics ('True if deleted, False if not found'), which is useful. However, it omits other behaviors such as whether deletion is permanent, cascading effects, or permission requirements. The disclosed behavior is minimal but non-contradictory.
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 clear sections for Args and Returns. Every sentence earns its place; there is no fluff or repetition. It front-loads the core purpose and provides exactly the necessary details.
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 one-parameter delete tool, the description is largely complete: it states the purpose, parameter, and return behavior. No output schema is needed because the return is described. It lacks usage guidelines, but that is already penalized in its own dimension. Given the tool's simplicity, the description covers the essential aspects adequately.
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 explicitly explains the only parameter: 'task_id: The ID of the task to delete.' This adds clear semantic meaning beyond the schema's bare type/title, even though the parameter name is fairly intuitive. The description fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Delete a task by ID.' It uses a specific verb ('Delete') and resource ('task'), and distinguishes itself from sibling tools like delete_note and update_task. The purpose is 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. There is no mention of prerequisites, when deletion is appropriate, or any exclusion conditions. The description only states what the tool does, not when it should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteA
Retrieve a single note by ID.
Args: note_id: The unique ID of the note.
Returns: The note if found, or None.
| Name | Required | Description | Default |
|---|---|---|---|
| note_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 carries the burden of behavioral disclosure. It explicitly states 'Returns: The note if found, or None,' which clearly communicates the behavior when the note is missing. It also uses 'Retrieve' to imply a read-only operation, adding useful transparency.
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 standard Args/Returns format. Every sentence adds value, and there is no redundant information. It is front-loaded with the action and purpose.
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?
This is a simple single-parameter tool with an output schema available. The description covers the essential behavior, including the not-found case, and is complete enough for an agent to use correctly. A slightly more explicit usage guideline would have made it 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?
Schema description coverage is 0%, so the description must compensate. It explains 'note_id: The unique ID of the note,' which adds semantic meaning beyond the schema's plain 'integer' type and title. This fully clarifies the parameter's 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?
The description clearly states 'Retrieve a single note by ID.' This is a specific verb+resource pair that distinguishes it from sibling tools like list_notes (all notes) and search_notes (search). It unambiguously indicates the operation.
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 have a note ID and need a single note, but it does not explicitly contrast with alternatives or state when not to use it. No exclusions or alternative suggestions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsA
Get an overview of the knowledge base: counts of notes and tasks by status.
Returns: Dictionary with note count, task counts by status, and tag frequencies.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It clearly states the return value: 'Dictionary with note count, task counts by status, and tag frequencies.' It doesn't mention side effects (likely read-only is implied by 'get') or any caveats, but for a zero-parameter stats tool, the output description provides adequate transparency.
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: two sentences front-load the purpose and then specify the return structure. Every word adds value, 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?
Given the tool's simplicity (no parameters, no output schema), the description provides sufficient detail on what is returned (note count, task counts by status, tag frequencies). It could be slightly richer by mentioning whether statuses are filtered or if tag frequencies are top-N, but it is complete enough for an agent to use the tool effectively.
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, so the input schema is empty. Descriptions of parameters are unnecessary. The baseline of 4 for zero-parameter tools applies, and the description correctly omits any parameter details.
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 function: 'Get an overview of the knowledge base: counts of notes and tasks by status.' This specifies the verb (get), resource (overview), and the kind of data returned. It distinguishes itself from sibling CRUD tools (add_note, search_notes, etc.) by focusing on aggregate statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for an overview/statistics) versus siblings which handle individual notes/tasks. It doesn't explicitly mention alternatives, but the purpose is clear enough that an agent would know it's for summary data rather than item-level operations.
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 notes, optionally filtered by a tag.
Args: tag: If provided, only return notes containing this tag. limit: Maximum number of notes to return (default 20).
Returns: List of notes, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | 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 order ('newest first') and the limit/default behavior, but it does not clarify what 'containing this tag' means or discuss edge cases like absent notes.
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 brief and cleanly structured with Args and Returns sections. Every sentence adds functional information with no unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters, the description covers purpose, parameters, and return ordering. An output schema exists to detail note fields, but the exact tag-matching behavior remains ambiguous.
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), but the Args section fully explains both parameters: tag filters by tag, and limit caps the result count with a default of 20. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and resource ('notes'), and states the optional tag filter. This clearly distinguishes it from siblings like get_note, search_notes, and list_tasks.
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 indicates the tool lists notes but gives no explicit guidance on when to prefer it over siblings like search_notes or get_note. The usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksA
List tasks with optional filters.
Args: status: Filter by status ("todo", "in_progress", or "done"). priority: Filter by priority ("low", "medium", "high", "urgent"). tag: Filter by a specific tag.
Returns: List of matching tasks ordered by priority then due date.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| status | No | ||
| priority | 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 provided, the description carries the behavioral context. It discloses that results are ordered by priority then due date and that filters are optional. It does not explicitly state side effects (none expected) or error handling, but the ordering and filter behavior are valuable for a read-only list 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 front-loaded with the purpose, followed by clear, bullet-like parameter descriptions and a return summary. Every sentence earns its place with no 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?
The description explains the tool's purpose, filter options, and output ordering. It lacks explicit mention of pagination or exact-match behavior for tag, but given the presence of an output schema and the simplicity of the operation, the description is sufficiently complete for a list tasks tool.
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 provides only parameter names, but the description adds meaningful constraints: status and priority allowed values, and tag as a filter. This fully compensates for the 0% schema description coverage and makes the parameters actionable.
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 'List tasks with optional filters,' which uses a specific verb and resource. It clearly distinguishes the tool from siblings like list_notes or get_stats by naming the operation and object type.
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 for retrieving multiple tasks but does not explicitly state when to use this tool versus alternatives or when not to use it. No exclusions or alternative tool references are provided, leaving guidance at an implied level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesA
Full-text search across all notes (titles, content, and tags).
Args: query: Search query string. Supports FTS5 syntax (e.g. "python OR rust"). limit: Maximum number of results to return (default 10).
Returns: List of matching notes ranked by relevance.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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. It discloses what is searched (titles, content, tags), the return format (list ranked by relevance), and the FTS5 syntax support. It does not mention potential side effects or rate limits, but as a read-only search tool, the description adequately covers the key behavioral traits beyond what schema provides.
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, front-loaded with the core purpose, then structured into Args and Returns sections. Each sentence provides essential information without redundancy or fluff. The format is easy to scan and directly useful for an agent.
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 a relatively simple purpose and an output schema present, the description covers the essential aspects: what is searched, how to use the parameters, and what to expect in return. It also gives a concrete syntax example. No significant gaps remain for an agent to interpret correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does exceptionally. It explains 'query' as a search string with FTS5 syntax example, and 'limit' as a maximum result count with default. This adds meaning far beyond the raw schema types and names, making the parameters self-explanatory.
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 'Full-text search across all notes (titles, content, and tags),' which specifies the verb (search) and resource (notes) and indicates the scope. This distinguishes it from siblings like list_notes, which likely lists without search. The purpose is direct 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 description provides clear context: it is for full-text searching across all notes, with support for FTS5 syntax. It does not explicitly name alternatives or exclusions (e.g., 'use list_notes to see all notes without filtering'), but the function is clearly differentiated from sibling tools by its search-specific nature. This meets the 'clear context, no exclusions' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteA
Update an existing note. Only provided fields are changed.
Args: note_id: The ID of the note to update. title: New title (optional). content: New content (optional). tags: New tags list (optional).
Returns: The updated note, or None if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| content | No | ||
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond basic CRUD: partial updates ('Only provided fields are changed') and the return behavior ('The updated note, or None if not found'). With no annotations provided, the description carries this burden effectively, though it omits details like handling of null values or permissions.
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-sentence purpose, then Args, then Returns. Every sentence contributes value, with no redundancy or filler. It is properly front-loaded.
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 CRUD tool, the description covers purpose, parameters, and return values, and it includes an output schema. The only minor gap is that it does not explicitly state how null values are handled for the optional fields (e.g., whether passing null clears the field or leaves it unchanged), which could affect 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?
The Args section explicitly explains each parameter (note_id, title, content, tags) and their optionality, which is essential since the input schema has no descriptions (0% coverage). This adds significant meaning beyond the structured schema, making it easy for the agent to construct valid calls.
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 'Update an existing note' which identifies the specific verb and resource. It also distinguishes itself from sibling tools like add_note, get_note, and delete_note by focusing on modification.
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 for when to use the tool ('Update an existing note') and the partial-update semantics ('Only provided fields are changed'). However, it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskA
Update a task. Only provided fields are changed.
Args: task_id: The ID of the task to update. title: New title (optional). description: New description (optional). status: New status: "todo", "in_progress", or "done" (optional). priority: New priority: "low", "medium", "high", or "urgent" (optional). due_date: New due date in ISO format (optional). tags: New tags list (optional).
Returns: The updated task, or None if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| status | No | ||
| task_id | Yes | ||
| due_date | No | ||
| priority | No | ||
| description | 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 burden of behavioral disclosure. It reveals that only provided fields are changed and that the return value is the updated task or None if not found. This covers key behavior, though it doesn't discuss reversibility, permissions, or how to clear a field by passing null.
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 well-structured with a clear summary, an Args list, and a Returns section. Every sentence provides useful information, and the formatting is scannable. There is no redundancy with the schema because the schema lacks descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, no annotations, output schema present), the description covers all parameters and the main return behavior. However, it does not explain whether passing null clears a field (given the schema's nullable defaults), which is a subtle but relevant usage detail for updating tasks.
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, so the description fully compensates by explaining each parameter, including allowed enums for status and priority, the ISO format requirement for due_date, and the meaning of 'new' for each field. This goes far beyond the schema's bare types.
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 'Update a task' with the specific behavior 'Only provided fields are changed.' This distinguishes it from sibling tools like add_task, list_tasks, and delete_task, which cover different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (to modify an existing task) and explicitly notes partial-update semantics. It does not explicitly name sibling alternatives or exclusions, but the context is clear enough for an agent to select it over add/list/delete.
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.
11 tool updates
v1.0.0- First observed
add_note - First observed
add_task - First observed
delete_note - First observed
delete_task - First observed
get_note - First observed
get_stats - First observed
list_notes - First observed
list_tasks - First observed
search_notes - First observed
update_note - First observed
update_task
TDQS
Every tool targets a distinct resource and action: notes vs. tasks, with separate CRUD and list/search operations. get_stats provides an overview, and there is no ambiguity between note and task operations.
All tool names follow a consistent verb_noun snake_case pattern (add_note, list_tasks, delete_note, etc.). The naming is uniform and predictable across the entire set.
11 tools is well-scoped for a knowledge base managing notes and tasks. Each tool covers a distinct operation, and there are no redundant or unnecessary tools.
Notes have full CRUD plus search. Tasks have add, list, update, and delete, but lack a dedicated get_task by ID (though list_tasks can filter). This is a minor gap that agents can work around.
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
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.14MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that transforms markdown notes into a searchable knowledge base with semantic search, smart note creation, and flashcard management for AI assistants.1-
- AlicenseAqualityBmaintenanceA personal notes MCP server that allows AI assistants to create, search, edit, and manage notes stored in a local SQLite database.6MIT
- AlicenseNot gradedqualityCmaintenanceA lightweight personal wiki MCP server that allows AI assistants to save, search, and link markdown notes with backlinks and full-text search, functioning as a file-based second brain.1MIT
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/vishnu-vasan/mcp-knowledge-base'
If you have feedback or need assistance with the MCP directory API, please join our Discord server