mcp server boilerplate
A ready-to-use starter implementation of the Model Context Protocol (MCP) server that enables applications to provide standardized context for LLMs with sample resources, tools, and prompts.
A ready-to-use starter implementation of the Model Context Protocol (MCP) server that enables applications to provide standardized context for LLMs with sample resources, tools, and prompts.
A boilerplate server implementation for the Model Context Protocol (MCP), built with TypeScript and Express.
This project implements a server that follows the Model Context Protocol (MCP), which allows applications to provide context for LLMs in a standardized way. It includes:
mcp-server-boilerplate/
├── .env # Environment variables
├── .env.example # Example environment variables
├── .gitignore # Git ignore file
├── package.json # Project dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── src/
│ ├── index.ts # Main HTTP server entry point
│ ├── stdio.ts # Stdio server entry point
│ ├── resources/ # MCP resources
│ │ ├── index.ts # Resource registration
│ │ ├── infoResource.ts # Static info resource
│ │ └── greetingResource.ts # Dynamic greeting resource
│ ├── tools/ # MCP tools
│ │ ├── index.ts # Tool registration
│ │ ├── calculatorTool.ts # Sample calculator tool
│ │ └── timestampTool.ts # Sample timestamp tool
│ └── prompts/ # MCP prompts
│ ├── index.ts # Prompt registration
│ ├── greetingPrompt.ts # Sample greeting prompt
│ └── analyzeDataPrompt.ts # Sample data analysis prompt
└── dist/ # Compiled JavaScript output
Clone the repository and install dependencies:
git clone https://github.com/yourusername/mcp-server-boilerplate.git
cd mcp-server-boilerplate
npm install
Copy the example environment file and modify as needed:
cp .env.example .env
Available environment variables:
PORT
: The port for the HTTP server (default: 3000)NODE_ENV
: Environment mode (development, production)Build and start the HTTP server:
npm run build
npm start
For development with auto-restart:
npm run dev
The server will be available at http://localhost:3000/mcp
(or the port specified in your .env file).
To run the server in stdio mode (for command-line tools):
npm run start:stdio
For development with auto-restart:
npm run dev:stdio
The boilerplate includes these example resources:
Static Info Resource: info://server
Provides basic information about the server
Dynamic Greeting Resource: greeting://{name}
To access resources:
The boilerplate includes these example tools:
Calculator: Performs basic arithmetic operations
Parameters:
operation
: Operation to perform (add, subtract, multiply, divide)a
: First numberb
: Second numberTimestamp: Provides the current time in various formats
format
: Output format (iso, unix, readable)The boilerplate includes these example prompts:
Greeting: Creates a personalized greeting prompt
Parameters:
name
: Name to greetformal
: Whether to use formal greeting style (optional)Analyze Data: Creates a prompt for data analysis
data
: The data to analyzeformat
: Data format (json, csv, text)instructions
: Additional analysis instructions (optional)To add a new resource:
src/resources/
(e.g., myResource.ts
)src/resources/index.ts
Example:
// myResource.ts
import { McpServer } from @modelcontextprotocol/sdk/server/mcp.js ;
export function myResource(server: McpServer): void {
server.resource( my-resource , my-resource://path , async uri => ({
contents: [
{
uri: uri.href,
text: My resource content ,
},
],
}));
}
// Then add to resources/index.ts
import { myResource } from ./myResource.js ;
export function registerResources(server: McpServer): void {
// ...existing resources
myResource(server);
}
To add a new tool:
src/tools/
(e.g., myTool.ts
)src/tools/index.ts
Example:
// myTool.ts
import { McpServer } from @modelcontextprotocol/sdk/server/mcp.js ;
import { z } from zod ;
export function myTool(server: McpServer): void {
server.tool( my-tool , { param: z.string() }, async ({ param }) => ({
content: [
{
type: text ,
text: `Processed: ${param}`,
},
],
}));
}
// Then add to tools/index.ts
import { myTool } from ./myTool.js ;
export function registerTools(server: McpServer): void {
// ...existing tools
myTool(server);
}
To add a new prompt:
src/prompts/
(e.g., myPrompt.ts
)src/prompts/index.ts
Example:
// myPrompt.ts
import { McpServer } from @modelcontextprotocol/sdk/server/mcp.js ;
import { z } from zod ;
export function myPrompt(server: McpServer): void {
server.prompt( my-prompt , { topic: z.string() }, ({ topic }) => ({
messages: [
{
role: user ,
content: {
type: text ,
text: `Please explain ${topic} in simple terms.`,
},
},
],
}));
}
// Then add to prompts/index.ts
import { myPrompt } from ./myPrompt.js ;
export function registerPrompts(server: McpServer): void {
// ...existing prompts
myPrompt(server);
}
To test your MCP server, you can use:
This project is licensed under the MIT License - see the LICENSE file for details.