README Documentation
MCP Gateway – API & Portal de Autoatendimento
Este repositório contém o MCP Gateway, uma solução corporativa para expor, gerenciar e consumir ferramentas (APIs internas) de forma segura, escalável e auditável, com autenticação RBAC e portal de autoatendimento. (Atualizado em 2025-05-10 para refletir o estado atual do projeto)
Sumário
- Visão Geral
- Estrutura de Pastas
- Como Rodar (Desenvolvimento)
- Funcionalidades Principais
- Exemplo de Estrutura RBAC
- Segurança
- Documentação da API
- Requisitos do Sistema
- Documentação Completa
- Boas Práticas e Observações
Visão Geral
O MCP Gateway é composto por:
- Backend: FastAPI (Python) responsável pela lógica de negócio, autenticação (JWT), autorização (RBAC), e exposição de APIs RESTful. Atualmente, persiste dados em arquivos JSON, com planos de migração para um banco de dados mais robusto.
- Frontend: React (Vite + TypeScript) como portal de autoatendimento, consumindo as APIs do backend. O build de produção do frontend é servido estaticamente pelo backend FastAPI.
Estrutura de Pastas
mcp-server/
├── app/ # Código-fonte do Backend FastAPI
│ ├── main.py # Ponto de entrada da aplicação FastAPI
│ ├── config.py # Configurações da aplicação
│ ├── auth.py # Lógica de autenticação, JWT, hashing
│ ├── utils/ # Utilitários (RBAC, validadores, gerenciadores)
│ ├── models/ # Modelos Pydantic (schemas de dados)
│ │ ├── __init__.py
│ │ └── requests.py # Modelos para solicitações de acesso
│ ├── groups/ # Módulo para rotas relacionadas a grupos e usuários
│ │ ├── __init__.py
│ │ ├── routes.py # Rotas principais (usuários, grupos, ferramentas)
│ │ ├── requests_routes.py # Rotas para solicitações de acesso a grupos
│ │ └── tools.py # Utilitários de permissão (legado ou específico)
│ └── scripts/ # Scripts utilitários (ex: gerar hash de senha)
├── data/ # Dados persistentes (temporário, para desenvolvimento)
│ ├── rbac.json # Configurações de usuários, grupos, papéis, ferramentas
│ └── requests.json # Dados das solicitações de acesso a grupos
├── docs/ # Documentação do projeto
├── frontend/ # Código-fonte do Portal Frontend React (Vite)
│ ├── src/ # Código-fonte React/TypeScript
│ ├── public/ # Arquivos públicos para o frontend
│ ├── dist/ # Build de produção do frontend (servido pelo FastAPI)
│ ├── package.json # Dependências e scripts do frontend
│ └── README.md # Documentação específica do frontend
├── tests/ # Testes automatizados (Pytest)
│ ├── conftest.py # Configurações e fixtures globais para testes
│ ├── integration/ # Testes de integração da API
│ └── data/ # Arquivos de dados para os testes
├── requirements.txt # Dependências Python do backend
├── pytest.ini # Configuração do Pytest
└── README.md # Este documento (visão geral do projeto)
Como Rodar (Desenvolvimento)
1. Backend (FastAPI)
No diretório raiz mcp-server/
:
# Crie e ative um ambiente virtual (recomendado)
python -m venv venv
.\venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/macOS
# Instale as dependências
pip install -r requirements.txt
# Rode o servidor de desenvolvimento
uvicorn app.main:app --reload
O backend estará disponível em http://localhost:8000
.
2. Frontend (React)
Em um novo terminal, navegue até o diretório frontend/
:
cd frontend
# Instale as dependências
npm install
# Rode o servidor de desenvolvimento do frontend
npm run dev
O frontend estará disponível em http://localhost:5173
(ou outra porta, se a 5173 estiver ocupada) e fará requisições para o backend em http://localhost:8000
.
3. Build do Frontend para Produção
Para gerar a versão de produção do frontend que será servida pelo FastAPI:
cd frontend
npm run build
Os arquivos estáticos serão gerados em frontend/dist/
. O backend FastAPI já está configurado para servir esses arquivos quando não estiver em modo de desenvolvimento Vite.
Funcionalidades Principais
- Autenticação e Autorização:
- Login de usuários com JWT (suportando papéis:
user
,admin
,global_admin
). - Refresh token para manutenção da sessão.
- Controle de Acesso Baseado em Papéis (RBAC) para proteger endpoints e funcionalidades.
- Login de usuários com JWT (suportando papéis:
- Gerenciamento de Usuários (por Admin Global):
- CRUD completo de usuários (criar, listar, detalhar, atualizar, deletar).
- Migração de senhas legadas para formato hasheado.
- Definição de requisitos de senha e funcionalidade para alteração de senha pelo próprio usuário.
- Gerenciamento de Grupos:
- Admin Global: CRUD de grupos, designação de administradores de grupo.
- Admin de Grupo (ou Global): Adicionar/remover usuários de seus grupos, promover membros a admin do grupo.
- Gerenciamento de Ferramentas:
- Admin de Grupo (ou Global): Associar/desassociar ferramentas a grupos.
- Usuários podem visualizar e acessar as ferramentas para as quais seus grupos concedem permissão.
- Workflow de Solicitação de Acesso a Grupos (RF06):
- Usuários podem solicitar acesso a grupos.
- Administradores (de grupo ou globais) podem revisar (aprovar/rejeitar) essas solicitações.
- Portal Frontend:
- Interface para login, dashboard, visualização de ferramentas, solicitação de acesso a grupos e administração de solicitações.
- Navegação e componentes dinâmicos baseados no papel do usuário.
- API Backend:
- Endpoints RESTful para todas as funcionalidades mencionadas.
- Documentação automática da API via Swagger UI (
/docs
) e ReDoc (/redoc
). - Healthcheck (
/tools/health
).
Exemplo de Estrutura RBAC
Consulte o arquivo data/rbac.json
para um exemplo da estrutura de dados que define usuários, senhas (hasheadas ou legadas para migração), papéis, grupos, membros de grupos, administradores de grupos e ferramentas associadas a grupos.
Segurança
- Autenticação baseada em JWT.
- Controle de Acesso Baseado em Papéis (RBAC) em todos os endpoints sensíveis.
- Hashing de senhas com bcrypt.
- Validação de força de senha.
- CORS configurado para desenvolvimento.
- Planejamento para headers de segurança adicionais (HSTS, CSP), rate limiting, e trilha de auditoria detalhada (ver
docs/SEGURANCA.md
edocs/TODO.md
).
Documentação da API
A documentação interativa e detalhada da API está disponível automaticamente através do FastAPI:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
Nota: Um resumo dos endpoints também está disponível em
docs/API.md
, mas a documentação gerada automaticamente é a fonte mais precisa e completa. A documentação técnica detalhada do backend, incluindo modelos e fluxos, pode ser encontrada emdocs/BACKEND_DOCUMENTATION.md
.
Requisitos do Sistema
Consulte o arquivo docs/REQUISITOS.md
para uma lista detalhada de requisitos funcionais, não-funcionais, de negócio e operacionais, incluindo o status de implementação de muitos deles.
Documentação Completa
A documentação detalhada do projeto está centralizada na pasta docs/
:
docs/REQUISITOS.md
: Requisitos do sistemadocs/API.md
: Resumo dos endpoints da APIdocs/BACKEND_DOCUMENTATION.md
: Documentação técnica detalhada do Backenddocs/ARQUITETURA.md
: Arquitetura técnica do sistemadocs/SEGURANCA.md
: Práticas e considerações de segurançadocs/GOVERNANCA.md
: Governança, papéis e responsabilidadesdocs/OPERACIONAL.md
: Operação, monitoramento e troubleshootingdocs/CHANGELOG.md
: Histórico de versões e mudançasdocs/TODO.md
: Lista de melhorias e pendênciasfrontend/README.md
: Documentação específica do Frontend
Boas Práticas e Observações
- Mantenha as dependências atualizadas (
requirements.txt
para o backend,package.json
para o frontend). - Utilize ambientes virtuais Python para isolar as dependências do backend.
- Sempre gere o build de produção do frontend (
npm run build
) antes de realizar o deploy da aplicação integrada. - Consulte a documentação específica de cada módulo/pasta para informações mais detalhadas.
- Utilize o sistema de issues do repositório para rastrear bugs, solicitar features e discutir melhorias.
- Contribuições são bem-vindas! Siga as diretrizes de contribuição (se houver) e utilize Pull Requests para propor mudanças.
Este documento deve ser revisado e atualizado periodicamente para refletir o estado atual e a evolução do projeto.