docs/mcp-gate-c-applicability-decision-20261011.md
Rama main · réplica de lectura del repositorio original.
# Gate C 2026-07-28: decisao de aplicabilidade (proposta ao auditor independente)
**Escopo:** Community publica, um cliente MCP compativel por computador Linux Scoped. Nao se aplica ao cliente MCP, nem a um authorization server implementado pelo Portico. O Broker, e nao o modelo de IA, decide acesso. Este documento nao aprova o release.
## Fontes normativas imutaveis
- https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http
- https://modelcontextprotocol.io/specification/2026-07-28/server/tools
- https://modelcontextprotocol.io/specification/2026-07-28/server/utilities/logging
- https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization
- https://github.com/modelcontextprotocol/conformance/blob/c37eec888e1c6ff140af79987a40008548b7cc5f/requirements/2026-07-28.yaml
## Analise estrita por funcionalidade realmente anunciada
| Controle | Aplicabilidade | Prova ou decisao | Risco residual |
| --- | --- | --- | --- |
| Base: JSON-RPC, request _meta, versao e headers | MUST | Handler normal, workflow de perfil e negative regressions Go | Testes de envelope malformado e interacoes incomuns continuam PARCIAIS |
| Streamable HTTP POST; response JSON ou SSE | MUST | O servidor pode escolher JSON ou SSE por chamada. Community usa JSONResponse=true. Nao implementar SSE inventado para passar em teste com esse nome | Quando algum caminho real devolver SSE, testar framing, X-Accel-Buffering e cancelamento desse caminho |
| Cancelamento | MUST onde houver fluxo em curso | Teste real HTTP request context -> Executor, fail se desconexao nao cancela | Cancelamento de trabalho remoto Broker que ja executa exige politica e testes especificos |
| tools/list e tools/call | MUST do perfil oferecido | Catálogo real, metadata e schema 2020-12 de cada item resolvidos sem baixar refs, ordenacao estavel e structuredContent do system.info | Composicao/condicionais arbitrarias e saidas de todas as ferramentas ainda exigem avaliacao |
| inputSchema | MUST do perfil oferecido | Root object obrigatorio, dialect JSON Schema 2020-12, refs locais e Resolve testados | Nao declarar prova de validacao exaustiva de todas combinacoes |
| outputSchema | Condicional | Se existir, verificar schema e structuredContent correspondente. Root de output pode ser de qualquer tipo em 2026 | Amostras de todas as ferramentas ainda nao executadas em Broker |
| MCP logging | Opcional e deprecated | Community nao gera notifications/message para clientes; flag `logging` removida da publicidade | Auditoria append-only do Broker e logs de infraestrutura permanecem obrigacoes do produto, nao da feature de logging MCP |
| Legacy logging/setLevel | Nao aplicavel a 2026-07-28 | Controle C31 anterior exigia metodo obsoleto; em 2026 a negociacao e por `_meta.io.modelcontextprotocol/logLevel` quando logging e usado | Nao reintroduzir metodo antigo nem afirmar teste sobre ele |
| completion/complete | Opcional, nao anunciado | Resposta 404 + JSON-RPC -32601 para metodo indisponivel e correta | Runner congelado inclui cenario; FAIL bruto permanece e nao prova descumprimento universal |
| MRTR InputRequiredResult | Opcional por ferramenta | Ferramentas MAY retornar input_required, apenas quando cliente suporta os input methods. Approvals HTTPS do operador nao sao permissoes automaticas do cliente | Extensao/capacidades anunciadas precisam ser revisadas contra testes de assinatura, input state, repeticao, deny/revoke e client support |
| subscriptions/listen | Condicional | Produto oferece listas estaticas sem listChanged. Nao anunciar eventos que nao emite | Se houver stream listen anunciado, provar encerramento e isolamento |
| OAuth resource server | MUST no deployment integrado | JWT/introspection, 401 invalid token, 403 insufficient scope, Bearer challenge metadata e TLS fixture com CA validada | HTTPS/introspection real atras do Docker/Traefik e rollback RC7 em clone de destino nao provados |
## Evidencias negativas adicionais do Gateway normal
- `internal/gateway/mcp_gate_c_malformed_jsonrpc_test.go`: POSTs com JSON inválido, versionamento incorreto, método ausente, parâmetros e IDs inválidos retornam erro estruturado antes do Executor. Erros de argumentos de ferramentas podem corretamente retornar `tools/call` com `isError: true`, desde que nenhuma ação alcance o Broker.
- `internal/gateway/mcp_jsonrpc_shape.go`: guard de estrutura JSON-RPC após autenticação e limites de concorrência/rate-limit, antes da SDK. Não altera o catálogo e não concede autoridade. Limite de leitura igual a 1 MiB do SDK.
- `internal/gateway/mcp_gate_c_mrtr_navigation_test.go`: verifica HMAC, expiração, sujeito e recurso; a aceitação nativa não concede acesso, somente consulta `permissions.approval_status`.
- Esta cobertura permanece **PARCIAL**: interpretação de todo SHOULD da especificação, todos os tipos de conteúdo, interações de MRTR com clientes reais e rollback de operações Broker em andamento não foram certificados.
## Regras de provas e aceites
1. Separar test suite oficial congelada (resultado **literal**) da prova de requisitos **aplicaveis** do Gateway normal. Nao alterar checks.json, nao criar test_* no runtime e nao mascarar falsos positivos.
2. O resultado anterior da suite no Gateway distribuivel foi 8 PASS, 2 FAIL, 3 SKIPPED, 24 NOT_TESTED; fixture 35/1/1/0. Ambos release_gate_passed=false. Os dois FAIL nominais sao completion opcional nao anunciada e MRTR multi-round dependente de fixture sintética. Nova CI deve preservar a mesma distincao.
3. Gate C nao fecha com este documento. Exige parecer independente no SHA de staging congelado, cobertura dos MUST aplicaveis, declaracao dos SHOULD e riscos residuais. A prova TLS/CA/upgrade/rollback numa topologia equivalente a VPS real pode ser condicionante de liberacao, mas nunca e substituida por mock CI.
4. Gate E e separado: login ChatGPT, Central HTTPS, operador real, negacao, revogacao e retomada nao se tornam validos por teste Go.
5. Integrar alteracoes apenas em staging com CI verde; main, VPS, DNS, releases e seguranca de producao permanecem intactos ate autorizacao explicita.
## Inventario mecanico
Ver docs/mcp-gate-c-normative-controls.json e tests/scripts/test_mcp_gate_c_normative_controls.py. Status LAB_PASS significa cobertura focal de laboratorio, nao certificacao universal.