Anchorify + MCP
Anchorify ships a built-in Model Context Protocol server. Point any MCP client at it and the agent gets first-class tools to publish a document to a stable URL, list and update shares, manage access, and read comments, versions, and suggestions — no shelling out to the CLI.
It's the same anchorify npm package: the server is the anchorify mcp
subcommand, not a separate install.
Install#
npm i -g anchorify
Get a per-user token at https://anchorify.io/dashboard/settings (it's
the same token anchorify login uses).
Configure your MCP client#
Add one stanza. The server authenticates with ANCHORIFY_TOKEN from its
environment — put your token there.
Claude Desktop (claude_desktop_config.json), Cursor
(.cursor/mcp.json), or any client that speaks stdio MCP:
{
"mcpServers": {
"anchorify": {
"command": "anchorify",
"args": ["mcp"],
"env": {
"ANCHORIFY_TOKEN": "your-token"
}
}
}
}
To target a self-hosted or dev instance, add "ANCHORIFY_HOST": "http://localhost:3737" to env (defaults to https://anchorify.io).
Restart the client; "anchorify" appears in its tool list.
Tools#
Flat tools mirroring the CLI verbs. All take a share argument (a slug,
id, path, or full URL) where they act on an existing share — including
shares your user doesn't own but has been granted access to, since the
resolver applies the same read check as the share page.
| Tool | What it does |
|---|---|
anchorify_publish |
Publish new content → returns the share URL |
anchorify_publish_file |
Publish a file from disk, including binaries (PDF, images, zips) → returns the share URL |
anchorify_update |
Replace an existing share's content (snapshots a version) |
anchorify_list |
List your shares |
anchorify_view |
Fetch a share's raw source |
anchorify_delete |
Delete a share |
anchorify_set_access |
Set link access (restricted/view/comment/suggest) + indexing |
anchorify_set_content_type |
Change how a share renders (markdown, code, json, slides…) without touching its content |
anchorify_set_password |
Set or clear a view password |
anchorify_rename |
Rename a share's slug (old URL 301s) |
anchorify_move |
Move a share into another project |
anchorify_comments_list |
List comments (with anchors, reactions, and resolved state) |
anchorify_comment_add |
Add a comment (document-level or anchored) |
anchorify_comment_reply |
Reply to a comment — recorded against the one it answers |
anchorify_comment_resolve |
Mark a comment handled (or re-open it) |
anchorify_comment_edit |
Rewrite a comment you wrote |
anchorify_comment_delete |
Soft-delete a comment (yours, or anyone's if you own the doc) |
anchorify_versions_list |
List version history |
anchorify_version_restore |
Restore a share to an older version |
anchorify_suggestions_list |
List a share's pending suggestions, or your own |
anchorify_share_analytics |
Views, unique visitors, downloads + a 30-day series for one share |
Example prompts#
- "Publish this proposal to Anchorify and give me the link."
- "Upload ./q1-deck.pdf to Anchorify and send me the URL."
- "List my Anchorify shares and update
q3-reportwith this new draft." - "Make
client-onboardingview-only and not indexed." - "Show me the comments on the
pricing-memoshare." - "Apply every comment on
pricing-memo, republish, then reply and resolve each one." - "Did the client ever open
q1-report? How many times?" - "The
config-dumpshare is rendering as prose — it's YAML. Fix it." - "Check the view counts on everything I published this month and tell me what got ignored."
Notes#
- Closing the loop: after applying a comment's feedback and
republishing,
anchorify_comment_reply+anchorify_comment_resolveare how you record it. Without them the threads stay open on a document where everything has already been fixed, and a human has to reconcile them by hand. There is no bulk resolve — per-comment only. - Auth: the server only does what your token can do — your own org's
shares. Public reads (
anchorify_viewon a public share) work without a token; everything else needsANCHORIFY_TOKEN. - Transport: stdio only today. A hosted/remote (SSE + OAuth) server is a future addition.
- No extra endpoints: the MCP server is a pure client of the same
HTTP API the CLI uses, so behavior matches
anchorify <verb>exactly. - Text vs. files:
anchorify_publishcarriescontentas a JSON string, so it can only publish text. Reach foranchorify_publish_filewhenever the thing you want to share is a file on disk — it reads the bytes locally and uploads them, and it handles text files too. Pass itsshareargument to replace an existing share's bytes at the same URL. anchorify_updateis text-only. Against a file-backed share it returns409 {"error":"share is a file, not text"}— itscontentwould be written while the stored bytes kept being served. Useanchorify_publish_filewithshareinstead.