mcp-server-template
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-templatecalculate text stats for 'hello world'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server Template
A production-ready starting point for a Model Context Protocol server: typed tools with schema-validated inputs, real tests, a multi-stage Docker image, and a CI pipeline โ the boring parts done right so the next MCP server starts at mile 10.
It ships with three example tools that cover the shapes you'll actually build: a pure tool, a networked tool, and a stateful tool.
Features
๐งฉ Modular tools โ one file per tool group, registered in one place
โ Schema-validated inputs via zod โ bad calls fail fast
๐งช Real tests โ an in-memory client/server harness, no mocks (
node:test)๐ณ Multi-stage Docker image that runs as a non-root user
๐ค CI โ format, type-check, test, build, and a Docker build, on every push/PR
๐ Protocol-safe logging โ stdout is reserved for MCP; logs go to stderr
๐ No secrets in the repo โ config via env, with a
.env.example
Related MCP server: TypeScript MCP Server Boilerplate
Quickstart
nvm use # or Node 20+
npm install
npm run dev # run the server over stdio (Ctrl-C to stop)
npm test # run the test suite
npm run build # compile to dist/Example tools
Tool | Kind | What it shows |
| pure | Validated input โ structured output, no side effects |
| networked | External API (Open-Meteo, no key), timeouts, error handling |
| stateful | File-backed persistence shared across tools |
Adding your own tool
This is the whole point of the template โ it's a three-step change:
Create
src/tools/my-thing.ts:import { z } from "zod"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { text } from "../lib/result.js"; export function registerMyThingTools(server: McpServer): void { server.tool( "greet", "Say hello to someone.", { name: z.string().describe("Who to greet") }, async ({ name }) => text(`Hello, ${name}!`), ); }Register it in
src/tools/index.ts(one line).Done โ transport, validation, error handling, tests, and Docker need no changes.
Connect it to a client
Build first (npm run build), then point your MCP client at dist/index.js.
Example config (e.g. Claude Desktop) in examples/mcp-config.json:
{
"mcpServers": {
"template": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-template/dist/index.js"]
}
}
}Architecture
A short, layered design โ entrypoint โ server factory โ tool groups โ small shared libs. Construction is separate from transport, which is what makes it both testable and easy to extend. Full write-up with a request-lifecycle diagram in ARCHITECTURE.md.
Testing
npm test builds the real server, connects a real MCP client over an in-memory
transport, and exercises tools end to end (schema validation included). Network
tools aren't hit in CI โ tests stay fast and deterministic.
Docker
docker build -t mcp-server-template .
docker run --rm -i mcp-server-template # -i: MCP talks over stdioProject structure
src/
โโโ index.ts # entrypoint: load env, build server, connect stdio
โโโ server.ts # buildServer() โ construction, transport-agnostic
โโโ lib/
โ โโโ logger.ts # stderr-only logging
โ โโโ result.ts # text() / errorResult() content helpers
โ โโโ http.ts # fetchJson() with timeout
โ โโโ env.ts # minimal .env loader
โโโ tools/
โโโ index.ts # registerAllTools() โ add new groups here
โโโ text.ts # pure tool
โโโ weather.ts # networked tool
โโโ notes.ts # stateful tool
test/ # in-memory client/server testsLicense
MIT ยฉ Eric Opoku
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EricAgyemang478/mcp-server-template'
If you have feedback or need assistance with the MCP directory API, please join our Discord server