使用说明
MCP服务器(模型控制协议)
用于实现模型控制协议(MCP)的通用模块化服务器。该服务器提供了一个框架,用于通过标准化的API控制各种模型并与之交互。
特性
- 模块化架构,易于扩展
- 动态模块加载
- 核心模型管理功能
- 用于模型控制的标准化API
- 简单的配置系统
- 日志记录实用程序
- 增强的模块结构,适当分离关注点
- Package.json支持依赖管理模块
- Mocha和Chai的全面测试基础设施
- 强大的模块搜索功能
- API响应中的模块元数据显示
入门指南
先决条件
- Node.js 18.x或更高版本
- pnpm 10.x或更高
安装
# Clone the repository
git clone https://github.com/yourusername/mcp-server.git
cd mcp-server
# Install dependencies
pnpm install
运行服务器
# Install dependencies
pnpm install
# Start the server
pnpm start
# Start the server in development mode (with auto-reload)
pnpm dev
服务器将于启动http://localhost:3000默认情况下。
测试服务器
该存储库包括使用Mocha和Chai的全面测试:
# Run all tests
pnpm test
# Run only module tests
pnpm test:modules
# Run all tests (both core and modules)
pnpm test:all
测试基础设施包括:
- 核心服务器测试模块加载、路由和其他核心功能
- 针对每个模块功能的模块特定测试
- 支持测试中的ES模块
- 用Sinon嘲笑和抨击公用事业
测试以结构化的方式组织:
- 核心测试
/test/core/ - 每个模块的模块测试
test/目录
这种全面的测试确保了代码质量,并使在进行更改时更容易检测到回归。
预提交钩子
存储库包括使用Husky和lint-stage的预提交钩子:
# The hooks are automatically installed when you run
pnpm install
预提交挂钩:
- 在JavaScript文件上运行ESLint
- 对所有暂存文件运行Prettier
这确保了提交到存储库的所有代码都遵循编码标准并保持代码质量。测试套件正在不断改进,以提供更好的覆盖率和可靠性,一旦它变得更加稳定,将在预提交挂钩中启用。
Docker支持
该存储库包括Docker支持,便于容器化和部署:
# Build and run with Docker
docker build -t mcp-server .
docker run -p 3000:3000 mcp-server
# Or use Docker Compose
docker-compose up
Docker配置:
- 使用Node.js 20 Alpine作为基础映像
- 暴露端口3000
- 将模块目录装载为卷,以便于模块管理
- 包括健康检查
标准MCP方法
MCP服务器实现了所有MCP服务器应提供的一组标准化方法:
服务器信息
GET /-服务器基本信息GET /status-详细的服务器状态GET /health-健康检查端点GET /metrics-服务器指标
模型管理
GET /models-列出可用型号GET /model/:modelId-获取型号信息POST /model/:modelId/activate-激活特定模型POST /model/deactivate-停用当前模型GET /model/active-获取有关活动模型的信息
推断
POST /model/infer-使用活动模型进行推理POST /model/:modelId/infer-使用特定模型进行推理
模块管理
GET /modules-列出已安装的模块GET /modules/:moduleId-获取模块信息GET /modules/search/:query-按package.json或元数据中的任何字段搜索模块
工具与资源
GET /tools-列出可用工具GET /resources-列出可用资源
有关这些方法的详细信息,请参阅 MCP标准方法.
配置
配置存储在 src/core/config.js。您可以修改此文件以更改服务器设置。
例子
该存储库包括几个示例来帮助您入门:
- 客户端示例:
examples/client.js演示如何从客户端应用程序与MCP服务器交互。 - 自定义模块示例:
examples/custom-module/显示了如何创建将计算器工具添加到服务器的自定义模块。
要运行客户端示例:
node examples/client.js
要使用自定义模块示例,请将其复制到modules目录:
cp -r examples/custom-module src/modules/calculator
创建模块
模块是扩展MCP服务器的主要方式。每个模块都是一个自包含的包,可以为服务器添加新功能。
模块结构
模块现在遵循增强的结构,具有更好的组织:
src/modules/your-module/
├── assets/ # Static assets (images, CSS, etc.)
├── docs/ # Documentation files
├── examples/ # Example usage
├── src/ # Source code
│ ├── controller.js # HTTP route handlers
│ ├── service.js # Business logic
│ └── utils.js # Utility functions
├── test/ # Test files
│ ├── controller.test.js
│ └── service.test.js
├── index.js # Main module file with register function
├── package.json # Module metadata, dependencies, and scripts
└── README.md # Module documentation
每个模块应包括 package.json 文件包含:
- 名称、版本、描述
- 作者和许可证信息
- 依赖关系和开发依赖关系
- 脚本(特别是用于测试的脚本)
- 关键字和其他元数据
这种结构提供了更好的关注点分离,使测试更容易,并提高了模块的可发现性。
模块实施
主模块文件(index.js)必须导出a register 加载模块时将调用的函数:
/**
* Register this module with the Hono app
* @param {import('hono').Hono} app - The Hono app instance
*/
export async function register(app) {
// Register routes, middleware, etc.
app.get('/your-module/endpoint', c => {
return c.json({ message: 'Your module is working!' });
});
}
// Optional: Export module metadata
export const metadata = {
name: 'Your Module',
version: '1.0.0',
description: 'Description of your module',
author: 'Your Name',
};
示例模块
- 提供了一个简单的示例模块
src/modules/example/演示如何创建模块。 - 中提供了一个更复杂的计算器工具示例
examples/custom-module/. - 健康检查模块提供在
src/modules/health-check/用于系统监控。 - 创建新模块的模板可在
src/modules/template/.
创建新模块
您可以使用提供的脚本创建新模块:
# Create a new module
pnpm create-module
# Or with a module name
pnpm create-module my-module
脚本将:
- 在中创建新的模块目录
src/modules/ - 复制模板文件
- 用模块信息替换占位符
- 提供实现模块的后续步骤
模块搜索
MCP服务器包括一个强大的搜索功能,允许您根据package.json或元数据中的任何信息查找模块。
搜索端点
GET /modules/search/:query-在任何字段中搜索包含指定查询字符串的模块
搜索示例
# Find modules by name or description
curl http://localhost:3000/modules/search/craigslist
# Find modules by dependency
curl http://localhost:3000/modules/search/jsdom
# Find modules by keyword
curl http://localhost:3000/modules/search/mcp
# Find modules by author
curl http://localhost:3000/modules/search/"MCP Server Team"
# Find modules by license
curl http://localhost:3000/modules/search/ISC
JavaScript示例
// Function to search modules by any field
async function searchModules(query) {
const response = await fetch(`http://localhost:3000/modules/search/${query}`);
const data = await response.json();
console.log(`Found ${data.count} modules matching "${query}":`);
data.results.forEach(module => {
console.log(`- ${module.name} (${module.directoryName}): ${module.description}`);
});
return data.results;
}
搜索是全面的,可以在任何字段中找到匹配项,包括嵌套对象,如依赖关系、关键字和其他元数据。
文档
许可证
国际协调委员会
