MCPToolset

MCPToolset

MCPToolset은 MCP 호환 서버에 연결해 사용 가능한 모든 도구를 자동으로 하나의 관리 가능한 단위로 로드해요. 이 도구들은 Chat Generator나 Agent 같은 컴포넌트에서 바로 사용할 수 있어요.

출처: MCPToolset

본문

개요

MCPToolset은 Toolset의 하위 클래스로, MCP 호환 서버에서 도구를 동적으로 발견하고 로드해요.

지원하는 것:

  • HTTP 서버 연결용 Streamable HTTP
  • HTTP를 통한 원격 MCP 서버용 SSE(Server-Sent Events) (deprecated)
  • 서브프로세스를 통한 로컬 도구 실행용 StdIO

MCPToolset은 파이프라인이나 에이전트에 외부 도구를 쉽게 끼워 넣게 해주며, 필터링(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 = StreamableHttpServerInfo(url="http://localhost:8000/mcp")
toolset = MCPToolset(server_info=server_info, tool_names=["get_current_time"])

SSE 전송으로 (deprecated)

from haystack_integrations.tools.mcp import MCPToolset, SSEServerInfo

server_info = SSEServerInfo(url="http://localhost:8000/sse")
toolset = MCPToolset(server_info=server_info, tool_names=["get_current_time"])

파이프라인 안에서

from haystack import Pipeline
from haystack.components.agents import Agent
from haystack.components.generators.chat import OpenAIChatGenerator
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(
    "agent",
    Agent(
        chat_generator=OpenAIChatGenerator(model="gpt-4o-mini"),
        tools=toolset,
    ),
)

user_input = ChatMessage.from_user(text="What is the time in New York?")
result = pipeline.run({"agent": {"messages": [user_input]}})

print(result["agent"]["last_message"].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"],
)

response = agent.run(messages=[ChatMessage.from_user("What is the time in New York?")])
print(response["messages"][-1].text)

더 알아보기 (Learn more)