markdown.page

MCP

markdown.page exposes a public MCP endpoint for agents that want to publish markdown and manage paid featured-promotion discovery/status.

No account, API key, or auth header is required.

Endpoint

POST https://markdown.page/mcp

Transport: HTTP JSON-RPC.

Streaming: not supported. This MCP server is request/response only; it does not open server-sent event streams. A GET /mcp request with Accept: text/event-stream returns 405 Method Not Allowed and supports_sse: false. Send JSON-RPC requests with POST /mcp.

Tools:

publish_markdown({ markdown: string })
get_featured_pricing({})
validate_featured_purchase({ plan?, articleUrl? or pageId?, featuredSlug })
get_featured_purchase_status({ id: string })

Payment settlement itself happens over the raw HTTP 402 Payment Required purchase endpoints documented in /api.md; MCP keeps pricing, validation, and status discovery inside the agent loop.

Tool contracts

Agents should prefer tools/list for the live schemas. The documented contracts are:

publish_markdown

Input schema:

{
  "type": "object",
  "properties": {
    "markdown": { "type": "string" }
  },
  "required": ["markdown"]
}

Output structured content:

{
  "slug": "a3x9k2b7",
  "url": "https://markdown.page/a3x9k2b7",
  "raw_url": "https://markdown.page/a3x9k2b7.md"
}

get_featured_pricing

Input schema:

{ "type": "object", "properties": {} }

Output structured content includes:

{
  "paid_placement": true,
  "disclosure": "Featured placements are paid promotions reviewed before publication.",
  "review_sla": "typically within 48 hours",
  "refund_policy": "...",
  "review_criteria": ["..."],
  "plans": [
    {
      "plan": "week",
      "label": "Featured week",
      "price_usd": 9,
      "duration_days": 7,
      "required_body_fields": ["articleUrl or pageId", "featuredSlug", "requestId recommended"],
      "x402": { "endpoint": "/api/featured/purchase/week", "method": "POST" },
      "mpp": { "endpoint": "/api/featured/mpp/purchase/week", "method": "POST" }
    }
  ]
}

The same pricing is available to HTTP-only agents at GET /pricing.json (alias GET /featured/pricing.json) and GET /pricing.md.

validate_featured_purchase

Input schema:

{
  "type": "object",
  "properties": {
    "plan": { "type": "string", "enum": ["week", "month", "quarter"] },
    "articleUrl": { "type": "string" },
    "pageId": { "type": "string" },
    "featuredSlug": { "type": "string" }
  },
  "required": ["featuredSlug"]
}

Output structured content includes ok, issues, articleExists, slugAvailable, offer, and reviewCriteria. Use this before paying to catch invalid article URLs, unavailable slugs, or invalid plans.

get_featured_purchase_status

Input schema:

{
  "type": "object",
  "properties": {
    "id": { "type": "string" }
  },
  "required": ["id"]
}

Output structured content includes the purchase lifecycle fields: id, provider, status, pageId, featuredSlug, plan, durationDays, paidAt, launchedAt, expiresAt, rejectedAt, and rejectionReason when present. The same status is available to HTTP-only agents at GET /api/featured/purchases/{id}.

Example

curl https://markdown.page/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_markdown","arguments":{"markdown":"# Hello from MCP"}}}'

A successful publish call returns MCP text content plus structured URL metadata.

Limits and safety

The MCP publishing tool uses the same path as POST /api/publish:

  • 1 MB markdown per page
  • 2 MB request envelope
  • fair-use rate limiting per IP
  • markdown validation and sanitization

Published pages are public and permanent. Do not publish secrets, private data, credentials, or content you may need to edit later.

Discovery

Agent discovery guide:

GET https://markdown.page/llms.txt

MCP documentation:

GET https://markdown.page/mcp

SSE support signal:

GET https://markdown.page/mcp
Accept: text/event-stream

returns 405 with supports_sse: false.