Servidor MCP para análise arquitetural de código com foco em SOLID, Design Patterns e feedback imediato ao desenvolvedor.
O projeto funciona em duas camadas:
- Um backend ASP.NET Core expõe um endpoint HTTP que recebe
sourceCode,filePathellmModel. - Um servidor MCP em Node.js expõe a ferramenta
check_my_architecture, lê o arquivo local e envia o conteúdo para o backend.
O backend atua como ponte agnóstica para o OpenRouter. O modelo é escolhido pelo cliente/MCP e o backend apenas encaminha a análise para o provedor.
- Análise de violações de SOLID.
- Sugestões objetivas de refatoração.
- Indicação de Design Patterns aplicáveis.
- Resposta em JSON estruturado para consumo por LLMs e ferramentas de desenvolvimento.
backend/: API ASP.NET Core que consulta o OpenRouter.mcp-server/: servidor MCP em Node.js.docs/: documentação complementar.
- Node.js 18 ou superior.
- .NET SDK 10.0.
- Uma API Key do OpenRouter.
- VS Code com suporte a MCP, se for integrar o servidor ao editor.
Se o MCP Inspector solicitar um token local de sessão ou acesso, isso faz parte da própria interface web do Inspector e não é uma credencial da aplicação. Não reutilize esse valor em produção.
Para expor o backend fora da máquina local, configure API_KEY e use o mesmo valor em BACKEND_API_KEY no MCP server. Mantenha AllowedOrigins restrito, deixe DEBUG=false e publique o backend atrás de um proxy confiável.
Use este modo quando estiver iterando no código na sua máquina.
Backend:
cd .\backend
dotnet runMCP Server:
cd .\mcp-server
npm run build
npm startNesse cenário, API_KEY pode ficar vazio e AllowedOrigins pode manter os padrões de localhost.
Use este modo quando quiser validar o fluxo em um ambiente controlado antes de promover para produção.
Backend:
ASPNETCORE_ENVIRONMENT=Staging
AllowedOrigins=https://seu-front-teste.com
API_KEY=uma_chave_testeMCP Server:
BACKEND_URL=https://seu-backend-teste.com
BACKEND_API_KEY=uma_chave_teste
DEBUG=falseEm produção, mantenha API_KEY configurada, AllowedOrigins restrito ao front real e DEBUG=false. Se o backend estiver atrás de proxy ou gateway, preserve o header X-Api-Key até a aplicação.
Entre na pasta do backend e crie um arquivo .env baseado no exemplo:
PowerShell (Windows):
Copy-Item backend\.env.example backend\.envBash (Linux/macOS):
cp backend/.env.example backend/.envEdite o arquivo .env e informe sua chave do OpenRouter:
OpenRouter__ApiKey=sua_chave_aqui
OpenRouter__Referer=http://localhost
OpenRouter__Title=Architecture Analysis MCP Backend
ASPNETCORE_URLS=http://localhost:5000
ASPNETCORE_ENVIRONMENT=Development
AllowedOrigins=http://localhost:5173,http://localhost:6274,http://localhost:3000
API_KEY=Se quiser simular teste/homologação localmente, troque ASPNETCORE_ENVIRONMENT para Staging, ajuste AllowedOrigins para a origem real e defina API_KEY com um valor de teste.
Instale as dependências do servidor MCP:
cd .\mcp-server
npm installOpcionalmente, crie um arquivo .env em mcp-server/ para sobrescrever as configurações padrão:
BACKEND_URL=http://localhost:5000
BACKEND_ENDPOINT=/api/architecture/analyze
DEFAULT_LLM_MODEL=openai/gpt-4o-mini
BACKEND_API_KEY=
DEBUG=falseEm teste ou produção, aponte BACKEND_URL para o ambiente desejado e, se o backend estiver protegido, configure o mesmo valor em BACKEND_API_KEY.
cd .\backend
dotnet runO backend sobe em http://localhost:5000.
Em outro terminal, compile e inicie o servidor:
cd .\mcp-server
npm run build
npm start
⚠️ Comportamento esperado: O servidor MCP usa transporte stdio e não imprime nada visível no terminal durante a execução normal — isso é correto. Toda a comunicação acontece via stdin/stdout, reservado para o protocolo MCP. Logs de debug são emitidos viastderre só aparecem seDEBUG=trueestiver no.env.
ℹ️ PowerShell e stderr: O PowerShell pode exibir um
NativeCommandErrorou exit code 1 ao capturar a saída stderr do servidor. Isso é um falso positivo do PowerShell — o servidor está funcionando normalmente. Para confirmar, ative o debug:$env:DEBUG="true"; node dist/index.js # Deve exibir: [architecture-analysis-mcp] MCP server ready { backend: '...' }
Para desenvolvimento com recarga automática ao salvar arquivos:
npm run dev:watchNota:
npm run devusats-nodediretamente (sem compilar) e emite avisos de deprecação no Node.js moderno — prefiranpm start(com build) para execução estável.
Para interagir com o servidor via interface web sem precisar de uma IDE compatível:
# Produção (build compilado) — recomendado
npm run start:inspector
# Desenvolvimento (ts-node)
npm run dev:inspectorApós executar, acesse o link gerado no terminal (geralmente http://localhost:5173 ou http://localhost:6274) para abrir o MCP Inspector.
Crie um arquivo .archrc.json na raiz do projeto que será analisado com um array "rules" para aplicar regras arquiteturais específicas do seu time. O servidor MCP carrega essas regras automaticamente e as inclui na análise.
{
"rules": [
"Controllers não devem acessar o banco de dados diretamente. Use Repositories ou Services.",
"O código deve priorizar a Injeção de Dependência via construtor.",
"Mantenha classes focadas em uma única responsabilidade (SRP)."
]
}Se o arquivo não existir, a análise prossegue normalmente sem regras customizadas.
A ferramenta exposta é check_my_architecture.
Parâmetros principais:
file_path: caminho do arquivo local a ser analisado (absoluto ou relativo). Obrigatório sesource_codenão for informado.source_code: código-fonte enviado diretamente, sem precisar de um arquivo em disco. Obrigatório sefile_pathnão for informado.
Regra: informe ao menos um dos dois. Se ambos forem fornecidos,
source_codetem preferência e o arquivo não é lido do disco (masfile_pathainda é usado como nome de referência no relatório e peloauto_fix).
llm_model: modelo do OpenRouter a ser usado na análise. Se omitido, usa o valor deDEFAULT_LLM_MODEL(padrão:openai/gpt-4o-mini).additional_context: contexto adicional para enriquecer a análise.auto_fix: quandotrue, o sistema gera o código refatorado e sobrescreve automaticamente o arquivo com a versão corrigida. Requerfile_path. Use com atenção — a operação não tem desfazer.
{
"file_path": "src/OrderService.cs",
"llm_model": "openrouter/auto",
"additional_context": "Quero focar em SRP e possíveis melhorias de desacoplamento",
"auto_fix": false
}{
"source_code": "public class OrderService { public void Process() { /* ... */ } }",
"llm_model": "openrouter/auto",
"additional_context": "Código colado direto no MCP Inspector"
}
auto_fixnão tem efeito quando somentesource_codeé informado (não há arquivo para sobrescrever).
Para acionar a refatoração automática com sobrescrita do arquivo:
{
"file_path": "src/OrderService.cs",
"llm_model": "openrouter/auto",
"auto_fix": true
}Você pode testar o backend diretamente com um POST para o endpoint:
POST http://localhost:5000/api/architecture/analyze
Exemplo de payload:
{
"sourceCode": "public class SampleService { }",
"filePath": "SampleService.cs",
"llmModel": "openrouter/auto",
"additionalContext": "Teste local"
}GET http://localhost:5000/health retorna {"status":"ok"} quando o backend está no ar.
Em modo Development (ASPNETCORE_ENVIRONMENT=Development), o backend expõe a especificação OpenAPI em:
GET http://localhost:5000/openapi/v1.json
A resposta retorna algo neste formato:
{
"analysis": "...",
"violations": [],
"suggestions": [],
"patterns": [],
"confidence": 0.95,
"refactoredCode": null,
"architectureDiagram": null,
"metadata": {
"provider": "OpenRouter",
"model": "openrouter/auto",
"generatedAtUtc": "2025-01-01T00:00:00.0000000Z"
}
}O agente consumidor deve priorizar:
- violações de SOLID com impacto direto;
- riscos de acoplamento e baixa coesão;
- padrões de projeto aplicáveis com ganho real;
- recomendações imediatas e acionáveis para o desenvolvedor.
O fluxo completo foi validado localmente com Playwright: o backend recebeu o POST, consultou o OpenRouter e retornou uma análise em JSON com status 200.
- O arquivo
backend/.envnão é versionado; use o.env.examplecomo base. - O backend carrega automaticamente o
.envna inicialização. - O servidor MCP também usa
.envviadotenv.
- Testar a ferramenta
check_my_architecturecom arquivos reais do seu projeto via MCP Inspector ou IDE compatível. - Criar um
.archrc.jsonna raiz do projeto com as regras arquiteturais do seu time. - Implementar a etapa de análise no workflow
.github/workflows/architecture-analysis.ymlpara postar feedback arquitetural diretamente nos Pull Requests.