UNPKG

@stripe/mcp

Version:

A command line tool for setting up Stripe MCP server

89 lines (88 loc) 3.73 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseArgs = void 0; exports.main = main; const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js"); const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js"); const colors_1 = require("colors"); const cli_1 = require("./cli"); const userAgent_1 = require("./userAgent"); const MCP_SERVER_URL = 'https://mcp.stripe.com'; function handleError(error) { const message = error instanceof Error ? error.message : String(error); console.error((0, colors_1.red)('\n🚨 Error initializing Stripe MCP server:\n')); console.error(` ${message}\n`); } async function main() { const options = (0, cli_1.parseArgs)(process.argv.slice(2)); // Validate inputs (0, cli_1.validateApiKey)(options.apiKey); if (options.stripeAccount) { (0, cli_1.validateStripeAccount)(options.stripeAccount); } // Create stdio transport (listens for messages from MCP clients) const stdioTransport = new stdio_js_1.StdioServerTransport(); let httpTransport = null; function createHttpTransport(userAgent) { const headers = (0, cli_1.buildHeaders)(options, userAgent); const transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(MCP_SERVER_URL), { requestInit: { headers } }); // Wire up message forwarding: HTTP -> stdio transport.onmessage = async (message) => { try { await stdioTransport.send(message); } catch (error) { console.error((0, colors_1.red)('Error forwarding message to client:'), error); } }; transport.onerror = (error) => { console.error((0, colors_1.red)('HTTP transport error:'), error); }; transport.onclose = () => { stdioTransport.close(); }; return transport; } // Wire up message forwarding: stdio -> HTTP // The first message is inspected for clientInfo to build the User-Agent. let initialized = false; stdioTransport.onmessage = async (message) => { try { if (!initialized) { initialized = true; // Extract client name from the initialize request (if present) const clientName = (0, userAgent_1.extractClientName)(message); const userAgent = (0, userAgent_1.buildUserAgent)(clientName); // Create and start the HTTP transport with the enriched User-Agent httpTransport = createHttpTransport(userAgent); await httpTransport.start(); } await httpTransport.send(message); } catch (error) { console.error((0, colors_1.red)('Error forwarding message to server:'), error); } }; // Handle transport errors stdioTransport.onerror = (error) => { console.error((0, colors_1.red)('Stdio transport error:'), error); }; // Handle transport close stdioTransport.onclose = () => { httpTransport?.close(); }; // Start stdio transport (HTTP transport starts on first message) await stdioTransport.start(); // Log success to stderr (stdout is reserved for MCP messages) console.error((0, colors_1.green)('✅ Stripe MCP Server running on stdio')); } if (require.main === module) { main().catch((error) => { handleError(error); throw error; }); } // Re-export for backwards compatibility with tests var cli_2 = require("./cli"); Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return cli_2.parseArgs; } });