Skip to content

Operations

wiki-agent[bot] edited this page Jul 21, 2026 · 32 revisions

Operations & release

Build & run

Command Effect
npm run build tsc compiles src/dist/
npm run type-check tsc --noEmit
npm run dev tsc --watch + node --watch dist/index.js (HTTP)
npm start node dist/index.js (HTTP entrypoint)
npm run lint eslint .

package.json#main is dist/index.js (HTTP), and package.json#bin.chronova-mcp-server points at dist/stdio.js (stdio). The published package includes only dist/ and README.md (see files).

Node engine: >=18. TypeScript target is configured by tsconfig.json.

Docker

Dockerfile is a two-stage build on node:24-alpine:

  1. Buildernpm ci, copies tsconfig.json + src/, runs npm run build.
  2. Runtime — copies dist/ and node_modules from the builder, plus package*.json. Sets ENV PORT=3001, EXPOSE 3001, and CMD ["node", "dist/index.js"].

Note: the runtime copies the full node_modules from the builder (no production prune), since the builder already installed via npm ci. The image runs the HTTP entrypoint, so Docker deployment is HTTP-transport only.

docker build -t chronova-mcp .
docker run -e CHRONOVA_API_KEY=your-key -p 3001:3001 chronova-mcp

/health is available for liveness/readiness probes; graceful shutdown is handled via SIGTERM/SIGINT in startServer().

Release — semantic-release

Release is automated via semantic-release (npm run semantic-release). Configuration in .releaserc.json plus these devDependencies:

  • @semantic-release/commit-analyzer — determines version bump from conventional commits.
  • @semantic-release/release-notes-generator — generates changelog.
  • @semantic-release/changelog + @semantic-release/git — update CHANGELOG.md and commit it back.
  • @semantic-release/npm — publish to npm ("publishConfig": { "access": "public" }).
  • @semantic-release/github — GitHub release.

The npm package name is @chronova/mcp-server (currently version: "1.1.1" in package.json). src/version.ts reads this value from package.json at import time, so the version reported by /health and MCP initialize is always the same as the published package version.

Release branches: .releaserc.json targets main plus two prerelease channels, beta and alpha. Pushes to beta produce v{version}-beta.N tags/prereleases; pushes to alpha produce v{version}-alpha.N.

.github/workflows/test.yml runs type-check, lint, build, and test on push/PR to main, develop, and feat/*/fix/* branches. .github/workflows/release.yml re-runs those checks on main pushes and then invokes semantic-release. .github/workflows/update-wiki.yml regenerates .wiki/ daily at 08:00 UTC and on every main push, flattening the output into the GitHub Wiki repo and opening a staging PR when there are changes.

Additional automation lives in .github/workflows/auto-manage.yml (tags issues with needs-triage and assigns to niklasschaeffer) and the OMP workflows (omp.yml, omp-ci.yml, omp-fix-issue.yml) that drive the agent commands under .omp/commands/. renovate.json uses the Renovate recommended preset for dependency PRs.

Publishing notes

  • prepublishOnly runs npm run build, ensuring dist/ is fresh before publish.
  • private: false and publishConfig.access: public make the scoped package publicly installable.
  • The published tarball is limited to dist/ + README.md by files; tests, sources, and configs are excluded.

Clone this wiki locally