Scaffold a Model Context Protocol server in seconds. Like create-react-app, but for MCP.
Early groundwork — one working template (typescript-stdio-tool). See Roadmap.
npm install
npm run build
node dist/cli.js my-serverOr in dev mode (no build):
npm run dev -- my-serverFlags:
-t, --template <name>— pick template non-interactively-y, --yes— accept all defaults (implies--no-install,--no-git)--install/--no-install— install deps after generate (auto-detects npm/pnpm/yarn/bun)--git/--no-git—git init+ initial commit after generate
src/
cli.ts CLI entry (commander)
prompts.ts Interactive prompts (@inquirer/prompts)
templates.ts Discover templates/ at runtime
generator.ts Copy template + replace placeholders
templates/
typescript-stdio-tool/
template.json metadata (name, description)
package.json uses {{projectName}}, {{description}}, {{author}}
src/index.ts stdio MCP server with one example tool
_gitignore renamed to .gitignore on copy (npm strips real .gitignore)
- Create
templates/<name>/ - Add a
template.jsonwith{ "description": "..." } - Put real, runnable code inside — use
{{projectName}},{{description}},{{author}}where you want substitution - Files eligible for placeholder replacement live in
PLACEHOLDER_FILESin generator.ts — extend if needed - Use
_gitignoreinstead of.gitignore(auto-renamed)
GitHub Actions workflows live at .github/workflows/ — that's the only path GitHub recognizes; placing them anywhere else makes them inert.
- ci.yml — runs
npm ci,npm run build,npm test, and a CLI smoke test on Node 20/22 across Linux/Windows/macOS for every push and PR tomain. Also runs the Python SDK pin check (non-blocking). - sdk-bump.yml — weekly cron + manual trigger that runs the Python sync script and opens a PR when
@modelcontextprotocol/sdkhas a new release.
PolyForm Noncommercial 1.0.0 — free to fork, modify, and use for personal, research, educational, or other noncommercial purposes. Commercial use requires a separate license from the author.
- Template:
typescript-stdio-resource - Auto-install deps (
--install/--no-install) - Auto-init git repo (
--git/--no-git) - Project-name validation
- CI workflows
- More templates:
typescript-stdio-full,typescript-http-sse,python-stdio-tool - Helper to add Claude Desktop config entry
-
mcp add tool <name>subcommand to extend an existing project - Publish to npm as
create-mcp-serversonpm create mcp-serverworks - Tests (vitest) — at minimum, generate each template into a tmpdir and run
tsc
- Templates are real, runnable projects with placeholders, not a DSL. Lower mental tax, easier to test, easier to contribute.
- Replacements are scoped to
package.json,README.md,tsconfig.jsonby default. Keep source files clean of template syntax so they stay valid TypeScript. _gitignorerename trick — npm refuses to publish a real.gitignoreinside a package, so templates ship the underscore form.