MCP Toolkits
MCPToolset 连接到 MCP 兼容服务器并自动将所有可用工具加载到一个可管理单元中。这些工具可以直接与 Chat Generator、ToolInvoker 或Agent.
| 必需的初始化变量 | "server_info": 要连接的 MCP 服务器的信息 |
| API 参考 | mcp |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/mcp |
概述
MCPToolset 是Toolset 的一个子类,可动态发现和加载来自任何 MCP 兼容服务器的工具。
它支持
- Streamable HTTP 用于连接 HTTP 服务器
- SSE (Server-Sent Events) (已弃用)用于通过 HTTP 连接远程 MCP 服务器
- StdIO 用于通过子进程本地执行工具
MCPToolset 可以轻松地将外部工具插入管道(与 Chat Generators 和ToolInvoker)或代理中,并内置支持过滤(通过tool_names).
参数
要初始化 MCPToolset,请使用以下参数
server_info(必需):MCP 服务器的连接信息tool_names(可选):要添加到 Toolset 的工具名称列表
请注意,如果
tool_names未指定,将加载 MCP 服务器上的所有工具。如果有许多工具(20-30+),请谨慎操作,因为这可能会压倒 LLM 的工具解析逻辑。
安装
pip install mcp-haystack
用法
使用 StdIO 传输
from haystack_integrations.tools.mcp import MCPToolset, StdioServerInfo
server_info = StdioServerInfo(command="uvx", args=["mcp-server-time", "--local-timezone=Europe/Berlin"])
toolset = MCPToolset(server_info=server_info, tool_names=["get_current_time"]) # If tool_names is omitted, all tools on this MCP server will be loaded (can overwhelm LLM if too many)
使用 Streamable HTTP 传输
from haystack_integrations.tools.mcp import MCPToolset, StreamableHttpServerInfo
server_info = SSEServerInfo(url="https://:8000/mcp")
toolset = MCPToolset(server_info=server_info, tool_names=["get_current_time"])
使用 SSE 传输(已弃用)
from haystack_integrations.tools.mcp import MCPToolset, SSEServerInfo
server_info = SSEServerInfo(url="https://:8000/sse")
toolset = MCPToolset(server_info=server_info, tool_names=["get_current_time"])
在 Pipeline 中
from haystack import Pipeline
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.tools import ToolInvoker
from haystack.components.converters import OutputAdapter
from haystack.dataclasses import ChatMessage
from haystack_integrations.tools.mcp import MCPToolset, StdioServerInfo
server_info = StdioServerInfo(command="uvx", args=["mcp-server-time", "--local-timezone=Europe/Berlin"])
toolset = MCPToolset(server_info=server_info)
pipeline = Pipeline()
pipeline.add_component("llm", OpenAIChatGenerator(model="gpt-4o-mini", tools=toolset))
pipeline.add_component("tool_invoker", ToolInvoker(tools=toolset))
pipeline.add_component("adapter", OutputAdapter(
template="{{ initial_msg + initial_tool_messages + tool_messages }}",
output_type=list[ChatMessage],
unsafe=True,
))
pipeline.add_component("response_llm", OpenAIChatGenerator(model="gpt-4o-mini"))
pipeline.connect("llm.replies", "tool_invoker.messages")
pipeline.connect("llm.replies", "adapter.initial_tool_messages")
pipeline.connect("tool_invoker.tool_messages", "adapter.tool_messages")
pipeline.connect("adapter.output", "response_llm.messages")
user_input = ChatMessage.from_user(text="What is the time in New York?")
result = pipeline.run({
"llm": {"messages": [user_input]},
"adapter": {"initial_msg": [user_input]}
})
print(result["response_llm"]["replies"][0].text)
使用 Agent
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.agents import Agent
from haystack.dataclasses import ChatMessage
from haystack_integrations.tools.mcp import MCPToolset, StdioServerInfo
toolset = MCPToolset(
server_info=StdioServerInfo(command="uvx", args=["mcp-server-time", "--local-timezone=Europe/Berlin"]),
tool_names=["get_current_time"] # Omit to load all tools, but may overwhelm LLM if many
)
agent = Agent(chat_generator=OpenAIChatGenerator(), tools=toolset, exit_conditions=["text"])
agent.warm_up()
response = agent.run(messages=[ChatMessage.from_user("What is the time in New York?")])
print(response["messages"][-1].text)
更新于 大约 1 个月前
