Skip to content
anymd

Docs

CLI

The anymd command: convert URLs and files, search your library, manage pages and print MCP config from your terminal.

anymd is a zero-dependency command-line client. It needs Node.js 18 or newer and nothing else.

Install

npm i -g https://cdn.anymd.cc/cli/anymd-cli-latest.tgz

Or run it once without installing:

npx https://cdn.anymd.cc/cli/anymd-cli-latest.tgz https://stephango.com/saw

Sign in

anymd login --key amd_…   # or just `anymd login` and paste when asked
anymd whoami              # who am I, which plan, which scopes
anymd logout

anymd login stores the key in ~/.config/anymd/config.json. Environment variables take care of CI and containers:

Variable Purpose
ANYMD_API_KEY API key (amd_…)
ANYMD_BASE_URL Point at another deployment, e.g. https://staging.anymd.cc or your self-hosted copy

Without a key the CLI works anonymously, with the same 50-per-day limit as the URL API.

Commands

Command What it does
anymd <url> Convert and print Markdown
anymd convert <url> [--json] [-o file] [--no-save] [--fresh] [enrichment flags] Convert with options
anymd file <path> Convert a local file (PDF, DOCX, XLSX, CSV, images…)
anymd search <query> [--mode hybrid] [--limit 10] [--json] Search your library
anymd social <all|x|facebook|instagram|threads|linkedin> <query> [--cursor c] [--json] Search public social posts on one platform or all of them (10 credits per page with results, 100 on LinkedIn, all the sum; see Social search)
anymd ls [--limit 20] [--domain x] [--tag a,b] List library documents (--tag: every tag must match)
anymd get <id> Print a saved document
anymd rm <id> Delete a saved document
anymd tag <id> [--add a,b] [--remove c] · --set a,b Edit a document's tags and print the result (--set "" clears)
anymd tags [--limit 100] List your tags with document counts
anymd usage Credits used and remaining
anymd login [--key amd_…] · anymd logout · anymd whoami Manage credentials
anymd pages ls · get <id> · create --slug --title [--template] · ops <id> --file ops.json · publish <id> · blocks Page builder
anymd mcp Print MCP config snippets for your clients
anymd prefs [show] / set <field>=<value>… / reset Show, change or reset your saved deep reading defaults

Recipes

Tag a saved document, then list everything with that tag:

anymd tag doc_… --add rag,research --remove todo
anymd ls --tag rag

Save an article as a file:

anymd convert https://stephango.com/saw -o saw.md

Pipe into another tool (Markdown goes to stdout):

anymd https://news.ycombinator.com/item?id=1 | llm "summarise the discussion"

Get JSON for scripting:

anymd convert https://stephango.com/saw --json | jq '.'

Convert without touching your library, bypassing the cache:

anymd convert https://example.com --no-save --fresh

Signed-in conversions also accept --expand-thread, --max-thread-posts <1..100>, --include-comments, --analyze-images, --max-comments <1..1000>, --max-images <1..20> and --max-credits <1..1000>, plus --no-expand-thread, --no-include-comments and --no-analyze-images to switch a saved default off for one conversion, and --keep-images / --no-images for image/media URLs (no credit effect). Flags you leave out follow your saved defaults, otherwise thread expansion, comments and image analysis are off; maxCredits defaults to 100. X posts convert as the single requested post unless you opt in; a key alone never expands threads. Social post adapters require a key. JSON output includes the credit_breakdown and enrichment coverage fields, so provider failures or request limits remain visible.

For example:

anymd convert https://x.com/example/status/123 --expand-thread --max-thread-posts 10 --include-comments --max-comments 40 --max-credits 200 --json

Save defaults once, then override per conversion:

anymd prefs set expandThread=on maxThreadPosts=30
anymd convert https://x.com/example/status/123 --no-expand-thread   # this conversion only
anymd prefs reset                                                    # deep reading off again

Download a YouTube video to the anymd CDN (off by default, 20 credits per video when ready), and optionally have AI analyze it (10 + 20 credits per started minute when ready, videos up to 60 minutes). Per conversion with --download-video / --analyze-video (the latter implies the former; --no-download-video / --no-analyze-video switch a saved default off once), or as saved defaults. The conversion prints a job id; check it until it is ready:

anymd convert https://www.youtube.com/watch?v=dQw4w9WgXcQ --analyze-video   # this conversion only
anymd prefs set downloadVideo=on                               # or for every YouTube read
anymd convert https://www.youtube.com/watch?v=dQw4w9WgXcQ   # ends with "## Video download … Job: `vid_…`"
anymd video vid_…                                              # status, then cdn_url
anymd prefs set analyzeVideo=on                                # also AI-analyze each downloaded video (10 + 20 credits per started minute)
anymd video vid_…                                              # analysis status, then the analysis Markdown

anymd prefs works with any key that has convert. prefs set and prefs reset change what every key and client of your account may spend, so they need a key with the keys:manage scope (the Everything my role allows preset); a Convert only key gets forbidden.

Convert a local PDF:

anymd file ./quarterly-report.pdf > report.md

Search with a specific mode:

anymd search '"vector database" NOT pinecone' --mode fulltext --limit 5
anymd search "notes about pricing experiments" --json

Page builder from the terminal

anymd pages blocks                                   # block catalog
anymd pages create --slug launch --title "Launch" --template product-launch
anymd pages get launch                               # note the revision
anymd pages ops launch --file ops.json               # apply a batch of ops
anymd pages publish launch

ops.json is the same body as POST /admin/pages/:id/ops:

{
  "baseRevision": 1,
  "ops": [
    { "op": "set_meta", "title": "Launch week" },
    { "op": "insert", "block": { "type": "faq", "props": { "items": [{ "q": "Is it free?", "a": "Yes, 500 credits every month." }] } } }
  ]
}

If someone edited the page since you read it, the command fails with revision_conflict. Run anymd pages get again and retry with the new revision.

Hook it up to your agent

anymd mcp

prints ready-to-paste config for Claude Code, Claude Desktop, Cursor and generic MCP clients. See MCP server.

Updated 2026-10-10 · Edit on GitHub

# Markdown
Open .md