MCP Server Boilerplate
This server provides basic MCP (Model Context Protocol) functionality with the following capabilities:
Tools:
echo: Returns the exact message provided back to the caller — useful for testing connectivity and basic tool invocation.timestamp: Returns the current UTC timestamp with no input required — useful for time-stamping events or checking server responsiveness.
Resources:
server://info: Provides server metadata including name, version, and available tools in JSON format.
It serves as a production-ready starter template supporting MCP primitives (tools, resources, prompts), built with TypeScript and Python templates, and includes Claude Desktop configuration for building custom MCP servers.
MCP Server Boilerplate
Production-ready starter templates for building Model Context Protocol servers in TypeScript and Python.
Skip the boilerplate. Start building tools your AI agents can actually use.
Server Capabilities
This boilerplate ships with working examples of all three MCP primitives:
Tools
Tool | Description | Parameters |
| Echo a message back to the caller |
|
| Get the current UTC timestamp | (none) |
Resources
URI | Description | MIME Type |
| Server metadata (name, version, available tools) |
|
Prompts
No prompt templates are registered in the starter. The full kit includes prompt template patterns.
Related MCP server: sequential-thinking-mcp
What's Included (Free)
TypeScript Quickstart
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({
name: "my-mcp-server",
version: "1.0.0",
});
// Register a tool
server.tool("hello", { name: { type: "string" } }, async ({ name }) => ({
content: [{ type: "text", text: `Hello, ${name}!` }],
}));
// Connect via stdio
const transport = new StdioServerTransport();
await server.connect(transport);Python Quickstart
from mcp.server import Server
from mcp.server.stdio import stdio_server
app = Server("my-mcp-server")
@app.tool()
async def hello(name: str) -> str:
"""Say hello to someone."""
return f"Hello, {name}!"
async def main():
async with stdio_server() as (read, write):
await app.run(read, write)Claude Desktop Configuration
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["tsx", "src/index.ts"]
}
}
}Project Structure
my-mcp-server/
├── src/
│ └── index.ts # Server entry point
├── tools/
│ └── example.ts # Tool definitions
├── resources/
│ └── example.ts # Resource providers
├── package.json
├── tsconfig.json
└── claude_desktop_config.jsonGetting Started
Clone this repo
npm installnpm run buildAdd to your Claude Desktop config
Start building tools
Going Further
This free boilerplate gets you started. The MCP Server Boilerplate Kit ($49) includes:
✅ Full TypeScript + Python dual-language templates
✅ Docker containerization with multi-stage builds
✅ CI/CD pipeline (GitHub Actions) for automated testing & deployment
✅ SSE (Server-Sent Events) transport for web deployments
✅ 15+ pre-built tool examples (file ops, API calls, database queries)
✅ Resource and prompt template patterns
✅ Error handling, logging, and retry patterns
✅ Testing framework with mock MCP client
✅ Production deployment guide (Docker, systemd, cloud)
✅ Claude Desktop + Cursor + Windsurf integration configs
Resources
License
MIT — use this however you want.
Available Tools
2 toolsechoA
Echo a message back to the caller
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message to echo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description fully captures the tool's behavior: it returns the input message. No hidden side effects or complexities exist for this trivial tool.
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?
The description is a single, focused sentence that is front-loaded with the main action. No unnecessary information is included.
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?
The tool is very simple with one parameter and no output schema. The description adequately communicates the behavior, though it does not explicitly mention the return format, which is obvious.
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?
The schema provides 100% coverage with a description for the single parameter 'message'. The tool description adds no additional meaning beyond the schema, meeting the baseline.
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?
The description clearly states the action ('Echo') and the resource ('a message back to the caller'). It distinguishes itself from the sibling tool 'timestamp' by being a simple pass-through operation.
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?
While no explicit when-to-use or when-not-to-use is given, the tool's simplicity and contrast with 'timestamp' make usage context clear. It is implied for testing or verification purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timestampA
Get the current UTC timestamp
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It clearly indicates a read-only operation returning a timestamp, but lacks details on format (e.g., seconds vs. milliseconds) or any potential edge cases, though the simplicity of the tool makes this minor.
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?
The description is a single, front-loaded sentence with zero extraneous words. It efficiently communicates the tool's purpose for a parameterless tool.
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?
Given the tool's simplicity (no parameters, no output schema, no complex behavior), the description fully suffices. It answers the fundamental question of what the tool does without omission.
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?
No parameters exist, so baseline is 4. Schema coverage is 100% by default, and the description adds no parameter information because none is needed.
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?
The description precisely states the tool's function: 'Get the current UTC timestamp'. It uses a specific verb ('get') and resource ('current UTC timestamp'), clearly distinguishing it from the unrelated sibling 'echo'.
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?
The description does not provide any guidance on when to use this tool versus alternatives or mention any prerequisites. It implies usage for obtaining the current timestamp, but no explicit context or exclusions are given.
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. Dates show when Glama detected each change.
2 tool updates
- Added
echo - Added
timestamp
TDQS
The two tools have completely distinct purposes: one echoes messages, the other returns timestamps. There is no overlap or ambiguity.
Both tool names are single-word lowercase verbs ('echo', 'timestamp'), following a consistent and predictable pattern.
With only 2 tools, the set is minimal, but as a boilerplate or template, each tool serves a clear and essential purpose. It is slightly under the typical range but reasonable for its intended use.
For a boilerplate server, the tool surface is complete: it provides basic demonstration functions (echo and timestamp) with no missing operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseBqualityDmaintenanceAnthropic's github MCP server, but better. Support for more endpoints. Including releases and tags, pull request reviews, statuses, rate limit, gists, projects, packages, and even pull request diffs. Indented to be used with MissionSquad's MCP API for secret management (aka your access token).4586110MIT
- AlicenseAqualityCmaintenanceSimple sequential thinking MCP in python14MIT
- FlicenseNot gradedqualityDmaintenanceA starter template for building MCP servers with TypeScript support, example tools, and automated installation scripts for Claude Desktop, Cursor, and other MCP-compatible AI assistants. Provides a foundation for creating custom tools, resource providers, and prompt templates.16-
- FlicenseAqualityDmaintenanceA starter template for building MCP (Model Context Protocol) servers with TypeScript support. Provides a clean foundation with example tools, resources, and prompts for creating custom integrations with Claude, Cursor, or other MCP-compatible AI assistants.214-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/shellsage-ai/mcp-server-boilerplate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server