Markdrop MCP Server
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., "@Markdrop MCP ServerSearch my pastes for API architecture documentation"
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.
___ ___ _ _
| \/ | | | | |
| . . | __ _ _ __ __| |_ __ | | ___ _ __
| |\/| |/ _` | '__/ _` | '_ \| |/ _ \| '_ \
| | | | (_| | | | (_| | | | | | (_) | |_) |
\_| |_/\__,_|_| \__,_|_| |_|_|\___/| .__/
| |
__ __ ____ ____ |_|
| \/ |/ ___| _ \
| |\/| | | | |_) |
| | | | |___| __/
|_| |_|\____|_|Markdown Knowledge Workspace for Agents
Give Claude Code instant access to shared documentation. Auto-sync markdown files, AI-tag them intelligently, and retrieve them contextually during development.
π Table of Contents
Related MCP server: SyncPen MCP Server
π― What is This?
This MCP server connects Claude Desktop to your Markdrop knowledge base. Combined with the Claude Code hook (which auto-captures markdown files), you get a complete RAG-powered development workflow:
π Hook: Auto-captures markdown docs β Markdrop (with AI tagging)
π MCP: Claude retrieves relevant docs when needed β Better context
π€ Result: Your own docs become searchable knowledge for Claude
π Installation
The MCP server is included in your Markdrop installation at markdrop-mcp-server/. Dependencies are already installed.
1. Find Your Markdrop Path
cd /path/to/your/markdrop
pwd # Copy this path2. Get Your API Key
Create an API key in Markdrop: Dashboard β API
3. Configure Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"markdrop": {
"command": "node",
"args": ["/absolute/path/to/your/markdrop/markdrop-mcp-server/index.js"],
"env": {
"MARKDROP_API_URL": "http://localhost:3000",
"MARKDROP_API_KEY": "md_xxxxxxxxxxxx",
"MARKDROP_PROJECT_ID": "optional-project-id"
}
}
}
}π‘ Pro Tips:
Use the absolute path to your
index.jsfileSet
MARKDROP_PROJECT_IDto auto-filter searches to a specific projectRun multiple MCP instances for multi-project workflows
4. Restart Claude Desktop
Fully quit and restart Claude Desktop. You'll see Markdrop tools appear! β¨
π οΈ Available Tools
π search_pastes
Search through your knowledge base by content, title, tags, or topics.
Parameters:
query(required) - Search query to match against content and titletags(optional) - Array of tags to filter by (e.g.,["architecture", "api"])category(optional) - Filter by categorydocumentType(optional) - Filter by type (e.g.,"architecture","decision-record")limit(optional) - Max results (default: 10)
Try asking:
"Search my pastes for API architecture documentation"
π get_paste
Retrieve full content and metadata for a specific paste.
Parameters:
pasteId(required) - The ID of the paste to retrieve
Try asking:
"Get the full content of paste abc123"
π·οΈ list_tags
List all available tags with counts. Great for discovering what's documented.
Parameters:
category(optional) - Filter tags by categoryminCount(optional) - Minimum pastes per tag (default: 1)
Try asking:
"What tags do I have in my documentation?"
β° get_recent_pastes
Get recently created or modified pastes.
Parameters:
limit(optional) - Max results (default: 10)projectId(optional) - Filter by projectdocumentType(optional) - Filter by document type
Try asking:
"Show me my recent documentation"
π¬ How to Use
Once configured, just ask Claude naturally:
π "Search my pastes for authentication flow documentation"
π "What architecture docs do I have?"
π "Show me recent API documentation I've written"
ποΈ "Get the paste about database migrations"
Claude will automatically use these tools to find relevant context from your knowledge base.
π The Workflow
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. Create docs with Claude Code β
β β (Hook auto-syncs with AI tagging) β
β 2. Stored in Markdrop β
β β (Searchable, organized, tagged) β
β 3. Ask Claude questions β
β β (MCP retrieves relevant docs) β
β 4. Claude responds with YOUR context β
β β (Better answers, project-specific) β
β 5. Repeat β Build knowledge base over time β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββThis creates a feedback loop where your development docs become searchable context for future work. The more you document, the smarter Claude gets about your project!
π§ Troubleshooting
π€ MCP server not showing in Claude Desktop?
β Check config file:
~/Library/Application Support/Claude/claude_desktop_config.jsonβ Verify absolute path to
index.jsis correctβ Fully quit and restart Claude Desktop
π« Authentication errors?
β Verify
MARKDROP_API_KEYis correct (Dashboard β API)β Check Markdrop is running at the specified URL
β Test manually:
curl -H "Authorization: Bearer md_xxxxxxxxxxxx" \ http://localhost:3000/api/pastes/search?query=test
π No results when searching?
β Make sure you've created some pastes first
β Verify they have tags (use Claude Code hook for auto-tagging)
β Try a broader search query
β Check your
MARKDROP_PROJECT_IDisn't filtering everything out
π Need an API key?
Create one in Markdrop: Dashboard β API β Create New Key
ποΈ Architecture
βββββββββββββββββββ
β Claude Desktop β
ββββββββββ¬βββββββββ
β stdio (MCP Protocol)
β
βββββββββββββββββββ
β MCP Server β (@modelcontextprotocol/sdk)
ββββββββββ¬βββββββββ
β HTTP/Bearer Auth
β
βββββββββββββββββββ
β Markdrop API β (REST API)
βββββββββββββββββββTech Stack:
@modelcontextprotocol/sdk- Standard MCP protocol implementationStdio Transport - Communicates with Claude via stdin/stdout
Markdrop REST API - Searches and retrieves pastes
Bearer Token Auth - Secure API authentication
π§ͺ Development
Test the server locally:
# Set environment variables
export MARKDROP_API_URL="http://localhost:3000"
export MARKDROP_API_KEY="md_xxxxxxxxxxxx"
# Run server (expects JSON input via stdin)
node index.js
# Or with inspector for debugging
node --inspect index.jsNote: The server logs to stderr, so debug output won't interfere with MCP communication.
π License
MIT
Made with β€οΈ for the Claude Code community
Available Tools
4 toolsget_pasteA
Retrieve full content and metadata for a specific paste by ID
| Name | Required | Description | Default |
|---|---|---|---|
| pasteId | Yes | The ID of the paste to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states 'Retrieve' (read-only) and mentions returning content and metadata, but it does not mention error behavior, authentication needs, or side effects. This is minimal disclosure for a tool with no annotation safety net.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (10 words) that is front-loaded with the verb and resource. There is zero waste.
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 simplicity of the tool (one parameter, no output schema), the description is adequate but incomplete. It lacks guidance on when to use versus siblings, and does not mention error handling or specific return format details beyond 'full content and metadata'.
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 covers 100% of the single parameter (pasteId) with a description. The tool description adds 'by ID' but does not enrich the parameter semantics beyond what the schema already provides. Baseline 3 applies given full 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 uses the specific verb 'Retrieve' and clearly identifies the resource as 'full content and metadata for a specific paste by ID'. This distinguishes it from siblings like search_pastes and get_recent_pastes by emphasizing the direct ID lookup.
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 already have a paste ID, but it does not explicitly state when to use this tool versus alternatives like search_pastes or get_recent_pastes. There is no mention of exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_pastesA
Get recently created or modified pastes, optionally filtered by project or type
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 10) | |
| projectId | No | Filter by project ID (optional) | |
| documentType | No | Filter by document type (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It adds that both 'created or modified' pastes are returned, which is useful context. However, it does not mention that this is a read-only operation, whether results are ordered, pagination behavior, or any rate limits. For a simple read tool, this is minimal but not deficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose. It wastes no words and avoids redundancy with the schema. Every phrase adds value, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity list tool with optional filters and no output schema, the description adequately conveys what to expect. It covers the main purpose and filter options. However, it omits details like ordering (e.g., newest first) or what 'recent' means (e.g., time window), which could be helpful but are not critical given the tool's simplicity.
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 covers all parameters with descriptions (100% coverage), so the baseline is 3. The description's mention of 'optionally filtered by project or type' mirrors the schema's optional flags but adds no new semantic detail. The meaning of 'limit' is already well explained in the schema. No additional depth is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get recently created or modified pastes'. It specifies the verb ('Get'), the resource ('pastes'), and the distinguishing scoping ('recently created or modified'). This differentiates it from sibling tools like search_pastes and get_paste, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indirectly implies usage when the user needs recent pastes, possibly filtered by project or type. However, it does not explicitly state when to use this tool over alternatives (e.g., search_pastes for arbitrary search criteria, get_paste for a single paste). The absence of exclusions or alternative references leaves usage guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List all available tags with their counts and categories. Useful for discovering what topics are documented.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter tags by category (optional) | |
| minCount | No | Minimum number of pastes that must have the tag (default: 1) |
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 disclosing behavioral traits. It implies a read-only operation by saying 'List', and it mentions the output content (counts and categories). However, it does not state potential limitations like the effect of the minCount filter or whether the list is ordered, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely conciseβtwo short sentences that front-load the core purpose. Every word adds value, with no redundant or filler 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?
For a simple list tool with no output schema, the description adequately explains what will be returned (tags with counts and categories). The tool's low complexity and clear purpose make this sufficient. Minor omissions like ordering or pagination are not critical here, so a score of 4 is appropriate.
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?
Since the input schema provides full descriptions for both parameters (100% coverage), the baseline is 3. The description does not add any additional meaning about the parameters beyond what the schema already specifies, so no extra credit is warranted.
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 ('List'), the resource ('all available tags'), and the included details ('counts and categories'). It is unambiguous and easily distinguishes the tool from sibling tools that operate on pastes rather than tags.
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 a clear use case ('Useful for discovering what topics are documented'), indicating when this tool is appropriate. However, it does not explicitly mention alternatives or situations where it should not be used, so it lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pastesA
Search through Markdrop pastes by content, title, tags, or topics. Returns matching pastes with metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by specific tags (e.g., ["architecture", "api"]) | |
| limit | No | Maximum number of results to return (default: 10) | |
| query | Yes | Search query to match against paste content, title, and tags | |
| category | No | Filter by category (e.g., "design", "architecture", "guide") | |
| documentType | No | Filter by document type (e.g., "architecture", "decision-record") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It states that the tool searches and returns matching pastes with metadata, which is a read-only operation. However, it does not disclose details like result ordering, matching semantics, or any access requirements, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the main purpose. It avoids unnecessary detail and 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?
Without an output schema, the description should ideally clarify what 'metadata' includes and how results are ordered or paginated. It only states that matching pastes with metadata are returned, leaving the response structure under-specified. This is adequate but not complete for a search 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?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds marginal value by mentioning that search matches content, title, and tags, but it also introduces 'topics' which is not a distinct parameter in the schema, creating slight ambiguity. This is baseline with no significant added insight.
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 ('Search') and resource ('Markdrop pastes'), clearly distinguishing it from siblings like get_paste (retrieval of a single paste) and get_recent_pastes (listing recent items). It also specifies the search dimensions (content, title, tags, topics).
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 usage for finding pastes by search terms, which differentiates it from sibling tools. However, it does not explicitly mention when to use alternatives or provide exclusions, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.0- First observed
get_paste - First observed
get_recent_pastes - First observed
list_tags - First observed
search_pastes
TDQS
Each tool has a distinct purpose: searching, retrieving by ID, listing tags, and listing recent pastes. There is no overlap or ambiguity between them.
All tool names follow a consistent snake_case verb_noun pattern (e.g., search_pastes, get_paste, list_tags, get_recent_pastes). The naming is predictable and coherent.
With 4 tools, the server is well-scoped and focused on read/search operations. The count is within the ideal range and each tool contributes to the server's purpose.
The server only provides read and search operations; there are no create, update, or delete tools. This is a significant gap for a paste management service, as agents cannot write or manage pastes.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect your team's living knowledge base β docs, data, issues, CRM β to Claude and ChatGPT.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces β chat, links, and tasks. One-click OAuth.
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables Claude Code to search and retrieve documents from an Outline knowledge base.2-
- AlicenseAqualityCmaintenanceConnects Claude Code to SyncPen documents as a knowledge base, enabling document search, reading, listing, creation, and update via natural language.21436MIT
- AlicenseNot gradedqualityCmaintenanceConnects Claude to a personal knowledge base with hybrid search over code, documents, and images. Allows the AI assistant to retrieve and answer from your own files during conversations.1MIT
- FlicenseNot gradedqualityDmaintenanceProvides project documentation, database schema, business rules, and search capabilities as context for Claude Code, enabling more accurate code generation and query writing.-
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/james-julius/markdrop-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server