Skip to main content
Glama
razvan1326

Academiadepolitie.com MCP Server

by razvan1326
dcr.js3.1 kB
/** * Dynamic Client Registration pentru Remote MCP * Permite Claude să se înregistreze automat */ import crypto from 'crypto'; // Store pentru clienți înregistrați const registeredClients = new Map(); // Client pre-înregistrat pentru Claude registeredClients.set('claude', { client_id: 'claude', client_secret: 'claude_secret_2025', client_name: 'Claude', redirect_uris: [ 'https://claude.ai/api/mcp/auth_callback', 'https://claude.com/api/mcp/auth_callback', 'https://claude.anthropic.com/api/mcp/auth_callback' ], grant_types: ['authorization_code'], response_types: ['code'], scope: 'mcp', created_at: Date.now() }); /** * Înregistrează un client nou */ export function registerClient(clientData) { const { client_name, redirect_uris, grant_types = ['authorization_code'], response_types = ['code'], scope = 'mcp', token_endpoint_auth_method = 'client_secret_post' } = clientData; // Validare if (!client_name || !redirect_uris || redirect_uris.length === 0) { return { error: 'invalid_client_metadata', error_description: 'client_name and redirect_uris are required' }; } // Generează client credentials const client_id = 'client_' + crypto.randomBytes(16).toString('hex'); const client_secret = crypto.randomBytes(32).toString('hex'); // Salvează client const client = { client_id, client_secret, client_name, redirect_uris, grant_types, response_types, scope, token_endpoint_auth_method, created_at: Date.now(), client_id_issued_at: Math.floor(Date.now() / 1000), client_secret_expires_at: 0 // Never expires }; registeredClients.set(client_id, client); console.log(`DCR: Registered new client: ${client_name} (${client_id})`); return client; } /** * Obține un client înregistrat */ export function getClient(clientId) { return registeredClients.get(clientId); } /** * Validează client credentials */ export function validateClient(clientId, clientSecret) { const client = registeredClients.get(clientId); if (!client) { return { valid: false, error: 'Client not found' }; } // Pentru Claude, acceptăm fără secret if (clientId === 'claude') { return { valid: true, client }; } if (clientSecret && client.client_secret !== clientSecret) { return { valid: false, error: 'Invalid client secret' }; } return { valid: true, client }; } /** * Validează redirect URI */ export function validateRedirectUri(clientId, redirectUri) { const client = registeredClients.get(clientId); if (!client) { return false; } // Pentru Claude, acceptăm orice redirect către claude.ai if (clientId === 'claude' && redirectUri.startsWith('https://claude.')) { return true; } return client.redirect_uris.includes(redirectUri); } /** * Șterge un client */ export function deleteClient(clientId) { const deleted = registeredClients.delete(clientId); if (deleted) { console.log(`DCR: Deleted client: ${clientId}`); } return deleted; }

Latest Blog Posts

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/razvan1326/mcp-server'

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