{
  "markdown": "# dochost MCP server\n\n[![dochost-mcp MCP server](https://glama.ai/mcp/servers/zyli5313/dochost-mcp/badges/score.svg)](https://glama.ai/mcp/servers/zyli5313/dochost-mcp)\n\nPublish **Markdown or HTML to a clean, shareable link** — straight from your AI\nassistant. The dochost MCP server gives Claude, ChatGPT, Cursor and any other MCP\nclient six tools — `publish`, `update_page`, `list_my_pages`, `get_page`,\n`get_account`, `delete_page` — so your assistant can hand back a public\n[dochost](https://dochost.io) link and then keep maintaining it. No copy-paste,\nno separate dashboard.\n\n- 🌐 Website: **https://dochost.io**\n- 🔌 MCP server: **https://dochost.io/mcp**\n- 🛰️ Endpoint: `https://dochost.io/api/mcp` (Streamable HTTP, OAuth)\n- 🔑 Auth: OAuth sign-in — **no API keys**\n\n## Why\n\nYour LLM produced a report, a README, an HTML artifact. Sending it shouldn't mean\na screenshot or a raw `.md` blob. dochost turns that output into a normal web page\nat its own URL, in one tool call. Markdown **and** HTML are rendered live.\n\n## Quick start\n\n**Claude Code** (one line):\n\n```bash\nclaude mcp add --transport http dochost https://dochost.io/api/mcp\n```\n\nThen run `/mcp` inside Claude Code and approve in the browser. Add `--scope user`\nto use it in every project.\n\n**Claude Desktop / Cursor / VS Code / Windsurf** — add a remote HTTP server:\n\n```json\n{\n  \"mcpServers\": {\n    \"dochost\": {\n      \"type\": \"http\",\n      \"url\": \"https://dochost.io/api/mcp\"\n    }\n  }\n}\n```\n\nYou authorize once via OAuth in the browser; the assistant then publishes **as\nyou**, and output follows your dochost plan's entitlements.\n\n## Stdio / Docker bridge\n\nFor clients or directory evaluators that need a local stdio process, this\nrepository includes a bridge to the same hosted MCP endpoint:\n\n```sh\nnpm ci --ignore-scripts\nnode server/index.js\n```\n\nOr run it in Docker:\n\n```sh\ndocker build -t dochost-mcp .\ndocker run --rm -i dochost-mcp\n```\n\nNode.js 22 or newer is required. The bridge forwards the live tools and schemas;\nit is not a self-hosted copy of the dochost application. Initialization and\ntool discovery are public. Interactive clients can use OAuth; headless tool\nexecution needs an existing `DOCHOST_API_KEY` runtime secret (Docker:\n`docker run --rm -i -e DOCHOST_API_KEY dochost-mcp`).\n\nMaintainers: see [Glama claim, build and release instructions](docs/glama-release.md).\n\n## Which auth method?\n\n| Client | Recommended auth | Why |\n|---|---|---|\n| **OpenClaw**, **Hermes** | **API key** | Headless agents (e.g. a Telegram orchestrator). A static Bearer key works with the plain-HTTP skill and any MCP runner, with no browser step per session. |\n| Claude, Cursor, ChatGPT, VS Code, Windsurf, and all other MCP clients | **OAuth** | One browser approval, nothing long-lived stored in config; the assistant publishes **as you**. |\n\nKeep the API key like any secret: store it as an environment variable / host\nsecret (never commit it), and revoke or rotate it from **Settings → API keys** if\nit leaks.\n\n## Agents (OpenClaw, Hermes) — API key\n\nOpenClaw and Hermes are headless, so they authenticate with an **API key**. Create\none at [dochost.io](https://dochost.io) → **Settings → API keys**, export it as\n`DOCHOST_API_KEY`, and either:\n\n- **Install the skill** — a self-contained `publish` skill that works on any agent\n  that can make an HTTP request: [`skills/dochost-publish/`](./skills/dochost-publish/SKILL.md).\n- **Wire the MCP** — point the agent at `https://dochost.io/api/mcp` with the key as\n  a Bearer header: [`examples/mcporter.config.json`](./examples/mcporter.config.json).\n\nPer-host install guides:\n\n- **OpenClaw** → [`clients/openclaw.md`](./clients/openclaw.md)\n- **Hermes** → [`clients/hermes.md`](./clients/hermes.md)\n\nOne-shot from a shell: [`examples/publish.sh`](./examples/publish.sh).\n\n## Tools\n\nSix tools. `publish` creates; the rest let the assistant keep working with what it\nalready published, instead of stranding a link every time you revise something.\n\n### `publish`\nPublish Markdown or HTML as a hosted page and get a shareable URL.\n\n| Parameter | Type | Notes |\n|---|---|---|\n| `body` | string (required) | The Markdown or HTML content to publish. |\n| `format` | `\"markdown\"` \\| `\"html\"` | Auto-detected when omitted. |\n| `public` | boolean | List on Explore. Defaults to `false` (unlisted). |\n| `customSlug` | string · Pro | Choose the link path instead of a random slug. |\n| `password` | string · Pro | Gate the page behind a password. |\n| `noBranding` | boolean · Pro | Hide the dochost footer badge. |\n\nReturns `url`, `slug`, `expiresAt`, and an `editToken`.\n\n> Example: *\"Publish my Q3 report as a private page with a password.\"* →\n> `dochost.co/d/q3-report` (password-gated, 7-day link on free).\n\n### `update_page`\nReplace the content of a page **in place**. The URL, view/like counts and expiry\nall survive — only `body`, `format` and `title` change.\n\n| Parameter | Type | Notes |\n|---|---|---|\n| `slug` | string (required) | The page to update. |\n| `body` | string (required) | The new Markdown or HTML content. |\n| `format` | `\"markdown\"` \\| `\"html\"` | Auto-detected when omitted. |\n| `title` | string | Override the derived title. |\n\n> Prefer this over publishing again whenever you are revising something already\n> published — a second `publish` mints a second link and strands the one the\n> reader already has. Resending identical content is a no-op.\n\n### `list_my_pages`\nList the pages you have published, newest first. Paginated (`limit`, `offset`);\nreturns compact records without page bodies.\n\n### `get_page`\nLook up one page by `slug`: title, format, status, view/like counts, expiry, and\nwhether it is password-protected. Never returns the body or the password.\n\n### `get_account`\nYour plan, page-quota usage and entitlement flags (size cap, custom slug,\npassword, branding). Worth calling before `publish` so the assistant knows your\nlimits up front instead of failing on them.\n\n### `delete_page`\nPermanently delete a page by `slug`. The link stops working immediately and the\nslug is freed. Deleting an already-deleted page is a safe no-op.\n\n## Notes\n\n- Ownership and entitlements come from your authenticated account, never from\n  tool input.\n- Published pages live on **`dochost.co`**, a separate cookieless content origin\n  — never on the app origin `dochost.io`. That is what lets dochost serve author\n  HTML under a hardened policy without it touching your session. `dochost.io/d/…`\n  permanently redirects to `dochost.co/d/…`, so old links keep working.\n- Free links last 7 days; permanent links, password, custom slug, custom\n  subdomain and branding removal are on the paid plans — see\n  [dochost.io](https://dochost.io).\n\n## Links\n\n- Homepage — https://dochost.io\n- MCP setup & docs — https://dochost.io/mcp\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n",
  "bytes": 6805,
  "sha": "73655bf0d345fded343d7e753829738363b73edd8d3c6025b617ee18623186c0",
  "repo_slug": "zyli5313/dochost-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_zyli5313_dochost_mcp_2fa3b05e/readme"
}