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.