内容
# 催化剂插件:MCP
通用的、与应用程序无关的模型上下文协议(修订版 2025-06-18)服务器插件,适用于催化剂,基于 `Catalyst::Plugin::JSONRPC::Server` 构建。它拥有 MCP 生命周期、功能宣传和动词路由,但不了解您的领域 — 您需要提供服务提供者。
## 概要
```perl
package MyApp;
use Catalyst qw/
+Catalyst::Plugin::JSONRPC::Server
+Catalyst::Plugin::MCP
/;
__PACKAGE__->setup;
# 在控制器操作中:
sub mcp :Path('/mcp') :Args(0) {
my ( $self, $c ) = @_;
$c->mcp_register_provider( $c->model('MCP::Tools') ); # 工具提供者
$c->mcp_register_provider( $c->model('MCP::Resources') ); # 资源提供者
$c->mcp_dispatch; # 读取请求体,运行 MCP 生命周期,写入响应
}
```
## 服务提供者
为每个服务提供者对象实现一个已提供的 Moo::Roles:
- `Catalyst::Plugin::MCP::Role::ResourceProvider` — `list($cursor)`,`templates`,`read($uri)`。
- `Catalyst::Plugin::MCP::Role::PromptProvider` — `list($cursor)`,`get($name, $args)`。
- `Catalyst::Plugin::MCP::Role::ToolProvider` — `list($cursor)`,`call($name, $args)`。
在 `initialize` 中宣传的功能由已注册的服务提供者所使用的角色派生而来。分页是直通的:光标流向 `list($cursor)`,而 `nextCursor` 流回。工具执行失败返回一个正常的结果,带有 `isError => 1`;未知工具/提示/资源和错误参数成为 JSON-RPC 错误(`-32602`,`-32002`)。
## 配置
```perl
__PACKAGE__->config(
'Catalyst::Plugin::MCP' => {
protocol_versions => ['2025-06-18'], # 最新优先
server_info => { name => 'myapp', version => '1.0' },
},
);
```