arcadiasuite/server/protocols/mcp/routes.ts

103 lines
2.5 KiB
TypeScript

// ============================================================
// MCP SERVER - ROUTES
// Endpoints REST para o Model Context Protocol
// ============================================================
import { Router, Request, Response } from 'express';
import * as mcpService from './service';
const router = Router();
/**
* GET /mcp/v1/tools
* Lista todas as ferramentas disponíveis
*/
router.get('/tools', (req: Request, res: Response) => {
try {
const response = mcpService.listTools();
res.json(response);
} catch (error: any) {
res.status(500).json({ error: error.message });
}
});
/**
* GET /mcp/v1/tools/:name
* Retorna detalhes de uma ferramenta específica
*/
router.get('/tools/:name', (req: Request, res: Response) => {
try {
const { name } = req.params;
const tool = mcpService.getTool(name);
if (!tool) {
return res.status(404).json({ error: `Ferramenta '${name}' não encontrada` });
}
res.json({ tool });
} catch (error: any) {
res.status(500).json({ error: error.message });
}
});
/**
* POST /mcp/v1/tools/:name/execute
* Executa uma ferramenta com os argumentos fornecidos
*/
router.post('/tools/:name/execute', async (req: Request, res: Response) => {
try {
const { name } = req.params;
const { arguments: args = {} } = req.body;
// Verifica se a ferramenta existe
const tool = mcpService.getTool(name);
if (!tool) {
return res.status(404).json({ error: `Ferramenta '${name}' não encontrada` });
}
// Importa dinamicamente o executor do Manus para evitar dependência circular
const { executeToolForMcp } = await import('../../manus/service');
const result = await mcpService.executeTool(name, args, executeToolForMcp);
if (result.success) {
res.json(result);
} else {
res.status(400).json(result);
}
} catch (error: any) {
res.status(500).json({
success: false,
error: error.message || 'Erro interno ao executar ferramenta'
});
}
});
/**
* GET /mcp/v1/stats
* Retorna estatísticas do servidor MCP
*/
router.get('/stats', (req: Request, res: Response) => {
try {
const stats = mcpService.getServerStats();
res.json(stats);
} catch (error: any) {
res.status(500).json({ error: error.message });
}
});
/**
* GET /mcp/v1/health
* Health check do servidor MCP
*/
router.get('/health', (req: Request, res: Response) => {
res.json({
status: 'healthy',
timestamp: new Date().toISOString(),
protocol: 'MCP',
version: '1.0.0'
});
});
export default router;