UNPKG

openai-assistants-mcp

Version:

OpenAI Assistants MCP Server - A Model Context Protocol server providing OpenAI Assistants API tools and resources. Features comprehensive assistant management, thread operations, message handling, and run execution with seamless stdio transport for Claud

99 lines (90 loc) 3.01 kB
#!/usr/bin/env node import 'dotenv/config'; // Automatically loads .env import { MCPHandler } from './mcp-handler.js'; import * as readline from 'readline'; import { createRequire } from 'module'; const require = createRequire(import.meta.url); const pkg = require('../../../package.json'); function showHelp() { console.log(` OpenAI Assistants MCP Server v${pkg.version} USAGE: npx openai-assistants-mcp [OPTIONS] DESCRIPTION: A Model Context Protocol (MCP) server that provides OpenAI Assistants API tools. Runs in stdio mode for integration with MCP clients like Claude Desktop. OPTIONS: --help, -h Show this help message --version, -v Show version information ENVIRONMENT VARIABLES: OPENAI_API_KEY Required. Your OpenAI API key EXAMPLES: # Run the MCP server (requires OPENAI_API_KEY) OPENAI_API_KEY=sk-... npx openai-assistants-mcp # Show help npx openai-assistants-mcp --help # Show version npx openai-assistants-mcp --version MCP CLIENT CONFIGURATION: Add this to your MCP client configuration: { "mcpServers": { "openai-assistants": { "command": "npx", "args": ["openai-assistants-mcp"], "env": { "OPENAI_API_KEY": "your-api-key-here" } } } } For more information, visit: https://github.com/jezweb/openai-assistants-mcp `); } function showVersion() { console.log(pkg.version); } async function runMCPServer() { const apiKey = process.env.OPENAI_API_KEY; if (!apiKey) { console.error(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32000, message: 'OPENAI_API_KEY is not set in environment.' } })); process.exit(1); } const mcpHandler = new MCPHandler(apiKey); const rl = readline.createInterface({ input: process.stdin }); console.error('OpenAI Assistants MCP Server is running in stdio mode...'); for await (const line of rl) { try { const request = JSON.parse(line); const response = await mcpHandler.handleRequest(request); process.stdout.write(JSON.stringify(response) + '\n'); } catch (e) { const errResponse = { jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } }; process.stdout.write(JSON.stringify(errResponse) + '\n'); } } } async function main() { const args = process.argv.slice(2); // Handle command line arguments if (args.includes('--help') || args.includes('-h')) { showHelp(); process.exit(0); } if (args.includes('--version') || args.includes('-v')) { showVersion(); process.exit(0); } // If no arguments or unrecognized arguments, run the MCP server await runMCPServer(); } main().catch(err => { console.error(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32603, message: 'Internal Server Error', data: err.message } })); process.exit(1); }); //# sourceMappingURL=index.js.map