Guides
Development
Project structure, checks, and contribution workflow.
dm-dot is deliberately small: a Go MCP + REST backend and an Astro + ZueDocs site restored from the original Go MCP template. All operational details live in ZueDocs, not the marketing landing page.
Project structure
api/mcp.go MCP Vercel Function
api/messages/index.go REST Vercel Function
pkg/server/ Authentication, tools, events, Redis, webhook delivery
docs/src/pages/index.astro Landing page design (Astro)
docs/src/pages/docs/ ZueDocs routes, layouts, and code enhancements
docs/src/content/docs/ Canonical technical Markdown documents
docs/src/data/docs.ts ZueDocs categories, navigation and metadata
docs/public/assets/ Landing page CSS and interaction script
docs/dist/ Generated Astro site (ignored by Git)
docs/vercel.json Separate documentation Vercel project
vercel.json API-only Go functions, rewrites and redirects
Local checks
Requires Go 1.26+, Node.js 22+, and Bun 1.4+.
go test ./...
go vet ./...
make docs-install
make docs-check
make check
ZueDocs/Astro renders all pages. make docs-check validates Astro source and types; make docs-build builds the static site, and make check covers Go plus ZueDocs. The website deploys from docs/ independently of the repository-root Go API project. There is no separate custom Markdown renderer.
For a local static preview:
cd docs
bun run build
python3 -m http.server 4173 --directory dist
Open http://localhost:4173. The ZueDocs site does not send live messages. API routes only work when deployed to Vercel or when tested with an appropriate local Go/Vercel HTTP runtime.
Protocol implementation
The official Go MCP SDK implements tools, transport and version negotiation. The pinned SDK version does not natively expose the MCP Events capability, so pkg/server/server.go inserts events: {} into both handshake response paths and handles events/* methods itself.
Keep regression coverage for initialize and MCP 2.0 server/discover. A correct events/list alone is insufficient for ChatGPT’s subscription discovery.
The common SendMessage function is used by both the MCP tool and REST ingress. A change to message validation, subscription storage, signing or retries must be tested through both surfaces.
Testing and security
- Go tests use local mock REST and webhook servers. They do not contact the live dot or real Upstash database.
- Never expose keys or webhook callback signing secrets in tests, docs, commits or screenshots.
- Keep the GitHub repository private until its owner explicitly changes visibility.
- The live API must remain authenticated even if source code becomes public later.
- Verify
make check,git diff --check, and hosted HTTP responses before shipping changes.
For future contributions, see CONTRIBUTING.md in the repository. Security considerations are detailed in Security.