chore: upgrade Pipecat to 1.13.0 and adapt MCP 2.x

This commit is contained in:
Xin Wang
2026-10-23 14:03:42 +08:00
parent 81a6fdc30c
commit d45be1e686
4 changed files with 95 additions and 15 deletions
+12 -10
View File
@@ -10,13 +10,13 @@ from __future__ import annotations
import hashlib
import json
from contextlib import asynccontextmanager
from datetime import timedelta
from typing import Any, AsyncIterator
import httpx
import httpx2 as httpx
from mcp import ClientSession
from mcp.client.sse import sse_client
from mcp.client.streamable_http import streamable_http_client
from mcp.types import PaginatedRequestParams
from models import RuntimeMcpServer
@@ -59,7 +59,7 @@ class McpToolClient:
server.url,
http_client=http_client,
) as streams:
read_stream, write_stream, _ = streams
read_stream, write_stream = streams
yield read_stream, write_stream
return
@@ -88,7 +88,7 @@ class McpToolClient:
async with ClientSession(
read_stream,
write_stream,
read_timeout_seconds=timedelta(seconds=timeout),
read_timeout_seconds=timeout,
) as session:
await session.initialize()
yield session
@@ -105,9 +105,11 @@ class McpToolClient:
async with self._session(server) as session:
cursor: str | None = None
while True:
result = await session.list_tools(cursor=cursor)
result = await session.list_tools(
params=PaginatedRequestParams(cursor=cursor) if cursor else None,
)
for tool in result.tools:
input_schema = dict(tool.inputSchema or {})
input_schema = dict(tool.input_schema or {})
discovered.append(
{
"name": tool.name,
@@ -116,7 +118,7 @@ class McpToolClient:
"schema_hash": schema_hash(input_schema),
}
)
cursor = result.nextCursor
cursor = result.next_cursor
if not cursor:
break
return discovered
@@ -132,14 +134,14 @@ class McpToolClient:
result = await session.call_tool(
remote_tool_name,
arguments=arguments,
read_timeout_seconds=timedelta(seconds=server.timeout_seconds),
read_timeout_seconds=server.timeout_seconds,
)
data = self._normalize_result(result)
encoded = json.dumps(data, ensure_ascii=False, default=str).encode("utf-8")
if len(encoded) > MAX_MCP_RESULT_BYTES:
raise McpClientError("MCP 工具响应超过 1 MB 限制")
if bool(result.isError):
if bool(result.is_error):
message = data.get("text") or "MCP 工具返回执行错误"
raise McpClientError(str(message)[:2048])
return data
@@ -171,6 +173,6 @@ class McpToolClient:
return {
"text": "\n".join(text_parts),
"structuredContent": result.structuredContent,
"structuredContent": result.structured_content,
"content": content,
}