MCP

MCP Server

Let Claude, Cursor, Windsurf, and other AI tools create and manage documents on mdfy.cc directly.

The MCP-native memory layer for AI agents.

Read mdfy URLs as context today. Write memory back via MCP in Phase 2.

Today Live

  • Read mdfy URLs as AI context
  • Document CRUD via 25 MCP tools
  • Auto-source detection

Coming Q2 2026

  • Memory write access
  • Bundle deploy
  • Multi-agent memory sharing
  • Real-time bundle sync

What is MCP

The Model Context Protocol (MCP) is an open standard that lets AI assistants interact with external tools and services. The mdfy MCP server exposes 25 tools across 7 categories — core CRUD, append/prepend, section editing, sharing controls, version history, folders, and stats. The hosted endpoint at https://mdfy.cc/api/mcp works with any MCP-compatible client (Claude Web, Cursor, etc.).

Claude Web (Hosted MCP)

Use mdfy.cc directly in claude.ai via our hosted MCP endpoint — no local install required.

Endpoint URL

https://mdfy.cc/api/mcp

In Claude.ai → Settings → Integrations / Connectors → Add custom MCP server → paste the URL above.

Same hosted endpoint works for any MCP-compatible client that supports remote HTTP MCP (Cursor, ChatGPT, Gemini, etc.).

Local Installation

For local stdio-based clients (Claude Desktop, Claude Code, Cursor stdio mode), install the npm package:

bash
npm install -g mdfy-cli && mdfy login

The MCP server uses JWT authentication from mdfy login. No environment variables needed.

Claude Code Setup

Add to .mcp.json in your project root:

json
{
  "mcpServers": {
    "mdfy": {
      "command": "npx",
      "args": ["mdfy-mcp"]
    }
  }
}

Claude Desktop Setup

Add to claude_desktop_config.json:

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

json
{
  "mcpServers": {
    "mdfy": {
      "command": "npx",
      "args": ["mdfy-mcp"]
    }
  }
}

Cursor / Windsurf

Cursor and Windsurf both support MCP. Use the hosted HTTP endpoint or the npm package.

Cursor — Settings → MCP → Add new global MCP server

json
{
  "mcpServers": {
    "mdfy": {
      "url": "https://mdfy.cc/api/mcp"
    }
  }
}

All 25 Tools

The hosted MCP exposes 25 tools across 7 categories. Auth happens via the user's mdfy.cc session (no API keys).

Core CRUD
mdfy_createmdfy_readmdfy_updatemdfy_deletemdfy_listmdfy_search
Append/Prepend
mdfy_appendmdfy_prepend
Sections
mdfy_outlinemdfy_extract_sectionmdfy_replace_section
Duplicate/Import
mdfy_duplicatemdfy_import_url
Sharing
mdfy_publishmdfy_set_passwordmdfy_set_expirymdfy_set_allowed_emailsmdfy_get_share_url
Versions
mdfy_versionsmdfy_restore_versionmdfy_diff
Stats/Folders
mdfy_statsmdfy_recentmdfy_folder_listmdfy_folder_createmdfy_move_to_folder

Detailed parameters for the 6 core tools below. The other 19 follow the same pattern — the AI will autocomplete arguments from the tool descriptions when called.

mdfy_create

Create a new document from Markdown content. Returns the document URL, ID, and edit token.

mdfy_read

Fetch a document's content and metadata by ID.

mdfy_update

Update an existing document's content or title.

mdfy_list

List all documents owned by the authenticated user.

mdfy_publish

Toggle a document between draft (private) and published (shared) state.

mdfy_delete

Soft-delete a document. Can be restored by owner.

mdfy_create

Create a new document from Markdown content. Returns the document URL, ID, and edit token.

Parameters

markdownREQUIREDstringThe Markdown content.
titlestringDocument title.
isDraftbooleanCreate as draft. Default: false.

Example

// In Claude Code:
"Publish this analysis as a document on mdfy.cc"

// Claude calls mdfy_create:
{
  "markdown": "# Performance Analysis\n...",
  "title": "Performance Analysis",
  "isDraft": false
}

// Returns:
{
  "url": "https://mdfy.cc/d/abc123",
  "id": "abc123",
  "editToken": "tok_..."
}

mdfy_read

Fetch a document's content and metadata by ID.

Parameters

idREQUIREDstringDocument ID.

Example

// "Read the document at mdfy.cc/d/abc123"

// Claude calls mdfy_read:
{ "id": "abc123" }

// Returns full markdown content and metadata

mdfy_update

Update an existing document's content or title.

Parameters

idREQUIREDstringDocument ID.
markdownstringNew Markdown content.
titlestringNew title.
changeSummarystringDescription of changes.

Example

// "Update the document with the revised version"

// Claude calls mdfy_update:
{
  "id": "abc123",
  "markdown": "# Revised Analysis\n...",
  "changeSummary": "Added benchmarks section"
}

mdfy_list

List all documents owned by the authenticated user.

Example

// "Show me my published documents"

// Claude calls mdfy_list (no parameters)
// Returns array of documents with id, title, status

mdfy_publish

Toggle a document between draft (private) and published (shared) state.

Parameters

idREQUIREDstringDocument ID.
isDraftREQUIREDbooleanSet to true for draft, false for published.

Example

// "Make document abc123 public"

// Claude calls mdfy_publish:
{ "id": "abc123", "isDraft": false }

mdfy_delete

Soft-delete a document. Can be restored by owner.

Parameters

idREQUIREDstringDocument ID.

Example

// "Delete the old draft"

// Claude calls mdfy_delete:
{ "id": "abc123" }

Usage Examples

Publish a document

You: "Write a blog post about WebAssembly and publish it on mdfy.cc"

Claude: I'll write the blog post and publish it for you.

[Claude writes the content, then calls mdfy_create]

Done! Your blog post is live at https://mdfy.cc/d/abc123

Update with revisions

You: "Update the document at mdfy.cc/d/abc123 - add a section about benchmarks"

Claude: I'll read the current document and add the benchmarks section.

[Claude calls mdfy_read, then mdfy_update with new content]

Updated! The document now includes the benchmarks section.

Manage documents

You: "Show me my recent documents and delete the old drafts"

Claude: Let me list your documents.

[Claude calls mdfy_list]

You have 5 documents:
1. "API Guide" (published) - updated 2h ago
2. "Draft notes" (draft) - updated 3d ago
3. "Old meeting notes" (draft) - updated 2w ago

Should I delete the old drafts (#2 and #3)?

You: "Yes"

[Claude calls mdfy_delete for each]

Done! Deleted 2 documents.