UNPKG

@tanstack/ai

Version:

Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.

67 lines (60 loc) 2.19 kB
import type { ServerTool } from '../tools/tool-definition' /** * Minimal structural shape that `chat({ mcp })` needs from an MCP client. * * `@tanstack/ai-mcp`'s `MCPClient` and `MCPClients` satisfy this interface by * shape — the core `@tanstack/ai` package does NOT import `@tanstack/ai-mcp` * (ai-mcp depends on ai, not the reverse). */ export interface MCPToolSource { // Keep the options shape in sync with ai-mcp's `ToolsOptions` — extra // optional fields added there still match structurally, but chat() only // forwards what is declared here. tools: (options?: { lazy?: boolean }) => Promise<Array<ServerTool>> close: () => Promise<void> } /** * Controls what happens to MCP connections when the chat run ends. * * - `'close'` (default) — `chat()` closes each connection when the run ends * (after the agent loop completes and the stream is drained), so tools can * still execute throughout the run. * - `'keep-alive'` — `chat()` never closes the connections; the caller owns * their lifecycle (e.g. keep them warm across requests). */ export type MCPConnectionPolicy = 'close' | 'keep-alive' /** * Options controlling MCP tool discovery and lifecycle for a `chat()` call. */ export interface ChatMCPOptions { /** * The MCP clients or client pools to discover tools from and manage. */ clients: Array<MCPToolSource> /** * Connection lifecycle policy applied to all clients when the run ends. * * Defaults to `'close'`. */ connection?: MCPConnectionPolicy /** * When `true`, tool schemas are fetched lazily (forwarded to * `tools({ lazy: true })`). * * Defaults to `false`. */ lazyTools?: boolean /** * Called when tool discovery fails for a single source. * * - Throw (or re-throw) from this handler to fail the entire chat call fast. * - Return normally to skip that source and continue with remaining clients. * - Omit this handler entirely to rethrow the error (fail-fast by default). * * Async handlers are awaited, so a rejected promise also fails fast. */ onDiscoveryError?: ( error: unknown, source: MCPToolSource, ) => void | Promise<void> }