@stripe/mcp
Version:
A command line tool for setting up Stripe MCP server
89 lines (88 loc) • 3.73 kB
JavaScript
;
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; } });