MCP服务器
MCP服务器提供使用Bun设置自己的MCP服务器项目的功能。
- 背景 - 先决条件 - 安装项目 - 构建 - 设置克劳德桌面 - 用法 - 发展 - 新工具 - 测试覆盖率 - 先决条件(开发) - 运行测试覆盖率
背景
该项目利用模型上下文协议(MCP)来促进标准化工具(MCP服务器)在预定义的位置创建示例MCP项目。
在这个例子中,我们与Claude Desktop集成以运行MCP服务器,同时充当MCP客户端与MCP服务器交互。
生成的示例项目遵循与此项目相同的结构,并使用示例工具计算两个数值的总和。
选择使用Bun而不是NodeJS也是有意展示Bun在成为NodeJS的真正替代品方面取得了重大进展。它速度极快,易于设置,并具有许多开箱即用的功能。它还可以与现有的工具链(如ESLint等)很好地集成。
先决条件
安装项目
- 克隆存储库。
- 运行:
bun install- 创建一个
.env根目录下的文件基于/env/sample.env。根据需要和描述提供值。
注: 如果您希望通过以下方式在开发模式下运行服务器,这一点最为重要 bun run start.
- _(可选)_ 运行以下命令以验证项目的完整性:
bun run verify构建
- 运行:
bun run build这将捆绑条目 build/main.js,然后可以食用。
设置克劳德桌面
本节受此总则的影响 指南 详细说明此用例。
- 启动克劳德桌面并打开设置
- 点击
Developer在“设置”窗格的左侧栏中,然后单击Edit Config:
- 编辑文件
claude_desktop_config.json并添加以下内容:
{
"mcpServers": {
"create-mcp-app-bun": {
"command": "bun",
"args": ["run", "
/build/main.js"]
}
}
}将\ 替换为项目的路径;例如。: /Users/username/Documents/projects/create-mcp-server-app-bun
- 重新启动克劳德桌面;这很重要,否则Claude Desktop将不会将更改应用于
claude_desktop_config.json.
- 在主屏幕上,单击
Search and Tools按钮,然后显示您的MCP服务器名称:
确保它已启用。
用法
- 您可以简单地让Claude创建一个新的MCP项目:
create a new mcp project
作为回应,克劳德会要求你指定一个名字(例如。 my-test-mcp-server),然后创建项目。
- 该实现还将正确处理项目已经存在的情况,并提示用户指定后续操作。
发展
新工具
可以通过确保中的每个新工具模块来添加新工具 ./src/tools 扩展 AbstractTool 并实施 ITool 并提供显式构造函数(用于测试覆盖率):
...
export class NewTool extends AbstractTool implements ITool {
// Explicit constructor definition to ensure test coverage in Bun tracks constructor.
constructor(fetch: typeof globalThis.fetch = globalThis.fetch) {
super(fetch);
}
...此外,必须实施以下方法(参见其相应的 JSDoc 了解详情。):
getNamegetDescriptiongetInputSchemavalidateWithDefaultsprocessToolWorkflow
使用现有工具作为实施指南,不要忘记实施相应的测试。
无需进一步配置即可注册任何其他工具;它们在MCP服务器重新启动时自动包含在内。
测试覆盖率
使用以下方法分析测试覆盖率差距可能很有用 lcov 报告,以更好地了解所覆盖的线路和功能。
笔记:
- 类的构造函数应该在相应的类中定义,因为Bun只跟踪类函数(包括构造函数)。当你从一个具有自己构造函数的抽象类继承时,这是有问题的,而构造函数又不被跟踪。因此,只需在类中定义抽象构造函数并调用
super. - 有一些进口(例如。
import dedent from "dedent";)在模块顶部可能会导致Bun无法正确跟踪所覆盖的线路。只需将其移至其他导入项之后,它就会正确跟踪。
先决条件(开发)
- 安装
lcov:
brew install lcov- 安装VSCode扩展
ryanluker.vscode-coverage-gutters(已在中定义 settings.json).
运行测试覆盖率
- 在大多数情况下,运行以下命令就足够了:
bun run test:coverage注: 如果覆盖范围小于100,但不是 Uncovered Line #s 如果报告了,您可能需要按照以下步骤进行进一步调查并重新访问 备注 上面。
- 对于高级情况,请运行:
bun run test:coverage:lcov它产生了 lcov 覆盖率报告 VSCode扩展所使用的 ryanluker.vscode-coverage-gutters 在编辑器中可视化被覆盖的行。
- 如果您更喜欢HTML报告,请在终端中运行:
genhtml --function-coverage --branch-coverage --output-directory coverage-report coverage/lcov.info它生成一个HTML 覆盖率报告 您可以在首选浏览器中查看。
