get_print_providers
Retrieve print providers that fulfill orders for a specific product blueprint on Printify, enabling selection of fulfillment partners.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| blueprintId | Yes | Blueprint ID |
Implementation Reference
- src/index.ts:491-522 (registration)MCP tool registration for 'get_print_providers' - defines the tool with a 'blueprintId' string input, imports and calls the getPrintProviders service function, and handles success/error responses.
// Get print providers tool server.tool( "get_print_providers", { blueprintId: z.string().describe("Blueprint ID") }, async ({ blueprintId }): Promise<{ content: any[], isError?: boolean }> => { // Import the printify blueprints service const { getPrintProviders } = await import('./services/printify-blueprints.js'); // Check if client is initialized if (!printifyClient) { return { content: [{ type: "text", text: "Printify API client is not initialized. The PRINTIFY_API_KEY environment variable may not be set." }], isError: true }; } // Call the service const result = await getPrintProviders(printifyClient, blueprintId); // Return the result if (result.success) { return result.response as { content: any[], isError?: boolean }; } else { return result.errorResponse as { content: any[], isError: boolean }; } } ); - src/index.ts:493-496 (schema)Zod schema for the 'blueprintId' input parameter of the get_print_providers tool. The parameter is a required string described as 'Blueprint ID'.
"get_print_providers", { blueprintId: z.string().describe("Blueprint ID") }, - Service handler function that executes the 'get_print_providers' tool logic. Takes a PrintifyAPI client and blueprintId, validates the client, calls printifyClient.getPrintProviders(blueprintId), and returns a formatted success response with the print providers data or an error response.
/** * Get print providers for a blueprint */ export async function getPrintProviders( printifyClient: PrintifyAPI, blueprintId: string ) { try { // Validate client is initialized if (!printifyClient) { throw new Error('Printify API client is not initialized. The PRINTIFY_API_KEY environment variable may not be set.'); } // Get print providers const printProviders = await printifyClient.getPrintProviders(blueprintId); return { success: true, printProviders, response: { content: [{ type: "text", text: `Print providers for blueprint ID ${blueprintId}:\n\n${JSON.stringify(printProviders, null, 2)}` }] } }; } catch (error: any) { console.error('Error getting print providers:', error); return { success: false, error, errorResponse: formatErrorResponse( error, 'Get Print Providers', { BlueprintId: blueprintId }, [ 'Check that the blueprint ID is valid', 'Check that your Printify API key is valid', 'Ensure your Printify account is properly connected' ] ) }; } } - src/printify-api.ts:426-435 (helper)Helper method on the PrintifyAPI class that calls the underlying Printify SDK catalog.getBlueprintProviders(blueprintId) method to fetch print providers for a given blueprint.
// Get print providers for a blueprint async getPrintProviders(blueprintId: string) { try { // Use the catalog.getBlueprintProviders method return await this.client.catalog.getBlueprintProviders(blueprintId); } catch (error) { console.error(`Error fetching print providers for blueprint ${blueprintId}:`, error); throw error; } } - src/utils/error-handler.ts:8-75 (helper)Utility function formatErrorResponse used by the handler to format error messages including context details, tips, and diagnostic info when the getPrintProviders call fails.
export function formatErrorResponse( error: any, step: string, context: Record<string, any> = {}, tips: string[] = [] ) { // Get error details const errorType = error.constructor.name; const errorMessage = error.message || 'Unknown error'; const errorStack = error.stack ? error.stack.split('\n').slice(0, 3).join('\n') : 'Not available'; // Format the error message let text = `ā **Error in ${step}**\n\n`; // Add context information Object.entries(context).forEach(([key, value]) => { if (typeof value === 'string' && value.includes('"')) { text += `- **${key}**: ${value}\n`; } else if (typeof value === 'object') { text += `- **${key}**: ${JSON.stringify(value)}\n`; } else { text += `- **${key}**: "${value}"\n`; } }); text += `- **Error**: ${errorMessage}\n\n`; // Add detailed diagnostic information text += `=== DETAILED DIAGNOSTIC INFORMATION ===\n\n`; text += `- **Error Type**: ${errorType}\n`; text += `- **Error Stack**: ${errorStack}\n`; // Add additional context details Object.entries(context).forEach(([key, value]) => { if (key !== 'Prompt' && key !== 'Model' && key !== 'Error') { if (typeof value === 'object' && value !== null) { text += `- **${key}**: ${JSON.stringify(value, null, 2)}\n`; } else if (value !== undefined && value !== null) { text += `- **${key}**: ${value}\n`; } } }); // Add system information text += `- **Current Working Directory**: ${process.cwd()}\n`; text += `- **Node.js Version**: ${process.version}\n`; text += `- **Platform**: ${process.platform}\n\n`; // Add API response data if available if (error.response) { text += `- **API Response Status**: ${error.response.status}\n`; text += `- **API Response Data**: ${JSON.stringify(error.response.data, null, 2)}\n\n`; } // Add tips if provided if (tips.length > 0) { text += `\nš Please try again with a different prompt or parameters.\n\n`; text += 'š” **Tips**:\n'; tips.forEach(tip => { text += `⢠${tip}\n`; }); } return { content: [{ type: "text", text }], isError: true }; }