Skip to main content
Glama
james-julius

Markdrop MCP Server

by james-julius
 ___  ___              _       _
|  \/  |             | |     | |
| .  . | __ _ _ __ __| |_ __ | | ___  _ __
| |\/| |/ _` | '__/ _` | '_ \| |/ _ \| '_ \
| |  | | (_| | | | (_| | | | | | (_) | |_) |
\_|  |_/\__,_|_|  \__,_|_| |_|_|\___/| .__/
                                     | |
  __  __  ____ ____                  |_|
 |  \/  |/ ___|  _ \
 | |\/| | |   | |_) |
 | |  | | |___|  __/
 |_|  |_|\____|_|

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 path

2. 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.js file

  • Set MARKDROP_PROJECT_ID to auto-filter searches to a specific project

  • Run 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 title

  • tags (optional) - Array of tags to filter by (e.g., ["architecture", "api"])

  • category (optional) - Filter by category

  • documentType (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 category

  • minCount (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 project

  • documentType (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.js is correct

  • βœ… Fully quit and restart Claude Desktop

🚫 Authentication errors?

  • βœ… Verify MARKDROP_API_KEY is 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_ID isn'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 implementation

  • Stdio 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.js

Note: The server logs to stderr, so debug output won't interfere with MCP communication.


πŸ“„ License

MIT


Made with ❀️ for the Claude Code community

Markdrop Β· Report Bug Β· Request Feature

Available Tools

4 tools
get_pasteA

Retrieve full content and metadata for a specific paste by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
pasteIdYesThe ID of the paste to retrieve

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 10)
projectIdNoFilter by project ID (optional)
documentTypeNoFilter by document type (optional)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter tags by category (optional)
minCountNoMinimum number of pastes that must have the tag (default: 1)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by specific tags (e.g., ["architecture", "api"])
limitNoMaximum number of results to return (default: 10)
queryYesSearch query to match against paste content, title, and tags
categoryNoFilter by category (e.g., "design", "architecture", "guide")
documentTypeNoFilter by document type (e.g., "architecture", "decision-record")

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 4 tool updatesv1.0.0
    • First observedget_paste
    • First observedget_recent_pastes
    • First observedlist_tags
    • First observedsearch_pastes

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a distinct purpose: searching, retrieving by ID, listing tags, and listing recent pastes. There is no overlap or ambiguity between them.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness2/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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