MCP Server Boilerplate
This MCP Server Boilerplate provides a standardized interface for LLM applications using the Model Context Protocol, with sample tools, resources, and prompts for context management.
Tools:
Calculator - Perform basic arithmetic operations (add, subtract, multiply, divide) on two numbers
Timestamp - Get current time in various formats (ISO, Unix timestamp, or human-readable)
Resources:
Static Info Resource (
info://server) - Access server metadata and basic informationDynamic Greeting Resource (
greeting://{name}) - Generate personalized greetings using name parameters
Prompts:
Greeting Prompt - Create customized greeting prompts with optional formal/informal styling
Data Analysis Prompt - Generate prompts for analyzing data in JSON, CSV, or text formats
Key Features:
Dual Transport Support - Run via HTTP server (port 3000 by default) or stdio mode for command-line integration
TypeScript Support - Fully typed implementation for better developer experience
Extensible Architecture - Easy-to-extend structure for adding custom resources, tools, and prompts
Development Ready - Includes hot-reload development mode
Enables configuration of the MCP server through environment variables, supporting settings for port configuration, environment mode, and OAuth settings.
Provides the HTTP transport layer for the MCP server, allowing it to serve MCP resources, tools, and prompts over a RESTful API interface.
Serves as the runtime environment for the MCP server, enabling both HTTP and stdio transport options.
Provides type safety and improved developer experience for creating and extending MCP resources, tools, and prompts.
Used for parameter validation in tools and prompts, ensuring that incoming data conforms to expected schemas.
Click on "Deploy 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 Boilerplateshow me the calculator tool parameters"
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 Boilerplate
A boilerplate server implementation for the Model Context Protocol (MCP), built with TypeScript and Express.
Table of Contents
Related MCP server: MCP Server Scaffold
Overview
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:
A fully configured MCP server with HTTP and stdio transport options
Sample resources, tools, and prompts to demonstrate key functionality
TypeScript support for type safety and better developer experience
Express integration for the HTTP transport layer
Project Structure
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 outputGetting Started
Prerequisites
Node.js (v18 or later)
npm or yarn
Installation
Clone the repository and install dependencies:
git clone https://github.com/yourusername/mcp-server-boilerplate.git
cd mcp-server-boilerplate
npm installEnvironment Variables
Copy the example environment file and modify as needed:
cp .env.example .envAvailable environment variables:
PORT: The port for the HTTP server (default: 3000)NODE_ENV: Environment mode (development, production)OAuth settings (if needed)
Running the Server
HTTP Server
Build and start the HTTP server:
npm run build
npm startFor development with auto-restart:
npm run devThe server will be available at http://localhost:3000/mcp (or the port specified in your .env file).
Stdio Mode
To run the server in stdio mode (for command-line tools):
npm run start:stdioFor development with auto-restart:
npm run dev:stdioResources
The boilerplate includes these example resources:
Static Info Resource:
info://serverProvides basic information about the server
Dynamic Greeting Resource:
greeting://{name}Generates a personalized greeting with the provided name parameter
To access resources:
Through the MCP protocol
Using an MCP client library
Tools
The boilerplate includes these example tools:
Calculator: Performs basic arithmetic operations
Parameters:
operation: Operation to perform (add, subtract, multiply, divide)a: First numberb: Second number
Timestamp: Provides the current time in various formats
Parameters:
format: Output format (iso, unix, readable)
Prompts
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
Parameters:
data: The data to analyzeformat: Data format (json, csv, text)instructions: Additional analysis instructions (optional)
Extending the Server
Adding Resources
To add a new resource:
Create a new file in
src/resources/(e.g.,myResource.ts)Implement your resource handler
Register it in
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);
}Adding Tools
To add a new tool:
Create a new file in
src/tools/(e.g.,myTool.ts)Implement your tool handler
Register it in
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);
}Adding Prompts
To add a new prompt:
Create a new file in
src/prompts/(e.g.,myPrompt.ts)Implement your prompt handler
Register it in
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);
}Testing and Debugging
To test your MCP server, you can use:
The MCP Inspector tool
MCP client libraries
Direct HTTP requests (for debugging)
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
2 toolscalculateD
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | ||
| a | Yes | ||
| b | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timestampD
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | iso |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- First observed
calculate - First observed
timestamp
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: 'calculate' suggests mathematical or computational operations, while 'timestamp' implies time-related functions. With no overlapping descriptions, there is no ambiguity between them.
Both tool names follow a consistent pattern of using single, descriptive nouns in lowercase. There are no deviations in style or convention across the set.
With only 2 tools, the server feels thin and under-scoped for a 'boilerplate' purpose, which typically implies a foundational or example set. This minimal count limits functionality and utility.
The server lacks descriptions, making it impossible to infer a clear domain or assess coverage. Without context, it appears severely incomplete, with no indication of what operations are supported or how they fit together.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn educational implementation of a Model Context Protocol server that demonstrates how to build a functional MCP server integrating with various LLM clients.2MIT
- FlicenseBqualityDmaintenanceA basic starter project for building Model Context Protocol (MCP) servers that enables standardized interactions between AI systems and various data sources through secure, controlled tool implementations.2-
- FlicenseNot gradedqualityDmaintenanceA starter project designed to quickly build and deploy Model Context Protocol (MCP) servers using the TypeScript SDK and Zod for schema validation. It features example implementations for tools and resources, providing a solid foundation for custom MCP development and integration.-
- FlicenseNot gradedqualityDmaintenanceA minimal Model Context Protocol (MCP) server demonstrating the implementation of tools, resources, and prompts. It serves as a starter template built with the Smithery SDK for developing custom integrations.-