Docs
MCP server
Connect Claude Code, Claude Desktop, Cursor or any MCP client to anymd.cc/mcp to convert URLs, search your library and edit pages.
anymd runs a remote Model Context Protocol server. Connect it once and your agent can read any URL as Markdown, search everything you've saved, and (with the right scopes) build and publish pages.
| Endpoint | https://anymd.cc/mcp |
| Transport | Streamable HTTP, stateless JSON responses |
| Auth | Authorization: Bearer amd_…, or OAuth 2.1 |
Authentication
API key. Simplest option. Create a key in Dashboard → API keys. The Convert + library (agents) preset is a good default for an assistant. Details: API keys & roles.
OAuth 2.1. For clients that support it, just add the URL and sign in when prompted. anymd supports Dynamic Client Registration and PKCE:
| Metadata | /.well-known/oauth-authorization-server |
| Authorize | /oauth/authorize |
| Token | /oauth/token |
| Registration | /oauth/register |
Either way, your agent only sees the tools its scopes allow.
Client setup
Run anymd mcp from the CLI to print these snippets with your key filled in.
Claude Code
claude mcp add --transport http anymd https://anymd.cc/mcp \
--header "Authorization: Bearer amd_…"
Claude Desktop
Add anymd as a custom connector: Settings → Connectors → Add custom connector, URL https://anymd.cc/mcp, then sign in through OAuth.
If you'd rather use an API key, bridge the remote server through mcp-remote in claude_desktop_config.json:
{
"mcpServers": {
"anymd": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://anymd.cc/mcp", "--header", "Authorization: Bearer amd_…"]
}
}
}
Cursor
~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):
{
"mcpServers": {
"anymd": {
"url": "https://anymd.cc/mcp",
"headers": { "Authorization": "Bearer amd_…" }
}
}
}
Any other client
Any client that speaks Streamable HTTP can use the same shape: URL https://anymd.cc/mcp plus an Authorization header, or OAuth discovery from the metadata URL above.
Tools
Tools are listed only when the caller holds the scope they need.
Conversion and library
| Tool | Input | Needs |
|---|---|---|
convert_url |
{ url, save? } |
convert (saving also needs library:write) |
search_library |
{ query, mode?, limit? } |
library:read |
get_document |
{ id } |
library:read |
list_documents |
{ limit?, domain? } |
library:read |
delete_document |
{ id } |
library:write |
usage_summary |
{} |
usage:read |
mode is hybrid (default), bm25, fulltext or semantic. See Library & search.
Pages and posts
| Tool | Input | Needs |
|---|---|---|
list_blocks |
{} |
pages:read |
list_page_templates |
{} |
pages:read |
list_pages |
{} |
pages:read |
get_page |
{ id } |
pages:read |
create_page |
{ slug, title, description?, template? } |
pages:write |
apply_page_ops |
{ pageId, baseRevision, ops, idempotencyKey? } |
pages:write |
publish_page |
{ pageId, revision? } |
pages:publish |
unpublish_page |
{ pageId } |
pages:publish |
list_posts |
{} |
content:read |
upsert_post |
{ id?, slug?, title, markdown, excerpt?, tags? } |
content:write |
publish_post |
{ id, publish } |
content:publish |
The ops format, revision rules and the safe editing loop are in the admin builder guide.
Things to ask your agent
- "Convert https://stephango.com/saw and give me the three key ideas."
- "Search my library for what I saved about vector databases last month."
- "Read this YouTube video's transcript and list the timestamps where pricing comes up."
- "Create a landing page from the
ads-landingtemplate for our research audience, show me the preview link, and don't publish yet."
Credits
convert_url costs the same credits as any other conversion. Reads such as search_library, get_document and list_documents are free. See Billing & credits.
Troubleshooting
| Symptom | Fix |
|---|---|
| A tool is missing | Your key or OAuth grant lacks its scope. Check with GET /api/v1/me or anymd whoami. |
401 invalid_api_key |
The key was revoked, expired or mistyped. Create a new one. |
402 quota_exceeded |
Free plan credits are used up for the month. |
revision_conflict from apply_page_ops |
Someone changed the page. Call get_page, then retry with the new revision. |
Updated 2026-09-26 · Edit on GitHub