Getting started
anymd is one binary that runs as an MCP server for your agent and as a command-line converter. Every MCP client runs the same command:
npx -y @sylphx/anymdNode 18+ is the only requirement; npm installs the native binary for your platform. No API key, no account.
To add anymd to every MCP client on your machine at once (Claude Code, Codex, Cursor, VS Code, Claude Desktop, Windsurf, Gemini CLI):
npx -y @sylphx/anymd setup # --dry-run to preview, --remove to undoIt is safe to run again. The sections below add it to one client by hand.
Prefer Docker? It runs the same prebuilt binary, with no Node needed:
docker run --rm -v "$PWD:/data" ghcr.io/sylphxai/anymd report.pdf > report.md
docker run -i --rm ghcr.io/sylphxai/anymd # MCP server on stdio (amd64 and arm64)The image uses glibc 2.17 or newer, so Alpine (musl) needs cargo install anymd instead.
Python wheels and a Python API are prepared in this repository but are not published to PyPI yet. Use npm or Docker until publication; pip install anymd and uvx anymd do not currently install this project.
On Windows, winget install Sylphx.anymd installs the same prebuilt binary. On macOS and Linux, brew install sylphxai/tap/anymd. With Scoop, add https://github.com/SylphxAI/scoop-bucket and run scoop install anymd.
Prefer Cargo? cargo install anymd builds the same binary from crates.io. It needs Rust 1.95+, CMake and a C++ compiler, and includes bundled ASR. Local doc-VLM OCR is a separate engine: anymd setup ocr downloads it (a small executable, SHA-256 verified) with the pinned models, or build with --features ocr-vlm to link it in; without setup, automatic OCR keeps using installed tesseract. Audio and video still use optional ffmpeg.
Claude Code
claude mcp add anymd -- npx -y @sylphx/anymdCodex
codex mcp add anymd -- npx -y @sylphx/anymdor in ~/.codex/config.toml:
[mcp_servers.anymd]
command = "npx"
args = ["-y", "@sylphx/anymd"]Cursor
Add to Cursor with one click, or in .cursor/mcp.json:
{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }VS Code
Install in VS Code with one click, or from a terminal:
code --add-mcp '{"name":"anymd","command":"npx","args":["-y","@sylphx/anymd"]}'or in .vscode/mcp.json:
{ "servers": { "anymd": { "type": "stdio", "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }Claude Desktop
One click: download anymd-<version>.mcpb from the latest release and open it in Claude Desktop. anymd-<version>-<platform>.mcpb carries one platform's binary and is smaller. Or by hand:
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }Windsurf, Zed, Cline, and other clients
Any client that speaks MCP over stdio: command npx, args ["-y", "@sylphx/anymd"].
To keep the server inside one folder, add --allow-dir:
{ "command": "npx", "args": ["-y", "@sylphx/anymd", "--allow-dir=/path/to/docs"] }CLI only
npm install -g @sylphx/anymd # or run it once with: npx -y @sylphx/anymd <file>
# or: docker run --rm -v "$PWD:/data" ghcr.io/sylphxai/anymd <file>
anymd report.pdf > report.mdVerify a download
Every release asset (the .tar.gz and .zip binaries and the .mcpb bundles) is listed in SHA256SUMS and carries a signed GitHub artifact attestation that names the workflow run that built it. The release also attaches a CycloneDX software bill of materials (anymd-<version>.cdx.json).
# download an asset and SHA256SUMS from the release, then:
sha256sum -c SHA256SUMS --ignore-missing # macOS: shasum -a 256 -c SHA256SUMS --ignore-missing
gh attestation verify anymd-darwin-arm64.tar.gz --repo SylphxAI/anymdTry it
Ask your agent something that needs a document:
Summarize the results table in
papers/attention.pdfand cite the page.
The agent calls read and gets Markdown back with <!-- page N --> anchors, so it can cite the page. For a folder of files, it calls search first.
Run anymd doctor to see which optional tools (OCR, audio/video) anymd found on your machine. See Formats.