使用说明
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", "<path_to_project>/build/main.js"] } } }将<path_to_project>替换为项目的路径;例如。:
/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 覆盖率报告 您可以在首选浏览器中查看。
