Knowledge Base MCP Server
Supports file synchronization of the markdown-based knowledge base across devices through Dropbox cloud storage
Enables version control for the knowledge base, providing change history tracking, backup capabilities, and collaboration features for markdown notes
Supports file synchronization of the markdown-based knowledge base across devices through Google Drive cloud storage
Supports file synchronization of the markdown-based knowledge base across devices through iCloud Drive cloud storage
Provides full compatibility with Obsidian for viewing and editing markdown notes, allowing seamless integration between AI-managed knowledge base and Obsidian's visualization and mobile access features
Supports decentralized file synchronization of the markdown-based knowledge base across devices without relying on cloud services
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Knowledge Base MCP Serversearch for meeting notes about the Q3 product launch"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Knowledge Base MCP Server
A Model Context Protocol (MCP) server for managing a personal markdown-based knowledge base. Enable AI assistants like Claude to read, search, and update your notes naturally.
Overview
This MCP server provides AI-native access to a personal knowledge base stored as markdown files with YAML frontmatter. It allows you to:
Create and organize notes across multiple categories
Search through your knowledge base using natural language
Update and maintain notes with AI assistance
Keep all data in human-readable, portable markdown format
Access your notes from Claude Desktop, Claude Code, or any MCP-compatible client
NEW: Browse and edit notes via the included web UI
Related MCP server: mcp-vault-reader
Features
Core Capabilities
7 MCP Tools for complete knowledge base management
add_note- Create new notessearch_notes- Search by content, tags, or categoryget_note- Retrieve full note contentupdate_note- Modify existing notes (replace or append)list_notes- List notes with optional filtersdelete_note- Remove notes (with backup)list_categories- View all categories and counts
Smart Search with relevance scoring
Search across titles, content, tags, and metadata
Case-insensitive matching
Filter by category or tags
Ranked results by relevance
Flexible Organization
Default categories: people, recipes, meetings, procedures, tasks
Configurable category system
Tag-based organization
Rich metadata support
Data Safety
Automatic backups before updates
Atomic file writes
Human-readable markdown format
No vendor lock-in
Web UI (Phase 2)
Clean, dark-themed interface
Category navigation and search
Note creation and editing
Authentication with JWT tokens
Works on desktop and mobile browsers
Installation
Prerequisites
Python 3.11 or higher
uvpackage manager (recommended) orpip
Install with uv (Recommended)
# Clone the repository
git clone <repository-url>
cd knowledge-base-mcp
# Install dependencies
uv sync
# The server is now ready to useInstall with pip
# Clone the repository
git clone <repository-url>
cd knowledge-base-mcp
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in development mode
pip install -e .Running the Server
This project provides two ways to run the knowledge base:
Option 1: MCP Server (for Claude Desktop/Code)
The MCP server runs via stdio and is designed to be used with Claude Desktop or Claude Code.
Start the MCP server:
# Using uv
uv run knowledge-base-server
# Using pip/venv
knowledge-base-serverThe MCP server will:
Listen on stdin/stdout for MCP protocol messages
Wait for commands from an MCP client (like Claude Desktop)
Not show a web interface or HTTP endpoint
Note: The MCP server is typically not run standalone. Instead, configure it in Claude Desktop (see Configuration section below) and let Claude Desktop manage the server lifecycle.
Option 2: HTTP API Server (for Web/API Access)
The HTTP API server provides a web interface and REST API.
Quick Start (No Authentication):
By default, authentication is disabled for easy local development. Just run:
# Using uv
uv run knowledge-base-api
# Using pip/venv
knowledge-base-api
# Or run directly with uvicorn
uvicorn api.main:app --host 0.0.0.0 --port 8000 --reloadThe API server will start on http://localhost:8000 with:
Web UI:
http://localhost:8000(if web files exist)API Docs:
http://localhost:8000/docs(Swagger UI)Alternative Docs:
http://localhost:8000/redoc(ReDoc)Health Check:
http://localhost:8000/health
Using the API (No Auth):
# Create a note
curl -X POST http://localhost:8000/notes \
-H "Content-Type: application/json" \
-d '{"title": "My Note", "content": "Hello World", "category": "people", "tags": ["test"]}'
# List all notes
curl http://localhost:8000/notes
# Search notes
curl "http://localhost:8000/search?q=hello"Optional: Enable Authentication
To enable authentication (recommended for production), create a .env.local file:
# Enable authentication
REQUIRE_AUTH=true
# Required when auth is enabled
JWT_SECRET_KEY=your-secret-key-here-change-this-in-production
# Optional - AI features
ANTHROPIC_API_KEY=sk-ant-xxxxx
# Optional - custom paths
KNOWLEDGE_BASE_PATH=~/knowledge-base
CATEGORIES=people,recipes,meetings,procedures,tasks
# Optional - server settings
API_HOST=0.0.0.0
API_PORT=8000
DEBUG=falseGenerate a secure JWT secret:
# On Linux/macOS
openssl rand -hex 32
# Or use Python
python -c "import secrets; print(secrets.token_hex(32))"Using the API with Authentication:
When REQUIRE_AUTH=true, you need to authenticate:
Create an account:
curl -X POST http://localhost:8000/auth/signup \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "your-password", "full_name": "Your Name"}'Login to get a token:
curl -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "your-password"}'Use the token for authenticated requests:
curl http://localhost:8000/notes \
-H "Authorization: Bearer YOUR_TOKEN_HERE"Configuration
Environment Variables
Create a .env file in the project root (optional):
# Knowledge base location (default: ~/knowledge-base)
KNOWLEDGE_BASE_PATH=~/knowledge-base
# Categories (comma-separated)
CATEGORIES=people,recipes,meetings,procedures,tasks
# Server settings
SERVER_NAME=Knowledge Base
LOG_LEVEL=INFOClaude Desktop Setup
Add the server to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"knowledge-base": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/knowledge-base-mcp",
"run",
"knowledge-base-server"
]
}
}
}Alternative (using pip/venv):
{
"mcpServers": {
"knowledge-base": {
"command": "/absolute/path/to/venv/bin/python",
"args": [
"-m",
"knowledge_base_mcp.server"
],
"env": {
"KNOWLEDGE_BASE_PATH": "/path/to/your/knowledge-base"
}
}
}
}After configuration, restart Claude Desktop.
Web UI Access
The knowledge base includes a web interface for browsing and editing notes from any browser.
Starting the Web Server
# Make sure you're in the project directory
cd knowledge-base-mcp
# Start the FastAPI server (default port 8000)
uvicorn api.main:app --host 0.0.0.0 --port 8000
# Or use the configuration from .env
python -m api.mainFirst Time Setup
Open your browser to
http://localhost:8000Click "Create Account" to sign up
Enter your email and password (minimum 8 characters)
Login with your credentials
Start creating and organizing notes!
Features
Category Navigation: Browse notes by category with note counts
Full-Text Search: Search across all notes and tags in real-time
Note Editor: Clean markdown editor with auto-save warnings
Create/Edit/Delete: Full CRUD operations on notes
Tag Management: Organize notes with comma-separated tags
Responsive Design: Works on desktop and mobile browsers
Mobile Access
To access from your phone on the same network:
# Start server listening on all interfaces
uvicorn api.main:app --host 0.0.0.0 --port 8000
# Then access from phone using your computer's IP
# Example: http://192.168.1.100:8000For remote access, consider using Tailscale or deploying to a cloud service.
Usage
MCP Tool Usage
Example Interactions
Adding Notes
You: "I just met Sarah Chen at a conference. She works at Tesla on battery
tech and is interested in our AI product. Tag this as important."
Claude: [Calls add_note tool]
✓ Note 'Sarah Chen' created in people/
File: sarah-chen.md
Tags: conference, tesla, importantSearching
You: "Who did I meet that works on batteries?"
Claude: [Calls search_notes with query="batteries"]
Found 1 result(s):
[people] Sarah Chen [conference, tesla, batteries, important]
Battery engineer at Tesla. Met at tech conference. Interested in AI...Retrieving Notes
You: "Show me my note about Sarah Chen"
Claude: [Calls get_note tool]
# Sarah Chen
**Category:** people
**Tags:** conference, tesla, batteries, important
**Date:** 2025-10-21
---
Battery engineer at Tesla...Updating Notes
You: "Add to Sarah Chen's note that we scheduled a call for next Tuesday"
Claude: [Calls update_note with append=True]
✓ Note 'Sarah Chen' updated successfully
Category: people
Last updated: 2025-10-22Quick Reference
You: "How long do I cook brussels sprouts in the air fryer?"
Claude: [Calls search_notes with query="brussels sprouts"]
Found 1 result(s):
[recipes] Brussels Sprouts [quick, vegetables, air-fryer]
Cook at 400°F for 15-18 minutes, shake halfway through...Knowledge Base Structure
Your knowledge base is stored as markdown files in a simple folder structure:
~/knowledge-base/
├── people/
│ ├── sarah-chen.md
│ ├── john-doe.md
│ └── ...
├── recipes/
│ ├── brussels-sprouts.md
│ ├── chocolate-cake.md
│ └── ...
├── meetings/
│ └── q4-planning.md
├── procedures/
│ └── onboarding-checklist.md
└── tasks/
└── launch-preparation.mdMarkdown Format
Each note is a markdown file with YAML frontmatter:
---
tags: [conference, tesla, batteries, important]
date: 2025-10-21
category: people
company: Tesla
role: Battery Engineer
email: sarah.chen@tesla.com
---
# Sarah Chen
**Met:** Tech Conference 2025, Silicon Valley
**Contact:** sarah.chen@tesla.com
## Notes
Interested in our AI product for battery optimization.
Has budget approval for Q1 2026.
## Follow-up
- [ ] Send demo link by end of week
- [ ] Schedule call for next TuesdayMetadata Fields
Required:
tags: List of tags for categorizationdate: Creation date (YYYY-MM-DD)category: Category folder name
Optional (category-specific):
People:
company,role,email,phoneRecipes:
prep_time,cook_time,servingsMeetings:
attendees,meeting_date,locationTasks:
priority,due_date,status
You can add any custom metadata fields as needed.
Development
Running Tests
# With uv
uv run pytest
# With pip
pytest
# Run specific test file
pytest tests/test_storage.py
# Run with coverage
pytest --cov=knowledge_base_mcp tests/Project Structure
knowledge-base-mcp/
├── src/
│ └── knowledge_base_mcp/
│ ├── __init__.py
│ ├── server.py # MCP server and tools
│ ├── storage.py # File operations
│ ├── search.py # Search functionality
│ └── models.py # Data models
├── tests/
│ ├── test_server.py # Integration tests
│ ├── test_storage.py # Storage layer tests
│ └── test_search.py # Search tests
├── examples/
│ └── sample-notes/ # Example notes
├── pyproject.toml # Project configuration
└── README.mdAdding Custom Categories
Edit your .env file or environment configuration:
CATEGORIES=people,recipes,meetings,procedures,tasks,books,articles,ideasThe server will automatically create folders for new categories.
Troubleshooting
Common Issues
Server not appearing in Claude Desktop:
Verify the path in
claude_desktop_config.jsonis absoluteCheck that the command path is correct (
uvor python path)Restart Claude Desktop completely
Check Claude Desktop logs for errors
Notes not being created:
Verify
KNOWLEDGE_BASE_PATHexists and is writableCheck file permissions
Ensure category is valid (use
list_categoriestool)
Search not finding notes:
Verify notes have proper YAML frontmatter
Check that tags are formatted as lists
Try searching with simpler queries
Use
list_notesto see what notes exist
Permission errors:
Ensure the knowledge base directory has write permissions
On macOS, you may need to grant Claude Desktop disk access in System Preferences
Viewing Logs
Claude Desktop logs can help diagnose issues:
macOS:
~/Library/Logs/Claude/Windows:
%APPDATA%\Claude\logs\Linux:
~/.config/Claude/logs/
Use Cases
Conference CRM
Track people you meet at conferences with contact info, notes, and follow-up tasks.
Recipe Collection
Store recipes with tags, cook times, and personal notes about modifications.
Meeting Notes
Keep meeting agendas, discussion points, and action items organized by topic.
Procedure Documentation
Maintain step-by-step procedures and checklists for recurring tasks.
Task Management
Track projects, deadlines, and task lists with priorities and status.
Integration with Other Tools
Obsidian
The markdown format is fully compatible with Obsidian. You can:
Open the knowledge base in Obsidian
Edit notes in either Obsidian or via Claude
Use Obsidian mobile for on-the-go access
Sync via Obsidian Sync or iCloud
Git Version Control
Consider adding git version control to your knowledge base:
cd ~/knowledge-base
git init
git add .
git commit -m "Initial knowledge base"This provides:
Version history of all changes
Ability to revert changes
Backup to remote repository
Collaboration capabilities
File Sync
Use any file sync service:
iCloud Drive
Dropbox
Google Drive
Syncthing
Roadmap
Phase 2 Features (Planned)
HTTP API for web and mobile access
Web UI for browsing and editing
AI pendant integration via webhooks
Automatic summarization and insights
Calendar integration
Email integration
Future Considerations
Multi-user support
Real-time collaboration
Advanced search with embeddings
Automatic tagging suggestions
Template system for note types
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Add tests for new functionality
Ensure all tests pass
Submit a pull request
License
MIT License - see LICENSE file for details
Support
Report issues: [GitHub Issues]
Documentation: MCP Documentation
Community: [MCP Discord]
Acknowledgments
Built with:
Made with Claude Code
Available Tools
11 toolsadd_noteB
Create a new note in the knowledge base (supports hierarchical categories)
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | Yes | Category path (e.g., 'work', 'work/clients/acme', 'personal/spiritual'). Category will be created if it doesn't exist. | |
| title | Yes | Note title (becomes filename) | |
| content | Yes | Markdown content of the note | |
| tags | No | Comma-separated tags (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool creates a note and supports hierarchical categories, but doesn't mention permissions required, whether the operation is idempotent, error handling, or what happens on success/failure. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Create a new note in the knowledge base') and adds a useful detail ('supports hierarchical categories') without unnecessary elaboration. Every word earns its place, making it easy for an agent to parse quickly.
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 moderate complexity (a mutation with 4 parameters) and no annotations or output schema, the description is minimally adequate. It covers the basic purpose and hints at category behavior, but lacks details on behavioral traits, error cases, or output format. For a creation tool in a knowledge base context, more completeness would be helpful, but it meets the minimum viable threshold.
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 100%, so the input schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema—it doesn't explain parameter interactions, constraints, or examples. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
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 ('Create a new note') and resource ('in the knowledge base'), which is specific and unambiguous. It also mentions support for hierarchical categories, which adds useful context. However, it doesn't explicitly differentiate from sibling tools like 'create_category' or 'update_note', which would be needed for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_category' (for categories only) or 'update_note' (for modifying existing notes). It mentions hierarchical categories but doesn't clarify if this is the only way to add notes or if there are prerequisites. Without explicit when/when-not instructions, the agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_categoryC
Create a new category or subcategory in the knowledge base
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | Yes | Category path (e.g., 'work', 'work/clients', 'personal/spiritual/devotionals'). Use forward slashes for nested categories. | |
| description | No | Optional description for the category |
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 states the tool creates categories but doesn't mention potential side effects (e.g., if creating duplicates is allowed, what permissions are required, or how errors are handled). This is insufficient for a mutation tool, as it leaves critical behavioral traits unspecified.
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 sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded and efficiently conveys the core functionality, making it easy for an agent to parse and understand quickly.
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 complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like error conditions, return values, or interaction with sibling tools. For a tool that modifies data, more context is needed to ensure safe and correct usage by 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 description adds no parameter-specific information beyond what the input schema already provides. Since schema description coverage is 100%, the baseline score is 3. The description doesn't elaborate on parameter usage, such as examples for 'category_path' beyond what's in the schema, so it doesn't add extra value.
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 ('Create') and resource ('new category or subcategory in the knowledge base'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'move_category' or 'rename_category', which also involve category modifications, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't mention whether to use 'create_category' for new categories versus 'move_category' for reorganizing existing ones, or if there are prerequisites like parent categories needing to exist first. This lack of context leaves the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_categoryC
Delete a category and optionally all its contents
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | Yes | Category path to delete (e.g., 'work/clients/acme') | |
| confirm | No | Must be true to delete non-empty category (safety check) | |
| recursive | No | If true, delete all subcategories and notes (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It hints at destructive behavior ('delete') and optional recursion, but lacks details on permissions, irreversibility, error conditions, or response format. This is inadequate for a mutation tool with significant impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the core action and includes a key optional behavior, making it appropriately sized and structured.
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 destructive mutation tool with no annotations and no output schema, the description is incomplete. It fails to address critical aspects like safety warnings, confirmation requirements beyond the 'confirm' parameter, or what happens upon success/failure, leaving significant gaps for agent 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 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond implying recursion affects 'contents', but this is already covered in the schema's 'recursive' description. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('a category'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'move_category' or 'rename_category' in terms of destructive nature, though the action is distinct.
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 (e.g., 'move_category' or 'rename_category' for reorganization instead of deletion). The description mentions optional content deletion but doesn't specify scenarios or prerequisites for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteC
Delete a note from the knowledge base
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | Yes | Category path (e.g., 'work/clients/acme') | |
| title | Yes | Note title |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Delete') but doesn't describe consequences (e.g., irreversible deletion, no confirmation prompt), permissions required, error conditions (e.g., if note doesn't exist), or response format. For a destructive tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It is appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a destructive deletion tool), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like irreversibility, permissions, or error handling, which are critical for safe tool invocation. The description should do more to compensate for missing structured data.
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 100%, with both parameters ('category_path' and 'title') clearly documented in the schema. The description adds no parameter-specific information beyond what the schema provides. According to rules, when coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('a note from the knowledge base'), making the purpose unambiguous. It distinguishes this from siblings like 'add_note', 'update_note', or 'get_note' by specifying deletion. However, it doesn't explicitly differentiate from 'delete_category', which targets a different resource 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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the note must exist), exclusions (e.g., cannot delete notes in read-only categories), or comparisons to siblings like 'delete_category' or 'update_note'. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteC
Retrieve the full content of a specific note
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | Yes | Category path (e.g., 'work/clients/acme') | |
| title | Yes | Note title (can use full filename or friendly title) |
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 states the tool retrieves content but does not mention potential errors (e.g., if the note doesn't exist), permissions required, rate limits, or the format of the returned content. This leaves significant gaps in understanding how the tool behaves beyond its basic function.
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, direct sentence that efficiently conveys the core purpose without any unnecessary words. It is front-loaded with the key action and resource, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool that retrieves data. It does not explain what is returned (e.g., note content, metadata, error handling), which is critical for an agent to use the tool effectively. The high schema coverage helps with inputs, but the overall context is insufficient.
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 100% description coverage, clearly documenting both required parameters ('category_path' and 'title') with examples. The description does not add any additional meaning beyond what the schema provides, such as explaining how these parameters uniquely identify a note or detailing edge cases, so it meets the baseline for high 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 clearly states the action ('retrieve') and resource ('full content of a specific note'), making the purpose unambiguous. However, it does not explicitly differentiate from sibling tools like 'list_notes' or 'search_notes', which might retrieve multiple notes or partial content, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'list_notes' for browsing or 'search_notes' for filtering. It lacks context on prerequisites or exclusions, leaving the agent to infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesB
List all categories in a hierarchical tree structure
| Name | Required | Description | Default |
|---|---|---|---|
| parent_path | No | Optional: list only subcategories of this path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the output format ('hierarchical tree structure'), which adds value beyond the input schema, but doesn't disclose critical behavioral traits like whether it's read-only, paginated, rate-limited, or requires authentication. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('List all categories') and adds essential context ('in a hierarchical tree structure'). There is zero waste or redundancy, making it highly concise and well-structured.
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 optional parameter, no output schema, no annotations), the description is minimally adequate. It covers the purpose and output format but lacks behavioral details and usage guidelines. For a simple read operation, this is borderline viable but leaves gaps an agent might need to infer.
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 100%, so the schema already documents the 'parent_path' parameter fully. The description doesn't add any parameter-specific information beyond what's in the schema, such as examples of path formats or hierarchical implications. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all categories'), specifying they are returned in a 'hierarchical tree structure'. It distinguishes from siblings like 'create_category' or 'move_category' by focusing on retrieval, but doesn't explicitly differentiate from other list operations like 'list_notes' beyond resource 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?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites, when to use 'parent_path' filtering, or how it compares to other category-related tools like 'create_category' or 'move_category'. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesB
List all notes, optionally filtered by category path or tag
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | No | Optional category path filter (e.g., 'work/clients') | |
| tag | No | Optional tag filter | |
| recursive | No | If true, list notes in subcategories too (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions filtering and recursive behavior, but lacks details on permissions, rate limits, pagination, return format, or whether it's read-only. For a list operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('List all notes') and includes key optional features. There is zero waste, and every word earns its place by conveying essential information without redundancy or unnecessary elaboration.
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 moderate complexity (3 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and filtering options, but lacks details on behavioral aspects like permissions, output format, or error handling. Without annotations or output schema, more context would be helpful for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all three parameters thoroughly. The description adds minimal value by mentioning 'optionally filtered by category path or tag,' which aligns with schema details but doesn't provide additional semantics beyond what's in the schema. With high schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('notes') with optional filtering capabilities. It distinguishes from 'get_note' (singular retrieval) and 'search_notes' (likely broader search), but doesn't explicitly differentiate from 'list_categories' which handles different resources. The purpose is specific but sibling differentiation could be more explicit.
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 context through 'optionally filtered by category path or tag,' suggesting when to use filtering parameters. However, it doesn't provide explicit guidance on when to choose this tool versus alternatives like 'search_notes' or 'list_categories,' nor does it mention prerequisites or exclusions. Usage is implied rather than clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_categoryC
Move a category to a different parent location
| Name | Required | Description | Default |
|---|---|---|---|
| source_path | Yes | Current category path (e.g., 'personal/work-notes') | |
| destination_path | Yes | New parent path (e.g., 'work/archived') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic operation. It doesn't disclose behavioral traits such as whether the move is atomic, what happens to child categories/notes, permission requirements, error conditions (e.g., invalid paths), or if it's destructive (though 'move' implies mutation). This leaves significant gaps 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, efficient sentence that directly states the tool's purpose with zero wasted words. It is appropriately sized and front-loaded, making it easy to parse quickly.
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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavior (e.g., effects on hierarchy), error handling, or return values, which are critical for safe and effective use in a context with sibling tools like list_categories and delete_category.
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 100%, with clear parameter descriptions in the schema (e.g., 'Current category path'). The tool description adds no additional parameter semantics beyond implying relocation context, so it meets the baseline of 3 where the schema does the heavy lifting.
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') and resource ('a category') with the specific operation 'to a different parent location'. It distinguishes from siblings like rename_category (which changes name but not location) and delete_category (which removes rather than relocates), though it doesn't explicitly name these alternatives.
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 like rename_category or create_category. The description implies usage for relocation but doesn't mention prerequisites (e.g., existing categories), exclusions (e.g., moving to non-existent paths), or sibling tool relationships.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_categoryB
Rename a category while keeping it in the same parent location
| Name | Required | Description | Default |
|---|---|---|---|
| old_path | Yes | Current category path (e.g., 'work/clients') | |
| new_name | Yes | New name for the category (just the name, not full path) |
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 mentions the tool renames a category but doesn't disclose behavioral traits like whether it requires specific permissions, if the rename is reversible, what happens to child elements, or error handling for invalid paths. This is a significant gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Rename a category') and adds a clarifying constraint ('while keeping it in the same parent location'). There is zero wasted text, making it highly concise and well-structured.
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 is a mutation operation with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects like permissions, reversibility, effects on related data, and error scenarios. For a tool that modifies data, this leaves significant gaps in understanding how to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('old_path' and 'new_name') with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, resulting in the baseline score of 3.
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 ('Rename a category') and specifies the scope ('while keeping it in the same parent location'), which distinguishes it from 'move_category' that likely changes parent location. However, it doesn't explicitly differentiate from 'update_note' or other update operations, keeping it at 4 rather than 5.
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 by specifying 'keeping it in the same parent location,' which suggests when to use this vs. 'move_category.' However, it doesn't provide explicit guidance on when to use this tool vs. alternatives like 'create_category' or 'delete_category,' or mention prerequisites such as existing category paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesB
Search through all notes by query, category path, or tags
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search term (searches title, content, tags) - case insensitive | |
| category_path | No | Optional category path filter (e.g., 'work/clients'). Searches in this path and all subcategories by default. | |
| tags | No | Optional comma-separated tags to filter by (matches any) | |
| recursive | No | If true, search in subcategories too (default: true) |
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 mentions search functionality but lacks details on permissions, rate limits, pagination, or error handling. For a search tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly, with no wasted information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with multiple filters) and lack of annotations or output schema, the description is adequate but incomplete. It covers what the tool does but misses behavioral aspects like result format or limitations. For a search tool, this leaves room for improvement in guiding the agent 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?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds minimal value by listing the search criteria ('query, category path, or tags') but doesn't provide additional syntax, examples, or constraints beyond what's in the schema, meeting the baseline for high 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 clearly states the action ('Search through') and resource ('all notes') with specific search criteria ('by query, category path, or tags'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'list_notes' or 'get_note', which could also retrieve notes, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_notes' or 'get_note'. It mentions search capabilities but doesn't specify scenarios where searching is preferable to listing or retrieving specific notes, leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteC
Update an existing note's content or tags
| Name | Required | Description | Default |
|---|---|---|---|
| category_path | Yes | Category path (e.g., 'work/clients/acme') | |
| title | Yes | Note title | |
| content | No | New content (optional) | |
| tags | No | New comma-separated tags (optional) | |
| append | No | If true, append content instead of replacing (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It indicates a mutation ('Update') but doesn't disclose permissions needed, whether changes are reversible, error handling, or rate limits. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, front-loading the core action ('Update an existing note') and key modifiable attributes. Every word earns its place, making it highly concise and well-structured.
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 as a mutation with 5 parameters and no output schema or annotations, the description is incomplete. It lacks details on behavioral traits (e.g., side effects, error cases), usage context, and return values, which are crucial for safe and effective agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds no additional meaning beyond implying that 'content' and 'tags' are updatable fields, which is already clear from the schema. Baseline 3 is appropriate as the schema handles parameter semantics effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('an existing note'), specifying what fields can be modified ('content or tags'). It distinguishes from siblings like 'add_note' (create new) and 'delete_note' (remove), though it doesn't explicitly contrast with 'get_note' (read) or 'search_otes' (query).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is provided. It doesn't mention prerequisites (e.g., note must exist), exclusions (e.g., cannot update non-existent notes), or comparisons to siblings like 'add_note' for creation or 'delete_note' for removal, leaving usage context implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose with no ambiguity. Tools are clearly separated by resource (note vs. category) and action (create, delete, get, list, update, etc.), making it easy for an agent to select the correct one without confusion.
All tool names follow a consistent verb_noun pattern (e.g., add_note, create_category, list_notes). The naming is uniform throughout, using snake_case and clear action verbs that align with the tool's function.
With 11 tools, the count is well-scoped for a knowledge base server. Each tool serves a distinct and necessary function, covering core operations for managing notes and categories without being excessive or insufficient.
The tool set provides complete CRUD/lifecycle coverage for both notes and categories. It includes creation, retrieval, updating, deletion, listing, and search operations, with no obvious gaps that would hinder agent workflows in this domain.
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
A searchable knowledge base your assistant reads and writes.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Create, search, and update notes in an xNotepad AI notebook, with semantic search and AI Q&A.
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables creating, managing, and searching Markdown notes with support for tags, timestamps, and full-text search. Includes AI prompts for analyzing and summarizing notes.61MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to search, read, and traverse Markdown note vaults (Obsidian-compatible) with full-text search, backlinks, knowledge graphs, and a persistent memory system for cross-session context.16172MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to search, read, create, update, and remove personal markdown notes stored locally, providing persistent memory across sessions.952MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to capture, search, update, and delete notes in a local Markdown vault with automatic categorization and tagging, making knowledge management seamless.61MIT
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/cwente25/KnowledgeBaseMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server