TypeScript中MCP服务器的实现
这是模型上下文协议(MCP)服务器的TypeScript实现。服务器提供了一组用于与数据库交互和执行网络搜索的工具。
特性
- MCP协议实现
- SQLite数据库集成
- 网络搜索功能
- RESTful API端点
- 带有Swagger UI的交互式API文档
- CORS支持
- 会话管理
- 用于实时更新的服务器发送事件(SSE)
先决条件
- Node.js(v14或更高版本)
- npm(v6或更高版本)
安装
- 克隆存储库:
git clone https://github.com/yourusername/mcp-typescript-workshop.git
cd mcp-typescript-workshop- 安装依赖项:
npm install- 构建项目:
npm run build运行服务器
发展模式
npm run dev生产模式
npm start默认情况下,服务器将在端口3000上启动。您可以访问:
- API文件:http://localhost:3000/api-docs
- MCP端点:http://localhost:3000/mcp
测试服务器
您可以使用curl命令测试服务器。以下是测试所有功能的完整序列:
- 初始化新会话:
curl -v -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}'这将返回后续请求所需的会话ID。
- 列出可用工具:
curl -v -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: YOUR_SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"list_tools","params":{},"id":2}'- 让所有员工:
curl -v -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: YOUR_SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"call_tool","params":{"name":"get_employees","arguments":{}},"id":3}'- 按部门搜索员工:
curl -v -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: YOUR_SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"call_tool","params":{"name":"search_employees","arguments":{"department":"Engineering"}},"id":4}'- 执行网络搜索:
curl -v -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: YOUR_SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"call_tool","params":{"name":"web_search","arguments":{"query":"Model Context Protocol"}},"id":5}'- 终止会话:
curl -v -X DELETE http://localhost:3000/mcp \
-H "mcp-session-id: YOUR_SESSION_ID"注:更换 YOUR_SESSION_ID 其中会话ID是从初始化请求中接收到的。
预期响应
- 初始化响应:
{
"jsonrpc": "2.0",
"result": {
"sessionId": "e6c389d7-e90a-4d09-a916-47bc5edd365e",
"serverInfo": {
"name": "workshop-typescript-server",
"version": "1.0.0"
}
},
"id": 1
}- 让员工回应:
{
"jsonrpc": "2.0",
"result": {
"content": [{
"type": "text",
"text": "Employees:\nID: 1, Name: Alice Johnson, Department: Engineering, Salary: $85000\nID: 2, Name: Bob Smith, Department: Marketing, Salary: $62000\nID: 3, Name: Carol Davis, Department: Engineering, Salary: $92000\nID: 4, Name: David Wilson, Department: Sales, Salary: $58000\n"
}]
},
"id": 3
}API文档
API文档可在 http://localhost:3000/api-docs 当服务器正在运行时。文件包括:
- 所有可用端点
- 请求/响应模式
- 交互式测试界面
- 请求和响应示例
可用端点
POST/mcp
MCP通信的主要端点。手柄:
- 会话初始化
- 工具列表
- 工具执行
GET/mcp
用于实时更新的服务器发送事件(SSE)端点。
删除/mcp
用于终止MCP会话的终结点。
可用工具
- get_员工
- 描述:从数据库中获取所有员工 - 无需输入参数
- 网络搜索
- 说明:在网上搜索信息 - 输入参数: - query(字符串):搜索查询
- 搜索_员工
- 描述:按部门或姓名搜索员工 - 输入参数: - department(字符串,可选):要搜索的部门 - name(字符串,可选):要搜索的名称
会话管理
服务器使用会话ID来维护请求之间的状态。会话ID为:
- 初始化过程中生成
- 必填项
mcp-session-id后续请求的标头 - 会话终止时自动清理
错误处理
服务器以以下格式提供详细的错误响应:
{
"jsonrpc": "2.0",
"error": {
"code": -32000,
"message": "Error description"
},
"id": null
}发展
项目结构
src/
├── server.ts # Main server implementation
├── swagger.ts # API documentation configuration
└── types/ # TypeScript type definitions建筑
npm run build测试
npm test许可证
此项目根据ISC许可证获得许可-有关详细信息,请参阅许可证文件。
贡献
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
