Are you the author? Sign in to claim
Secure multi-user MCP control plane for cPanel reseller operations
MCP global e multiusuário para operar um reseller cPanel com segurança. A fase 1 usa um catálogo local estruturado; RAG está deliberadamente reservado para a fase 2.
O serviço roda na VPS Semeion como plano de controle HTTPS. Ele autentica cada pessoa/cliente com
token próprio, aplica RBAC e escopo por conta cPanel, chama WHM API 1 ou UAPI com credenciais de
menor privilégio e grava auditoria encadeada. Escritas passam obrigatoriamente por
action_prepare e action_execute; ações destrutivas exigem confirmação textual exata e podem
exigir um segundo administrador.
As consultas de conta aceitam UID, username, domínio, e-mail de contato ou IP e resolvem tudo
para o username canônico dentro do escopo do usuário. Respostas preservam o payload bruto para
compatibilidade e acrescentam normalized_data, correlation_id e erros estruturados. O dossiê
executa somente leituras, tolera seções indisponíveis e registra toda a cadeia com o mesmo ID de
correlação.
O catálogo diferencia seis classes de risco: read, sensitive_read,
external_side_effect, reversible_write, destructive e privileged. Operações avançadas sem
schema validado ficam bloqueadas por padrão. Leitura de alvos sensíveis como .env, .my.cnf,
wp-config.php e config.php também é negada por padrão.
Clientes MCP remotos usam https://mcp-reseller.semeiontech.com/mcp. Clientes que aceitam apenas
stdio executam reseller-mcp-bridge, que usa mcp-remote sem expor o bearer token no argv.
reseller_overview, accounts_list, account_resolve, account_inspect.account_dossier, account_healthcheck.capabilities_search, capability_describe, capability_check.query_execute, action_prepare, action_execute, action_cancel,
action_approve. Inclui as capabilities database.query_readonly,
database.transaction_execute e workflow.database_migration_apply para acesso direto e
auditado ao MySQL das contas, substituindo o antigo improviso de publicar PHP temporário.audit_search, job_get, observability_snapshot.O catálogo completo contém todas as operações anunciadas pelo servidor, porém operações não curadas ficam restritas a administradores; funções de token, sessão, access hash e chamadas com senha são bloqueadas pelo harness. Mesmo para administradores, capacidades avançadas sem schema não são executáveis até serem curadas ou a proteção ser explicitamente desativada.
account_resolve quando o identificador não for o username canônico.account_dossier para uma visão completa ou account_healthcheck para achados priorizados.capability_check antes da chamada.query_execute apenas para leituras; qualquer escrita passa pelo fluxo prepare/execute.Consulte contratos e segurança e a decisão sobre a evolução do harness. Para trabalhar nessa evolução, siga o guia incremental para iniciantes.
Requer Python 3.12 e uv.
uv sync --extra dev
uv run python scripts/capture_live_catalog.py
cp .env.example .env
uv run reseller-mcp-admin users create admin --role admin --scope '*'
uv run reseller-mcp-admin tokens issue admin codex
uv run reseller-mcp
reseller-mcp-admin users list
reseller-mcp-admin users create ana --role operator --scope acctalpha --scope acctbeta
reseller-mcp-admin users set-scopes ana --scope acctalpha
reseller-mcp-admin users set-active ana false
reseller-mcp-admin tokens issue ana claude-desktop
reseller-mcp-admin tokens list ana
reseller-mcp-admin tokens revoke KEY_ID
O token emitido é mostrado uma única vez. Cada combinação pessoa/cliente deve ter um token distinto, permitindo revogação e rastreabilidade independentes.
O fluxo normal usa GitHub Actions:
main publica uma imagem imutável AMD64/ARM64 no GHCR.production usa um runner dedicado na VPS, valida o container e /healthz e faz rollback
automático em caso de falha.O .env, o banco SQLite e os tokens upstream nunca transitam pelo Actions. Consulte o
guia de CI/CD para configurar o runner dedicado, a proteção de branch e o ambiente
de produção.
Para bootstrap local ou recuperação manual, ainda é possível executar docker compose up -d --build diretamente na VPS. Publique somente o proxy TLS; a porta 8787 permanece vinculada a
127.0.0.1.
Não versionar .env, tokens, access hash, dumps de auditoria ou o banco SQLite.
uv run ruff check .
uv run mypy src/reseller_mcp
uv run pytest -q
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows