iptracej-education/mcp-server-template
If you are the rightful owner of mcp-server-template and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This document provides a comprehensive guide to setting up and using a Model Context Protocol (MCP) server, which integrates with Claude Desktop and other MCP-compatible clients.
MCP Server Template
A starter template for creating Model Context Protocol (MCP) servers that integrate with Claude Desktop and other MCP-compatible clients.
For details, check Anthroic mcp documentation https://docs.anthropic.com/en/docs/mcp
Features
- Stdio transport implementation, including Claude Desktop integration
- Configurable tool system with built-in and custom tools
- JSON-based configuration with environment variable overrides
- Docker support for containerized deployment
- Comprehensive logging and error handling
- TypeScript-ready structure
- Example tools for common operations
Quick Start
Installation
# Clone the template
git clone https://github.com/yourusername/mcp-server-template.git
cd mcp-server-template
# Install dependencies
npm install
# Run in development mode
npm run dev
Configuration
Create a config.json file in the project root:
{
"serverName": "my-mcp-server",
"version": "1.0.0",
"debug": true,
"dataDir": "./data",
"outputDir": "./output",
"tools": {
"enabled": true,
"customToolsDir": "./custom-tools"
}
}
Claude Desktop Integration
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"my-server": {
"command": "node",
"args": ["/path/to/mcp-server-template/src/server/index.js"]
}
}
}
Project Structure
mcp-server-template/
├── src/
│ ├── server/ # Core server implementation
│ │ └── index.js # Main server entry point
│ ├── config/ # Configuration management
│ │ └── config-loader.js
│ ├── tools/ # Tool system
│ │ └── tool-registry.js
│ └── generator/ # Template generator (optional)
├── examples/ # Example implementations
│ ├── custom-tool.js # Example custom tool
│ └── docker/ # Docker configuration
├── tests/ # Test suite
├── docs/ # Documentation
├── config.json # Default configuration
└── package.json
Creating Custom Tools
Create a new tool in the custom-tools directory:
// custom-tools/my-tool.js
export default {
name: 'my_custom_tool',
description: 'Description of what this tool does',
inputSchema: {
type: 'object',
properties: {
param1: {
type: 'string',
description: 'First parameter'
},
param2: {
type: 'number',
description: 'Second parameter'
}
},
required: ['param1']
},
handler: async (args) => {
// Tool implementation
const result = await doSomething(args.param1, args.param2);
return {
success: true,
result: result
};
}
};
Built-in Tools
The template includes several built-in tools:
list_items- List all items with optional filteringadd_item- Add a new item to the systemremove_item- Remove an item by IDsearch_items- Search items with advanced queriesget_status- Get system status and statistics
Environment Variables
Override configuration using environment variables:
MCP_SERVER_NAME- Server nameMCP_VERSION- Server versionMCP_DEBUG- Enable debug loggingMCP_DATA_DIR- Data directory pathMCP_OUTPUT_DIR- Output directory pathMCP_CONFIG_PATH- Custom config file path
Docker Deployment
Build and run with Docker:
# Build image
docker build -t my-mcp-server .
# Run container
docker run -d \
-v $(pwd)/data:/app/data \
-v $(pwd)/output:/app/output \
--name my-mcp-server \
my-mcp-server
Development
Running Tests
npm test
Linting
npm run lint
Building for Production
npm run build
API Reference
Tool Schema
All tools follow this schema:
{
name: string, // Unique tool identifier
description: string, // Human-readable description
inputSchema: { // JSON Schema for parameters
type: 'object',
properties: {},
required: []
},
handler: async function // Tool implementation
}
Configuration Schema
{
serverName: string, // Server identifier
version: string, // Server version
debug: boolean, // Enable debug logging
dataDir: string, // Data storage directory
outputDir: string, // Output directory
maxFileSize: number, // Maximum file size in bytes
timeout: number, // Request timeout in ms
tools: {
enabled: boolean, // Enable tool system
customToolsDir: string // Custom tools directory
}
}
Extending the Template
Adding New Features
- Create feature modules in
src/features/ - Register with the server in
src/server/index.js - Add configuration options to
config-loader.js - Document in README and API reference
Creating Domain-Specific Servers
- Fork this template
- Replace example tools with domain-specific tools
- Customize configuration schema
- Update documentation
- Deploy as standalone MCP server
Troubleshooting
Common Issues
Server not starting:
- Check Node.js version (>=16.0.0)
- Verify configuration file syntax
- Check file permissions
Tools not loading:
- Verify tool file exports default object
- Check tool schema validity
- Review debug logs for errors
Claude Desktop integration:
- Ensure correct path in configuration
- Check server process is running
- Review Claude Desktop logs
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new features
- Update documentation
- Submit a pull request
License
MIT License - see LICENSE file for details
Support
- GitHub Issues: Report bugs or request features
- Documentation: Full documentation
- Examples: See the
examples/directory
Acknowledgments
Built for the Model Context Protocol ecosystem, enabling AI assistants to interact with external systems through a standardized interface.