文本生成工具扩展

该扩展通过模型上下文协议(MCP)使文本生成webui模型能够使用外部工具。

  • by brucepro
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 brucepro/mcp_client_extension

使用说明

文本生成webui的MCP支持扩展

此扩展允许文本生成webui模型通过模型上下文协议(MCP)使用外部工具。

安装

  1. 安装MCP Python SDK:
pip install mcp
  1. 将此扩展复制到文本生成webui扩展目录:
cp -r mcp_support /path/to/text-generation-webui/extensions/
  1. 在中配置MCP服务器 servers.json

  2. 启动文本生成webui时启用扩展:

python server.py --extensions mcp_support

配置

编辑 extensions/mcp_support/servers.json 要配置MCP服务器,请执行以下操作:

{
  "servers": {
    "website-fetcher": {
      "command": "python",
      "args": ["extensions/mcp_support/example_server.py", "--transport", "stdio"],
      "env": {},
      "enabled": true
    }
  }
}

配置选项

  • command:要运行的可执行文件(例如,“python”、“node”、“uv”)
  • args:服务器的命令行参数
  • env:要传递给服务器的环境变量(可选)
  • enabled:是否在扩展加载时启动此服务器

测试示例服务器

该扩展包括一个获取网站的简单示例服务器。

  1. 在中启用它 servers.json:
{
  "servers": {
    "website-fetcher": {
      "command": "python",
      "args": ["extensions/mcp_support/example_server.py", "--transport", "stdio"],
      "env": {},
      "enabled": true
    }
  }
}
  1. 在启用扩展的情况下启动文本生成webui

  2. 检查日志以了解:

[MCP] Starting server 'website-fetcher'...
[MCP] Server 'website-fetcher' started successfully with 1 tools: fetch
  1. 使用具有工具调用功能的模型,并要求它获取网站:
Please fetch the content from https://example.com

创建自己的MCP服务器

要创建自己的MCP服务器,请使用示例服务器作为模板:

from typing import Any
import anyio
import mcp.types as types
from mcp.server.lowlevel import Server
from mcp.server.stdio import stdio_server

app = Server("my-server-name")

@app.call_tool()
async def my_tool(name: str, arguments: dict[str, Any]) -> list[types.ContentBlock]:
    if name == "my_tool_name":
        result = do_something(arguments)
        return [types.TextContent(type="text", text=result)]
    raise ValueError(f"Unknown tool: {name}")

@app.list_tools()
async def list_tools() -> list[types.Tool]:
    return [
        types.Tool(
            name="my_tool_name",
            description="Description of what the tool does",
            inputSchema={
                "type": "object",
                "required": ["param1"],
                "properties": {
                    "param1": {
                        "type": "string",
                        "description": "Parameter description",
                    }
                },
            },
        )
    ]

async def main():
    async with stdio_server() as streams:
        await app.run(streams[0], streams[1], app.create_initialization_options())

anyio.run(main)

建筑

┌─────────────────────────┐
│ text-generation-webui   │
│  + mcp_support extension│
└────────┬────────────────┘
         │ stdio
         │ (stdin/stdout)
┌────────▼────────────────┐
│   MCP Server Process    │
│  (Python/Node/etc)      │
│                         │
│  - list_tools()         │
│  - call_tool()          │
└─────────────────────────┘

调试

在扩展UI中启用调试日志记录或在代码中设置它:

params["debug_logging"] = True

调试日志将显示:

  • 服务器启动和连接状态
  • 工具发现和注册
  • 工具调用检测和执行
  • 原始MCP协议消息

故障排除

“未安装MCP包”

运行: pip install mcp

“启动服务器失败”

  • 检查服务器命令和参数是否正确
  • 验证服务器脚本是否存在以及是否可执行
  • 检查日志中的特定错误消息
  • 启用调试日志记录以获取更多详细信息

“找不到工具”

  • 验证服务器是否已成功启动
  • 检查工具是否已注册(在日志中查找“已注册工具”)
  • 确保服务器的 list_tools() 正在返回预期的工具

参考文献

许可证

MIT。