docs-publisher
Provides tools to list, read, publish, edit, and delete tutorial pages by committing Markdown to a GitHub-hosted docs repository; also uploads images from public HTTPS URLs into the repo and can trigger site redeployment.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@docs-publisherWrite a tutorial on webhooks and publish it as guides/webhooks."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
docs-publisher-mcp
Let Claude write your documentation. This is an MCP connector that gives Claude tools to publish, edit and delete tutorials on a Git-based docs site (Docusaurus, MkDocs, VitePress and others), and to add pictures to them. Everything goes straight to your GitHub repo, and the site redeploys by itself, so a tutorial is live a minute or two after Claude writes it.
See it working: docsXAi is a docs site built with it (source). Its setup guide has a one-minute demo video.
You chat with Claude → this connector → GitHub repo → live docs siteWhat Claude can do
Tool | What it does |
| List the pages on the site |
| Read a page |
| Create a page, or replace one |
| Change one exact piece of text in a page |
| Remove a page |
| Save a picture from a public |
| Rebuild the site by hand (normally not needed) |
Ask in plain words, for example: "Write a tutorial on webhooks and publish it as guides/webhooks."
upload_image accepts only JPEG, PNG, GIF and WebP files up to 5 MB. It checks the file itself rather than its name, and refuses http:// links and private network addresses, so it can't be used to reach things on your own network.
Related MCP server: ship-it-mcp
Quick start
You need a GitHub token: create a fine-grained personal access token for your docs repo only, with Contents: Read and write.
Option A: on your own computer (just you)
Needs Node.js 18 or later. No server and no public address.
git clone https://github.com/ArfZkwn-coder/docs-publisher-mcp
cd docs-publisher-mcp
npm install
claude mcp add docs-publisher -e GITHUB_TOKEN=<your-token> -e DOCS_REPO=<owner>/<repo> -- node "$(pwd)/src/index.js"For Claude Desktop, add this under mcpServers in claude_desktop_config.json (use the full path to src/index.js):
"docs-publisher": {
"command": "node",
"args": ["/full/path/to/docs-publisher-mcp/src/index.js"],
"env": { "GITHUB_TOKEN": "<your-token>", "DOCS_REPO": "<owner>/<repo>" }
}Option B: on a server, for a team using claude.ai
Anyone you give a personal URL can use it from claude.ai (web, desktop or phone) without installing anything.
Get the code on the server and create your settings file:
git clone https://github.com/ArfZkwn-coder/docs-publisher-mcp cd docs-publisher-mcp cp .env.example .envEdit
.env: setGITHUB_TOKEN,DOCS_REPO, a long randomMCP_SECRET(openssl rand -hex 24makes one), andPUBLIC_URL(step 3).Start it with Docker:
docker compose up -d --buildOn ZimaOS, which has no
docker compose, runsh run.shinstead. The first start clones your docs site and installs it, which takes a few minutes.docker logs -f docs-publishershows progress; it's ready atlistening on port 8787.Give it a public https address, because claude.ai connects from the internet. Don't open a port on your router; use a tunnel:
Tailscale Funnel:
tailscale funnel --bg 8787gives youhttps://<machine>.<tailnet>.ts.net.Cloudflare Tunnel: point a hostname at
http://localhost:8787.
Check
https://<your-address>/health: it should say{"ok":true}. Put that address inPUBLIC_URL, then restart withdocker compose up -d.Add it in claude.ai: Customize → Connectors → Add custom connector, name
docs-publisher, URLhttps://<your-address>/mcp/<MCP_SECRET>.
Hosting it elsewhere works too: any Linux server, VPS, NAS or Raspberry Pi that runs Docker will do. It needs a small persistent folder (./data, mounted at /data) for the keys and the site clone.
Give other people access
Give each person their own key, so you can remove one without affecting anyone else, and every commit says who asked for it, for example docs: publish "FAQ" (by alice).
docker exec docs-publisher node src/keys-cli.js add alice # prints alice's connector URL
docker exec docs-publisher node src/keys-cli.js list # names only
docker exec docs-publisher node src/keys-cli.js remove alice # her URL stops working at onceSend each URL privately. Each person adds it in their own claude.ai as in step 4 above. Keys live in data/keys.json and take effect immediately, with no restart.
A connector URL is a password. Anyone who has it can publish, edit and delete pages on your live site, so only give it to people you trust.
Optional: let people request access on Telegram
The n8n/ folder has ready-made n8n workflows that do the key handling for you:
docs-access-bot.json: a Telegram bot. Someone sends/access, you reply/approve <chat_id> <name>, and the bot sends them their URL. You can also send/revoke <name>,/listand/myid. SetOWNER_CHAT_IDin the Route node to your own chat ID so that only you can approve.docs-access.json: two n8n forms to give and revoke access without Telegram.
They talk to a small admin API that turns on when you set ADMIN_TOKEN (24+ random characters). It listens on port 8788 and needs the header Authorization: Bearer <ADMIN_TOKEN>:
Request | What it does |
| List names |
| Create or replace a key and return the URL |
| Remove a key |
Keep port 8788 private: docker-compose.yml and run.sh publish it only on the Docker bridge address (172.17.0.1, Linux). Never expose it through a tunnel. The Telegram bot needs Telegram to reach n8n's /webhook path over https; expose only that path, never the n8n editor.
Settings
Set these in .env.
Variable | Needed | Default | Meaning |
| yes | – | Token with write access to the docs repo |
| yes | – |
|
| no |
| Branch the site is built from |
| no |
| Folder with the tutorials |
| server | – | Your own key (24+ random characters). Needed unless you use only personal keys |
| server | – | Public address, used to print personal URLs |
| server |
| File that holds personal keys |
| no |
| Port the server listens on |
| no | – | Local clone of the site repo. Turns on deploying from the connector (Docker sets it for you) |
| no |
| Redeploy after every change. |
| no |
| Command that builds and publishes the site, run in |
| no | – | Turns on the admin API |
Deploying: with SITE_DIR set, the connector pulls the repo and runs DEPLOY_COMMAND after every change; changes that arrive during a deploy are folded into one more. The default suits Docusaurus (docusaurus deploy pushes to gh-pages) and needs Git credentials that can push. If a CI workflow already deploys on every push, skip all this: leave SITE_DIR unset.
Good to know
After changing
.env, recreate the container withdocker compose up -d(orsh run.sh).docker restartkeeps the old settings.GitHub shows your token's owner as the author of every commit. The
(by <name>)in the message shows who asked. To undo a change, revert that commit and redeploy.Don't require pull requests on
mainwith branch protection: the connector commits to it directly.To update the server, pull the new code and run
docker compose up -d --build(orsh run.sh) again.
Tests
npm testAn end-to-end check using a fake GitHub and shell. It needs no token or network.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Read, edit, publish, and preview your pepita websites from Claude.
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Operate GitHub from your AI assistant: repos, PRs, issues, Actions. Previews and read-only mode.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables Git and GitHub pull request operations through Claude AI, including repository management, branch operations, commits, and PR creation/commenting. Streamlines development workflows by providing Git commands and GitHub API integration through natural language interactions.-
- FlicenseNot gradedqualityDmaintenanceEnables to interact with GitHub repositories directly from Claude, supporting actions like viewing repos, checking status, committing and pushing changes, and managing pull requests.-
- AlicenseAqualityDmaintenanceEnables Claude to access and manage GitHub repositories dynamically at runtime, including private repos, with tools for browsing files, searching code, and viewing commits, pull requests, and issues.111ISC
- AlicenseNot gradedqualityDmaintenanceConnects Claude to GitHub repositories for querying repos, reviewing PRs, managing issues, searching code, and automating workflows.MIT