UNPKG

@tanstack/ai-mcp

Version:

Host-side Model Context Protocol client for TanStack AI: discover and run MCP server tools, resources, and prompts in any adapter's chat() loop, with generated end-to-end types.

54 lines (50 loc) • 1.6 kB
/** * Thrown when an MCP call needs input outside `chat()`. * * `kind` is `form` for user input, or `sampling` for a model request. * `request` is the MCP input request body. * The `name` is always `MCPInputRequiredError`. * Another package can read this shape without an import of this class. * * @param kind - `form` for user input, or `sampling` for a model request * @param request - The MCP input request body * * @example * throw new MCPInputRequiredError('form', { message: 'Which city?' }) */ export class MCPInputRequiredError extends Error { constructor( public readonly kind: 'form' | 'sampling', public readonly request: unknown, ) { super('The MCP server asked for input. Retry the call with the result.') this.name = 'MCPInputRequiredError' } } /** * This function returns true when `value` has the input-required error shape. * * The check reads `name`, `kind`, and `request`. * A plain object with those fields passes. * The check does not use `instanceof`. * * @param value - A thrown value, or a plain object * * @example * if (isMCPInputRequiredError(error)) { * error.kind * } */ export function isMCPInputRequiredError( value: unknown, ): value is MCPInputRequiredError { if (typeof value !== 'object' || value === null) return false if (!('name' in value) || value.name !== 'MCPInputRequiredError') { return false } if (!('kind' in value)) return false const kindIsFormOrSampling = value.kind === 'form' || value.kind === 'sampling' if (!kindIsFormOrSampling) return false return 'request' in value }