一个模型上下文协议 (MCP) 服务器,它将Wasm组件作为工具公开。
这目前是一个早期阶段的非生产原型。
(认证和可观测性将在路线图中实现)
前提条件:当前的rust工具链
如果你还没有克隆,请克隆toolbelt项目。
然后在toolbelt目录下执行:
cargo install --path .
这将使用release配置构建二进制文件,并将其添加到你的cargo bin目录中,该目录应该已经在你的PATH中了。
提供一个或多个.wasm文件的路径作为命令行参数:
toolbelt hello.wasm calculator.wasm
或者你可以指定已发布的Wasm组件的OCI URI,例如这些:
toolbelt oci://ghcr.io/modulewise/demo/hello:0.1.0 \
oci://ghcr.io/modulewise/demo/calculator:0.1.0
[!TIP]
如果你想本地构建Wasm组件,请克隆 modulewise/demos项目并按照 components/README.md中的构建说明进行操作。
默认情况下,组件以最小权限能力模式运行。
如果您的组件需要主机运行时的功能,您可以在.toml文件中指定这些功能。enables属性表示它们可用的作用域:
[wasip2]
uri = "wasmtime:wasip2"
enables = "any"
[http]
uri = "wasmtime:http"
enables = "any"
然后定义“暴露”的工具组件,该组件“期望”这些功能:
[flights]
uri = "file:///path/to/flight-search.wasm"
expects = ["wasip2", "http"]
exposed = true
将定义文件传递给服务器而不是直接传递.wasm文件:
toolbelt flights.toml
Wasm组件也可以定义为启用其他组件,它们可能有自己的依赖项。 请注意,这次运行时功能不是直接对暴露的“工具”组件可用,而是仅对启用暴露组件的内部组件可用:
runtime-features.toml
[wasip
uri = "wasmtime:wasip2"
enables = "unexposed"
[inherit-network]
uri = "wasmtime:inherit-network"
enables = "unexposed"
这些运行时功能随后由一个启用组件预期:
keyvalue.toml
[keyvalue]
uri = "../demos/components/lib/valkey-client.wasm"
expects = ["wasip2", "inherit-network"]
enables = "exposed"
最后,该组件可以组合成暴露的“工具”组件。 在这种情况下,暴露的组件也将与配置组合:
incrementor.toml
[incrementor]
uri = "../demos/components/lib/incrementor.wasm"
expects = ["keyvalue"]
exposed = true
[incrementor.config]
bucket = "increments"
现在可以将这些文件全部传递给服务器:
toolbelt runtime-features.toml keyvalue.toml incrementor.toml
这允许各种运行时功能、启用组件以及将作为工具暴露的组件的不同组合。它还促进了支持基础设施和暴露功能之间的责任驱动的关注分离。
按照上述说明运行服务器。
确保选择了Streamable HTTP传输类型。
确保指定的URL是http://127.0.0.1:3001/mcp(如果不是使用默认值,请替换主机或端口)。
点击Connect,然后点击List Tools。
选择一个工具,提供参数值,然后点击Run Tool。
版权所有 (c) 2025 Modulewise Inc 和 Modulewise Toolbelt 贡献者。
Apache 许可证 v2.0:详情见LICENSE。