此扩展为SillyTavern增加了基于WebSocket的工具执行支持,允许通过标准化接口注册和执行外部工具。
请参阅INSTRUCTIONS.md,了解通过SillyTavern的Web界面进行安装的分步说明。
将此仓库克隆到你的SillyTavern插件目录中:
cd /path/to/SillyTavern/plugins
git clone https://github.com/CG-Labs/SillyTavern-MCP-Extension.git mcp-extension
安装依赖项:
cd mcp-extension
npm install
重启SillyTavern
该扩展可以通过SillyTavern UI下的“设置”>“扩展”>“MCP扩展”进行配置。
要注册一个工具,请发送具有以下格式的WebSocket消息:
{
"type": "register_tool",
"data": {
"name": "example_tool",
"schema": {
"type": "object",
"properties": {
"param1": {
"type": "string",
"description": "第一个参数"
},
"param2": {
"type": "number",
"description": "第二个参数"
}
},
"required": ["param1"]
}
}
}
要执行已注册的工具,请发送具有以下格式的WebSocket消息:
{
"type": "execute_tool",
"data": {
"executionId": "unique_execution_id",
"name": "example_tool",
"args": {
"param1": "value1",
"param2": 42
}
}
}
扩展程序向所有连接的客户端广播执行状态更新:
{
"type": "tool_execution_started",
"data": {
"executionId": "unique_execution_id",
"name": "example_tool",
"args": {
"param1": "value1",
"param2": 42
}
}
}
{
"type": "tool_execution_completed",
"data": {
"executionId": "unique_execution_id",
"result": {
// 工具特定的结果数据
}
}
}
{
"type": "tool_execution_failed",
"data": {
"executionId": "unique_execution_id",
"error": {
"code": "ERROR_CODE",
"message": "错误消息"
}
}
}
INVALID_NAME:无效的工具名称INVALID_SCHEMA:无效的工具模式INVALID_URI:无效的资源URIINVALID_HANDLER:无效的处理程序实现INVALID_ARGUMENTS:无效的工具参数TOOL_EXISTS:工具已注册TOOL_NOT_FOUND:未找到工具TOOL_EXECUTION_FAILED:工具执行失败SERVER_ERROR:内部服务器错误mcp-extension/
├── index.js # 主插件入口点
├── manifest.json # 插件清单
├── package.json # 依赖项和脚本
├── public/ # 公共资产
│ ├── script.js # 客户端JavaScript
│ ├── style.css # 客户端样式
│ └── templates/ # HTML模板
├── utils/ # 工具模块
│ ├── errors.js # 错误处理
│ ├── logger.js # 日志工具
│ └── validation.js # 输入验证
└── README.md # 此文档
要添加新工具:
示例工具实现:
const ws = new WebSocket('ws://localhost:5005');
ws.onopen = () => {
// 注册工具
ws.send(JSON.stringify({
type: 'register_tool',
data: {
name: 'example_tool',
schema: {
type: 'object',
properties: {
input: {
type: 'string'
}
},
required: ['input']
}
}
}));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === 'execute_tool' &&
message.data.name === 'example_tool') {
// 处理执行
const result = doSomething(message.data.args.input);
// 发送结果
ws.send(JSON.stringify({
type: 'tool_execution_completed',
data: {
executionId: message.data.executionId,
result
}
}));
}
};
如果您遇到任何问题或有疑问:
MIT许可证 - 详情见LICENSE文件