Skip to main content
Glama

OpenAI and Claude MCP

by Spysailor
server.js5.26 kB
// Serveur MCP pour OpenAI et Claude const express = require('express'); const cors = require('cors'); const bodyParser = require('body-parser'); const dotenv = require('dotenv'); const { OpenAI } = require('openai'); const { Anthropic } = require('@anthropic-ai/sdk'); // Configuration dotenv.config(); const app = express(); const port = process.env.PORT || 3000; // Middleware app.use(cors()); app.use(bodyParser.json()); // Initialisation d'OpenAI const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); // Initialisation de Claude (Anthropic) const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY, }); // Routes app.get('/', (req, res) => { res.send('MCP Server pour OpenAI et Claude est en marche!'); }); // Endpoint pour les requêtes OpenAI app.post('/api/mcp/openai', async (req, res) => { try { const { prompt, model = 'gpt-4', maxTokens = 2000 } = req.body; if (!prompt) { return res.status(400).json({ error: 'Le prompt est requis' }); } const response = await openai.chat.completions.create({ model, messages: [ { role: 'system', content: 'Vous êtes un assistant IA hautement performant qui agit comme un MCP (Master Control Program).' }, { role: 'user', content: prompt } ], max_tokens: maxTokens, }); res.json({ success: true, provider: 'openai', data: response.choices[0].message.content, usage: response.usage }); } catch (error) { console.error('Erreur lors de la requête à l\'API OpenAI:', error); res.status(500).json({ success: false, provider: 'openai', error: error.message }); } }); // Endpoint pour les requêtes Claude (Anthropic) app.post('/api/mcp/claude', async (req, res) => { try { const { prompt, model = 'claude-3-opus-20240229', maxTokens = 2000 } = req.body; if (!prompt) { return res.status(400).json({ error: 'Le prompt est requis' }); } const response = await anthropic.messages.create({ model, max_tokens: maxTokens, system: 'Vous êtes un assistant IA hautement performant qui agit comme un MCP (Master Control Program).', messages: [ { role: 'user', content: prompt } ] }); res.json({ success: true, provider: 'claude', data: response.content[0].text, usage: { input_tokens: response.usage.input_tokens, output_tokens: response.usage.output_tokens } }); } catch (error) { console.error('Erreur lors de la requête à l\'API Claude:', error); res.status(500).json({ success: false, provider: 'claude', error: error.message }); } }); // Endpoint unifié pour les requêtes MCP (détecte automatiquement le modèle) app.post('/api/mcp', async (req, res) => { try { const { prompt, model = 'gpt-4', maxTokens = 2000, provider = 'auto' } = req.body; if (!prompt) { return res.status(400).json({ error: 'Le prompt est requis' }); } // Déterminer le fournisseur basé sur le modèle ou la préférence let selectedProvider = provider; if (provider === 'auto') { if (model.includes('claude')) { selectedProvider = 'claude'; } else { selectedProvider = 'openai'; } } // Rediriger vers le bon endpoint if (selectedProvider === 'claude') { // Appel à Claude API const response = await anthropic.messages.create({ model: model.includes('claude') ? model : 'claude-3-opus-20240229', max_tokens: maxTokens, system: 'Vous êtes un assistant IA hautement performant qui agit comme un MCP (Master Control Program).', messages: [ { role: 'user', content: prompt } ] }); res.json({ success: true, provider: 'claude', model: model.includes('claude') ? model : 'claude-3-opus-20240229', data: response.content[0].text, usage: { input_tokens: response.usage.input_tokens, output_tokens: response.usage.output_tokens } }); } else { // Appel à OpenAI API const response = await openai.chat.completions.create({ model: model.includes('claude') ? 'gpt-4' : model, messages: [ { role: 'system', content: 'Vous êtes un assistant IA hautement performant qui agit comme un MCP (Master Control Program).' }, { role: 'user', content: prompt } ], max_tokens: maxTokens, }); res.json({ success: true, provider: 'openai', model: model.includes('claude') ? 'gpt-4' : model, data: response.choices[0].message.content, usage: response.usage }); } } catch (error) { console.error('Erreur lors de la requête au MCP:', error); res.status(500).json({ success: false, error: error.message }); } }); // Démarrage du serveur app.listen(port, () => { console.log(`Serveur MCP démarré sur le port ${port}`); console.log(`- OpenAI API: ${process.env.OPENAI_API_KEY ? 'Configurée' : 'Non configurée'}`); console.log(`- Claude API: ${process.env.ANTHROPIC_API_KEY ? 'Configurée' : 'Non configurée'}`); });

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/Spysailor/openai-mcp-implementation'

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