103 lines
2.5 KiB
TypeScript
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;
|