Spaces:
Running
Running
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; | |
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js"; | |
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; | |
import { version as packageVersion } from "../package.json"; | |
import { URL } from "url"; | |
import type { McpServerParams } from "./schemas"; | |
import { McpResultFormatter } from "./lib/McpResultFormatter"; | |
export async function connectMcpServer(mcpServer: McpServerParams): Promise<Client> { | |
const mcp = new Client({ name: "@huggingface/responses.js", version: packageVersion }); | |
// Try to connect with http first, if that fails, try sse | |
const url = new URL(mcpServer.server_url); | |
const options = { | |
requestInit: mcpServer.headers | |
? { | |
headers: mcpServer.headers, | |
} | |
: undefined, | |
}; | |
try { | |
const transport = new StreamableHTTPClientTransport(url, options); | |
await mcp.connect(transport); | |
} catch { | |
const transport = new SSEClientTransport(url, options); | |
await mcp.connect(transport); | |
} | |
console.log("Connected to MCP server", mcpServer.server_url); | |
return mcp; | |
} | |
export async function callMcpTool( | |
mcpServer: McpServerParams, | |
toolName: string, | |
argumentsString: string | |
): Promise<{ error: string; output?: undefined } | { error?: undefined; output: string }> { | |
try { | |
const client = await connectMcpServer(mcpServer); | |
const toolArgs: Record<string, unknown> = argumentsString === "" ? {} : JSON.parse(argumentsString); | |
console.log(`Calling MCP tool '${toolName}'`); | |
const toolResponse = await client.callTool({ name: toolName, arguments: toolArgs }); | |
const formattedResult = McpResultFormatter.format(toolResponse); | |
return { | |
output: formattedResult, | |
}; | |
} catch (error) { | |
const errorMessage = | |
error instanceof Error ? error.message : typeof error === "string" ? error : JSON.stringify(error); | |
return { | |
error: errorMessage, | |
}; | |
} | |
} | |