Your docs have two audiences now.
gomddoc turns a folder of Markdown into a fast, searchable documentation site for your readers, and an MCP server for their AI agents. One binary, no build step, no config file to write first.
brew install monolithiclab/tap/gomddoc
gomddoc preview --open ./docs
No Homebrew? Use the install script, go install or the Docker image.
- Linux and macOS, amd64 and arm64
- Signed releases, checksum-verified installer
- Free for personal and noncommercial use
GET /guides/deploytext/htmlGET /guides/deploytext/markdownHumans browse. Agents query.
Open a page in a browser and you get a themed site with navigation, search and a table of contents. Ask the same URL for Markdown and you get the source back, with a frontmatter block listing the page's metadata, related pages and its neighbours in the navigation. That is context a model can use directly, with no HTML to strip.
curl -H "Accept: text/markdown" https://docs.example.com/guides/deploy
For deeper access, connect an MCP client. Claude, Cursor, Copilot and any other client that speaks the Model Context Protocol get six read-only tools: search the docs, read a page or a single section, list pages, walk the table of contents and find related pages.
{
"mcpServers": {
"docs": {
"command": "gomddoc",
"args": ["mcp", "./docs"]
}
}
}
A running gomddoc serve exposes the same tools over HTTP at /_mcp/, behind the same authentication as the
site itself.
Serve any Git repository
Pass a Git URL wherever you would pass a folder. gomddoc makes a shallow clone at startup and serves it straight from memory.
gomddoc serve "git+https://github.com/your-org/your-project.git"
Pin a branch and a subdirectory in the URL fragment. This serves the docs/ folder of the release-2.1
branch:
gomddoc serve "git+https://github.com/your-org/monorepo.git#release-2.1:docs"
Private repositories work over SSH with a deploy key and strict host-key checking. The same URLs work with
preview, build and mcp, so you can hand an agent the docs of a project you have never cloned.
Edit, refresh, publish
Pages render on request, so there is nothing to rebuild while you write. Edit a page, refresh the browser and
the change is there. preview picks a free port and opens the browser for you.
gomddoc preview --open ./docs
Reviewing a draft an agent wrote? Select a passage, click the pen in the margin and type a note. The Annotations button collects every note on the page as Markdown that names the source file and quotes each passage, so you paste one block back into your agent and it revises the right lines. Notes stay in your browser.
When you want static files for GitHub Pages, S3 or Netlify, gomddoc build runs the same renderer and writes
a complete site, with sitemap, feed, tag pages and a 404 page. Search, Markdown negotiation and MCP need the
live server; everything else works from a bucket.
Your folders are the navigation
gomddoc reads the directory tree and builds the sidebar from it. There is no routing table to maintain and no sidebar file to keep in sync.
docs/
README.md → /
getting-started.md → /getting-started
api/
README.md → /api/
endpoints.md → /api/endpoints
guides/
deployment.md → /guides/deployment
Breadcrumbs, a table of contents, heading anchors, dark mode, syntax highlighting and copy buttons come with
every page. Old .md links redirect to the clean URL, and redirect_from in frontmatter keeps moved pages
reachable.
Production ready on day one
serve is the command you deploy. It ships with the operational basics a docs site needs behind a load
balancer.
Observability
- Prometheus metrics at
/metrics - Health probes at
/health/liveand/health/ready - Request IDs on every response and log line
- Admin port to keep metrics and pprof off the public listener
Performance
- Gzip for responses of 1 KB and up
- ETags with
304 Not Modifiedon repeat visits - Graceful shutdown that lets in-flight requests finish
- About 35 MB of memory for a small site
Security
- Path jail: nothing outside the content root is reachable
- Dotfiles and excluded paths answer 404
- Security headers on every response
- Basic Auth from a bcrypt htpasswd file
SEO
- Canonical URLs, Open Graph and Twitter cards
- Sitemap and Atom feed, one per language
- JSON-LD structured data on every page
- Per-page
noindexfrom frontmatter
Deployment
- Distroless image of about 30 MB, running as non-root
- Multi-arch for amd64 and arm64
- Read-only root filesystem friendly
- Kubernetes-ready probes and SIGTERM handling
Your agent can configure it too
gomddoc ships its own manual. gomddoc help reads the full guide in the terminal, gomddoc schema prints the
JSON Schema for the config file, and gomddoc doctor checks a site and reports every problem with its file,
line and fix.
$ gomddoc doctor ./docs
error .gomddoc/config.yml:3 config.unknown-key unknown key `hightlighting` at the top level
fix: did you mean `highlighting`?
1 error, 0 warnings (1 info hidden, use -v)
Over MCP, the same guide, schema and doctor are available to the agent editing your docs, so it can set up
gomddoc and check its own work before you review it. doctor --strict fails CI on warnings.
Search with tags built in
Full-text search is ready as soon as the server starts, with no plugin and no hosted index. Press Ctrl+K or Cmd+K on any page. Results rank by relevance, with titles weighted above body text.
tag:kubernetes rollback
Tags from frontmatter work as filters. The same query syntax works in the search box, in GET /api/search
and in the search_docs tool your agent calls.
One folder per language
Add a directory named with a language tag, such as fr-FR or zh-Hans, and gomddoc serves it as a
translation. Each language gets its own routes, search, sitemap, feed and tag pages, and every page links to
its translations with hreflang.
docs/
README.md → /
fr-FR/README.md → /fr-FR/
zh-Hans/README.md → /zh-Hans/
A language switcher appears automatically. The interface ships in English, and a small locale file translates it.
Eight themes, or your own
The default theme is built in. Seven more, including Material, Nord and Midnight, install from
gomddoc-themes by copying a folder. All of them support light
and dark mode and every feature above.
For a look of your own, put Go templates in .gomddoc/assets/themes/ and they override the built-in ones.
Your theme lives next to your content, versioned in the same repository. This site runs on a custom theme,
served by gomddoc.
Markdown, with the extras you expect
gomddoc reads CommonMark and GitHub Flavored Markdown, so your files still render correctly on GitHub.
- Syntax highlighting rendered on the server with Chroma
- Admonitions in GitHub syntax:
> [!NOTE],> [!TIP],> [!WARNING] - Mermaid diagrams and KaTeX math
- Tags with chips, tag pages and a "See also" list
- Color chips: a hex code in backticks, like
#38BDF8 , shows its swatch
Free for your projects, licensed for your company
Personal projects, community open source, research, teaching and nonprofits are free under the PolyForm Noncommercial License. The source is public on GitHub.
Running gomddoc for a business needs a commercial licence. It is priced per deployment, so readers, writers and traffic never change the price. Write to contact@monolithiclab.fr with what you are running and we will send terms.
Try it on your docs
Install gomddoc and point it at any folder of Markdown. Your site opens in the browser a few seconds later.
curl -fsSL https://raw.githubusercontent.com/monolithiclab/gomddoc/main/scripts/install.sh | sh
gomddoc preview --open ./docs
Read the quick start · Browse the features · Star it on GitHub