Skip to main content
Glama

Role-Specific Context MCP Server

by Chris-June
http-server.ts3.07 kB
import express from 'express'; import cors from 'cors'; import dotenv from 'dotenv'; import { RoleManager } from './roles/roleManager'; import { MemoryManager } from './memory/memoryManager'; import { OpenAIClient } from './ai/openaiClient'; import { config } from './config'; // Load environment variables dotenv.config(); // Initialize core services const aiClient = new OpenAIClient(config.openai.apiKey, config.openai.model); const memoryManager = new MemoryManager(); const roleManager = new RoleManager(memoryManager, aiClient); // Create Express app const app = express(); app.use(cors()); app.use(express.json()); // Health check endpoint app.get('/health', (req, res) => { res.json({ status: 'ok', server: 'role-context-mcp' }); }); // Get all roles app.get('/roles', (req, res) => { try { const roles = roleManager.getAllRoles(); res.json({ roles }); } catch (error: any) { res.status(500).json({ error: error.message }); } }); // Get a specific role app.get('/roles/:roleId', (req, res) => { try { const role = roleManager.getRole(req.params.roleId); if (!role) { return res.status(404).json({ error: `Role with ID ${req.params.roleId} not found` }); } res.json({ role }); } catch (error: any) { res.status(500).json({ error: error.message }); } }); // Create a new role app.post('/roles', (req, res) => { try { const role = roleManager.createRole(req.body); res.status(201).json({ role }); } catch (error: any) { res.status(400).json({ error: error.message }); } }); // Update a role app.patch('/roles/:roleId', (req, res) => { try { const role = roleManager.updateRole(req.params.roleId, req.body); res.json({ role }); } catch (error: any) { res.status(400).json({ error: error.message }); } }); // Delete a role app.delete('/roles/:roleId', (req, res) => { try { const deleted = roleManager.deleteRole(req.params.roleId); if (!deleted) { return res.status(404).json({ error: `Role with ID ${req.params.roleId} not found` }); } res.json({ success: true }); } catch (error: any) { res.status(400).json({ error: error.message }); } }); // Process a query with a specific role app.post('/process', async (req, res) => { try { const { roleId, query, customInstructions } = req.body; if (!roleId || !query) { return res.status(400).json({ error: 'roleId and query are required' }); } const response = await roleManager.processQuery(roleId, query, customInstructions); res.json({ response }); } catch (error: any) { res.status(500).json({ error: error.message }); } }); // Get tone profiles app.get('/tones', (req, res) => { try { const tones = roleManager.getAllToneProfiles(); res.json({ tones: Object.fromEntries(tones) }); } catch (error: any) { res.status(500).json({ error: error.message }); } }); // Start the server const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Role-Specific Context HTTP Server running on port ${PORT}`); });

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/Chris-June/MCP-Server'

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