一个通用的、模块化的服务器,用于实现模型控制协议(MCP)。该服务器提供了一个框架,通过标准化的API来控制和与各种模型进行交互。
# 克隆仓库
git clone https://github.com/yourusername/mcp-server.git
cd mcp-server
# 安装依赖
pnpm install
# 安装依赖
pnpm install
# 启动服务器
pnpm start
# 在开发模式下启动服务器(自动重载)
pnpm dev
默认情况下,服务器将在http://localhost:3000上运行。
仓库包括使用Mocha和Chai的全面测试:
# 运行所有测试
pnpm test
# 只运行模块测试
pnpm test:modules
# 运行所有测试(核心和模块)
pnpm test:all
测试基础设施包括:
测试组织如下:
/test/core/test/目录中这种全面的测试确保了代码质量,并且在进行更改时更容易检测到退化。
仓库包含使用Husky和lint-staged的提交前钩子:
# 当您运行以下命令时,钩子会自动安装
pnpm install
提交前钩子:
这确保了提交到仓库的所有代码都遵循编码标准并保持代码质量。测试套件正在不断改进以提供更好的覆盖范围和可靠性,并将在更稳定后启用预提交钩子。
仓库包含Docker支持,便于容器化和部署:
# 使用Docker构建和运行
docker build -t mcp-server .
docker run -p 3000:3000 mcp-server
# 或使用Docker Compose
docker-compose up
Docker配置:
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
要使用自定义模块示例,将其复制到模块目录:
cp -r examples/custom-module src/modules/calculator
模块是扩展MCP服务器的主要方式。每个模块都是一个独立的包,可以向服务器添加新功能。
模块现在遵循一种增强的结构,具有更好的组织:
src/modules/your-module/
├── assets/ # 静态资产(图像、CSS等)
├── docs/ # 文档文件
├── examples/ # 示例用法
├── src/ # 源代码
│ ├── controller.js # HTTP路由处理器
│ ├── service.js # 业务逻辑
│ └── utils.js # 实用函数
├── test/ # 测试文件
│ ├── controller.test.js
│ └── service.test.js
├── index.js # 主模块文件,包含注册函数
├── package.json # 模块元数据、依赖项和脚本
└── README.md # 模块文档
每个模块应包含一个package.json文件,其中包含:
这种结构提供了更好的关注点分离,使测试更容易,并提高了模块的可发现性。
主模块文件(index.js)必须导出一个register函数,当加载模块时将调用该函数:
/**
* 将此模块注册到Hono应用
* @param {import('hono').Hono} app - Hono应用实例
*/
export async function register(app) {
// 注册路由、中间件等
app.get('/your-module/endpoint', c => {
return c.json({ message: '您的模块正在工作!' });
});
}
// 可选:导出模块元数据
export const metadata = {
name: '您的模块',
version: '1.0.0',
description: '您的模块描述',
author: '您的名字',
};
src/modules/example/中提供了一个简单的示例模块,以展示如何创建模块。examples/custom-module/中提供了一个带有计算器工具的更复杂的示例。src/modules/health-check/中提供了一个健康检查模块,用于系统监控。src/modules/template/中提供了一个创建新模块的模板。您可以使用提供的脚本创建新模块:
# 创建新模块
pnpm create-module
# 或指定模块名称
pnpm create-module my-module
该脚本将:
src/modules/中创建一个新的模块目录MCP服务器包含强大的搜索功能,允许您根据其package.json或元数据中的任何信息查找模块。
GET /modules/search/:query - 搜索包含指定查询字符串的任何字段的模块# 按名称或描述查找模块
curl http://localhost:3000/modules/search/craigslist
# 按依赖项查找模块
curl http://localhost:3000/modules/search/jsdom
# 按关键词查找模块
curl http://localhost:3000/modules/search/mcp
# 按作者查找模块
curl http://localhost:3000/modules/search/"MCP Server Team"
# 按许可证查找模块
curl http://localhost:3000/modules/search/ISC
// 函数按任何字段搜索模块
async function searchModules(query) {
const response = await fetch(`http://localhost:3000/modules/search/${query}`);
const data = await response.json();
console.log(`找到${data.count}个匹配"${query}"的模块:`);
data.results.forEach(module => {
console.log(`- ${module.name} (${module.directoryName}):${module.description}`);
});
return data.results;
}
搜索是全面的,会在任何字段中找到匹配项,包括依赖项、关键词和其他元数据等嵌套对象。
ISC