generic-mcp-server
by v4lheru
Verified
# Generic MCP Server Template
A modular, extensible Model Context Protocol (MCP) server template designed for easy customization and extension.
## Features
- **Modular Architecture**: Clear separation of concerns with a well-defined structure
- **Small, Focused Files**: Better maintainability and easier for AI to ingest
- **Easy Extension Points**: Simple patterns for adding new tools and services
- **Comprehensive Error Handling**: Robust error management throughout the codebase
- **Type Safety**: Full TypeScript support with proper typing
## Project Structure
```
generic-mcp-template/
├── src/
│ ├── services/ # Service classes for API interactions
│ │ ├── base-service.ts # Abstract base service with common functionality
│ │ └── example-service.ts # Example service implementation
│ ├── tools/ # MCP tool definitions and handlers
│ │ ├── example-tools.ts # Tool definitions (name, description, schema)
│ │ └── example-tool-handlers.ts # Tool handler implementations
│ ├── types/ # TypeScript type definitions
│ │ └── example-types.ts # Example type definitions
│ ├── config.ts # Configuration management
│ └── index.ts # Main entry point
├── .env.example # Example environment variables
├── package.json # Project dependencies and scripts
├── tsconfig.json # TypeScript configuration
└── README.md # Project documentation
```
## Getting Started
### Prerequisites
- Node.js 18 or higher
- npm or yarn
### Installation
1. Clone this repository:
```bash
git clone https://github.com/v4lheru/generic-mcp-template.git
cd generic-mcp-template
```
2. Install dependencies:
```bash
npm install
```
3. Create a `.env` file based on `.env.example`:
```bash
cp .env.example .env
```
4. Edit the `.env` file with your API keys and configuration.
### Building and Running
1. Build the project:
```bash
npm run build
```
2. Run the server:
```bash
npm start
```
## Extending the Template
### Adding a New Service
1. Create a new service file in `src/services/`:
```typescript
// src/services/my-service.ts
import { BaseService } from './base-service.js';
import config from '../config.js';
export class MyService extends BaseService {
// Implement your service...
}
```
2. Add any necessary types in `src/types/`.
### Adding New Tools
1. Define your tools in a new file or extend the existing one in `src/tools/`:
```typescript
// src/tools/my-tools.ts
export const myTools = [
{
name: "my_tool",
description: "Description of my tool",
inputSchema: {
// JSON Schema for the tool's input
}
}
];
```
2. Implement handlers for your tools:
```typescript
// src/tools/my-tool-handlers.ts
import { MyService } from '../services/my-service.js';
export function createMyToolHandlers(myService: MyService) {
return {
my_tool: async (args: any) => {
// Implement your tool handler
}
};
}
```
3. Register your tools and handlers in `src/index.ts`.
## Configuration
The template uses a centralized configuration system in `src/config.ts`. Configuration can be provided through:
- Environment variables
- Command line arguments (with `--env KEY=VALUE`)
- Default values in the code
## Error Handling
The template includes comprehensive error handling:
- Service-level error handling with rate limiting support
- Tool-level error handling with proper error messages
- MCP protocol error handling
## License
MIT