MCP Server Boilerplate (TypeScript)
@Falkicon
TypeScript boilerplate for MCP servers using the official SDK, with support for stdio/http, logging, docker, and tests.
Overview
What is MCP Server Boilerplate (TypeScript)?
A well-structured, maintainable boilerplate for building Model Context Protocol (MCP) servers in TypeScript. It uses the official @modelcontextprotocol/sdk with stdio transport and includes example tools, resources, and prompts to accelerate development.
How to use MCP Server Boilerplate (TypeScript)?
Clone the repository, run npm install, optionally copy .env.example to .env and configure environment variables. For development, use npm run dev (hot‑reload with pretty logs); for production, run npm run build then npm start. A Docker image can be built via docker build -t mcp-server-boilerplate . and run with docker run -i --rm mcp-server-boilerplate. Configure clients like Cursor by pointing mcp.json to the compiled dist/index.js --stdio.
Key features of MCP Server Boilerplate (TypeScript)
- TypeScript, MCP SDK, and stdio transport
- Example primitives:
greetandaddtools,welcomeresource,summarizeprompt - Configuration via
.envfiles and environment variables - Input validation with Zod, structured logging with pino, custom error classes
- Multi‑stage Dockerfile, ESLint/Prettier, testing with Vitest
Use cases of MCP Server Boilerplate (TypeScript)
- Starting a new MCP server project with best practices baked in
- Learning the MCP protocol through working examples
- Building extensible MCP integrations for AI assistants
- Rapidly prototyping tools, resources, and prompts
FAQ from MCP Server Boilerplate (TypeScript)
What transport does the server use?
It uses stdio transport by default, sending JSON‑RPC messages over standard input/output.
How do I configure logging?
Set LOG_LEVEL (default info) and NODE_ENV (default development, enabling pretty logs; set to production for JSON logs).
Can users directly invoke MCP tools in chat?
No. MCP tools are designed to be called by the AI assistant, not directly by users. The AI discovers and invokes tools on behalf of the user.
What are the known limitations?
AI model compatibility for tool invocation can vary. Cursor currently only supports tools (not resources/prompts) and sends only the first 40 tools to the Agent. Remote development over SSH may not work properly.
How do I add a new tool?
Define a Zod schema for arguments, then use server.tool(name, schemaDefinition, handler). Register tools with simple names only (e.g., "add"); the client automatically prefixes them for AI calls.