Skip to main content
Glama
errors.js2.44 kB
/** * src/ai-providers/custom-sdk/mcp/errors.js * * Error handling utilities for MCP AI SDK provider. * Maps MCP errors to AI SDK compatible error types. */ /** * MCP-specific error class */ export class MCPError extends Error { constructor(message, options = {}) { super(message); this.name = 'MCPError'; this.code = options.code; this.cause = options.cause; this.mcpResponse = options.mcpResponse; } } /** * Session-related error */ export class MCPSessionError extends MCPError { constructor(message, options = {}) { super(message, options); this.name = 'MCPSessionError'; } } /** * Sampling-related error */ export class MCPSamplingError extends MCPError { constructor(message, options = {}) { super(message, options); this.name = 'MCPSamplingError'; } } /** * Map MCP errors to AI SDK compatible error types * @param {Error} error - Original error * @returns {Error} Mapped error */ export function mapMCPError(error) { // If already an MCP error, return as-is if (error instanceof MCPError) { return error; } const message = error.message || 'Unknown MCP error'; const originalError = error; // Map common error patterns if (message.includes('session') || message.includes('connection')) { return new MCPSessionError(message, { cause: originalError, code: 'SESSION_ERROR' }); } if (message.includes('sampling') || message.includes('timeout')) { return new MCPSamplingError(message, { cause: originalError, code: 'SAMPLING_ERROR' }); } if (message.includes('capabilities') || message.includes('not supported')) { return new MCPSessionError(message, { cause: originalError, code: 'CAPABILITY_ERROR' }); } // Default to generic MCP error return new MCPError(message, { cause: originalError, code: 'UNKNOWN_ERROR' }); } /** * Check if error is retryable * @param {Error} error - Error to check * @returns {boolean} True if error might be retryable */ export function isRetryableError(error) { if (error instanceof MCPSamplingError && error.code === 'SAMPLING_ERROR') { return true; } if (error instanceof MCPSessionError && error.code === 'SESSION_ERROR') { // Session errors are generally not retryable return false; } // Check for common retryable patterns const message = error.message?.toLowerCase() || ''; return ( message.includes('timeout') || message.includes('network') || message.includes('temporary') ); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/eyaltoledano/claude-task-master'

If you have feedback or need assistance with the MCP directory API, please join our Discord server