Skip to main content
Glama

MCP GraphQL Query Generator

by marias1lva
mcp-server.ts5.5 kB
import express from 'express'; import cors from 'cors'; import { GenericQueryGenerator } from './src/generators/genericQueryGenerator.js'; const app = express(); const port = process.env.MCP_PORT || 3001; //middleware app.use(cors()); app.use(express.json()); //instance do gerador const generator = new GenericQueryGenerator(); // ========================================== // ENDPOINTS PARA IA CHAT // ========================================== // 1. lista todas as queries disponíveis app.get('/mcp/queries', async (req, res) => { try{ const queries = await generator.getAvailableQueries(); res.json({ success: true, count: queries.length, queries: queries }); }catch (error){ const errorMessage = error instanceof Error ? error.message : String(error); res.status(500).json({ success: false, error: errorMessage }); } }); // 2. gera query GraphQL completa app.post('/mcp/generate-query', async (req, res) => { try{ const { queryName, options = {} } = req.body; if(!queryName){ return res.status(400).json({ success: false, error: 'queryName é obrigatório' }); } const query = await generator.generateTableQuery(queryName, { includePagination: options.pagination !== false, includeFilters: options.filters !== false, includeOrdering: options.ordering !== false, maxDepth: options.depth || 2 }); res.json({ success: true, queryName, query, options: options }); }catch (error){ const errorMessage = error instanceof Error ? error.message : String(error); res.status(500).json({ success: false, error: errorMessage }); } }); // 3. analisa campos de uma query específica app.get('/mcp/analyze/:queryName', async (req, res) => { try{ const { queryName } = req.params; const { scalarsOnly = false } = req.query; const introspection = generator.introspection; const allFields = await introspection.getFieldsForQuery(queryName); let fields = allFields; if(scalarsOnly === 'true'){ fields = allFields.filter(field => ['String', 'Int', 'Float', 'Boolean', 'ID', 'DateTime', 'Date'].includes(field.type) ); } const scalarCount = allFields.filter(field => ['String', 'Int', 'Float', 'Boolean', 'ID', 'DateTime', 'Date'].includes(field.type) ).length; res.json({ success: true, queryName, totalFields: allFields.length, scalarFields: scalarCount, objectFields: allFields.length - scalarCount, fields: fields.map(field => ({ name: field.name, type: field.type, isRequired: field.isRequired, isArray: field.isArray, hasSubfields: !!(field.fields && field.fields.length > 0) })) }); }catch (error){ const errorMessage = error instanceof Error ? error.message : String(error); res.status(500).json({ success: false, error: errorMessage }); } }); // 4. busca queries por padrão app.get('/mcp/search/:pattern', async (req, res) => { try{ const { pattern } = req.params; const queries = await generator.getAvailableQueries(); const filtered = queries.filter(query => query.toLowerCase().includes(pattern.toLowerCase()) ); res.json({ success: true, pattern, count: filtered.length, queries: filtered }); }catch (error){ const errorMessage = error instanceof Error ? error.message : String(error); res.status(500).json({ success: false, error: errorMessage }); } }); // 5. health check app.get('/mcp/health', (req, res) => { res.json({ success: true, service: 'MCP GraphQL Query Generator', status: 'running', timestamp: new Date().toISOString() }); }); // 6. informações do servidor para IA app.get('/mcp/info', async (req, res) => { try{ const queries = await generator.getAvailableQueries(); res.json({ success: true, service: 'MCP GraphQL Query Generator', capabilities: [ 'Lista queries GraphQL disponíveis', 'Gera queries completas com paginação', 'Analisa campos e tipos de dados', 'Busca queries por padrão' ], endpoints: { 'GET /mcp/queries': 'Lista todas as queries disponíveis', 'POST /mcp/generate-query': 'Gera query GraphQL completa', 'GET /mcp/analyze/:queryName': 'Analisa campos de uma query', 'GET /mcp/search/:pattern': 'Busca queries por padrão' }, totalQueries: queries.length, apiUrl: process.env.GRAPHQL_API_URL || 'https://your-api.example.com/graphql' }); }catch (error){ const errorMessage = error instanceof Error ? error.message : String(error); res.status(500).json({ success: false, error: errorMessage }); } }); // INICIALIZAÇÃO app.listen(port, () => { console.log(`🤖 MCP Server rodando na porta ${port}`); console.log(`📖 Informações: http://localhost:${port}/mcp/info`); console.log(`🔍 Health check: http://localhost:${port}/mcp/health`); console.log(`\n🎯 Endpoints para IA:`); console.log(` GET /mcp/queries - Lista queries`); console.log(` POST /mcp/generate-query - Gera query`); console.log(` GET /mcp/analyze/:queryName - Analisa campos`); console.log(` GET /mcp/search/:pattern - Busca queries`); }); export default app;

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/marias1lva/mcp-graphql-generator'

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