这是一个用于创建具有HTTP传输的模型上下文协议(MCP)服务器的TypeScript生产就绪模板。此模板为构建可扩展、安全且易于维护的MCP服务器提供了坚实的基础。
# 克隆模板
git clone <your-repo-url>
cd mcp-template
# 使用生成器创建新项目
./create-mcp-project your-project-name --description "Your project description" --author "Your Name"
# 或直接使用Node.js脚本
node setup-new-project.js your-project-name --description "Your project description" --author "Your Name"
--description <desc>:项目描述--author <name>:作者名称--target-dir <dir>:目标目录(默认:mcp-<项目名称>)--install-deps:自动安装npm依赖--no-git:跳过git仓库初始化# 克隆模板
git clone <your-repo-url>
cd mcp-template
# 安装依赖
npm install
# 复制环境配置
cp .env.example .env # 创建此文件并添加您的设置
在根目录下创建一个.env文件:
# 服务器配置
PORT=3000
LOG_LEVEL=info
# 添加您的自定义环境变量
# 启动带有热重载的开发服务器
npm run dev
# 构建生产版本
npm run build
# 启动生产服务器
npm start
# 运行测试
npm test
# 检查和格式化代码
npm run lint
npm run lint:fix
mcp-template/
├── src/
│ ├── config/ # 配置管理
│ │ └── index.ts # 主配置文件
│ ├── utils/ # 工具函数
│ └── index.ts # 主服务器应用
├── create-mcp-project # 项目生成的Bash脚本
├── setup-new-project.js # Node.js项目生成器
├── Dockerfile # Docker配置
├── package.json # 依赖项和脚本
├── tsconfig.json # TypeScript配置
└── README.md # 此文件
此模板包括强大的项目生成工具,可以快速创建新的MCP服务器:
# 基本用法
./create-mcp-project weather-service
# 使用全部选项
./create-mcp-project task-manager \
--description "AI驱动的任务管理MCP服务器" \
--author "您的名字" \
--install-deps
# 自定义目标目录
./create-mcp-project file-processor --target-dir ./my-custom-server
# 跳过git初始化
./create-mcp-project data-analyzer --no-git
GET /health - 健康检查端点POST /mcp - 主MCP通信端点GET /mcp - 通过SSE从服务器到客户端的通知DELETE /mcp - 会话终止要在src/index.ts中的createServer()方法中添加一个新的MCP工具:
// 注册您的自定义工具
server.tool(
'your-tool-name',
'您的工具描述',
{
// 使用Zod定义输入模式
parameter1: z.string().describe('参数描述'),
parameter2: z.number().optional().describe('可选参数'),
},
async ({ parameter1, parameter2 }) => {
try {
// 您的工具实现
const result = await yourCustomLogic(parameter1, parameter2);
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
} as TextContent,
],
};
} catch (error) {
const errorMessage =
error instanceof Error ? error.message : String(error);
throw new Error(`您的工具名称错误:${errorMessage}`);
}
}
);
在src/config/index.ts中添加新的配置选项:
interface Config {
logging: LoggingConfig;
server: ServerConfig;
// 添加您的自定义配置部分
database: {
url: string;
timeout: number;
};
external: {
apiKey: string;
baseUrl: string;
};
}
const config: Config = {
// ... 现有配置
database: {
url: process.env.DATABASE_URL || 'sqlite://memory',
timeout: parseInt(process.env.DB_TIMEOUT || '5000', 10),
},
external: {
apiKey: process.env.EXTERNAL_API_KEY || '',
baseUrl: process.env.EXTERNAL_BASE_URL || 'https://api.example.com',
},
};
在run()方法中添加Express中间件:
async run() {
const app = express();
app.use(express.json());
// 添加您的自定义中间件
app.use(cors()); // CORS支持
app.use(helmet()); // 安全头
app.use(morgan('combined')); // 请求日志
// ... 设置的其余部分
}
# 构建Docker镜像
docker build -t mcp-server .
# 运行容器
docker run -p 3000:3000 --env-file .env mcp-server
创建一个docker-compose.yml:
version: '3.8'
services:
mcp-server:
build: .
ports:
- '3000:3000'
environment:
- NODE_ENV=production
- PORT=3000
- LOG_LEVEL=info
restart: unless-stopped
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
interval: 30s
timeout: 10s
retries: 3
运行:
docker-compose up -d
此模板实现了多项安全措施:
// 添加安全中间件
import helmet from 'helmet';
import cors from 'cors';
import rateLimit from 'express-rate-limit';
app.use(helmet());
app.use(
cors({
origin: process.env.ALLOWED_ORIGINS?.split(',') || false,
})
);
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15分钟
max: 100, // 每个IP每windowMs限制100次请求
});
app.use('/mcp', limiter);
模板包括基本的日志设置。对于生产环境,考虑添加:
# 运行所有测试
npm test
# 在监视模式下运行测试
npm run test:watch
# 运行带覆盖率的测试
npm run test:coverage
在src/**/*.test.ts中创建测试文件:
import { describe, test, expect } from '@jest/globals';
// 您的测试导入
describe('您的组件', () => {
test('应处理有效输入', async () => {
// 测试实现
});
});
NODE_ENV=production
PORT=3000
LOG_LEVEL=warn
# 添加特定于生产的变量
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
API_KEYS=...
本项目采用MIT许可证 - 查看LICENSE文件了解详情。
对于问题和支持:
祝编码愉快!🎉