Ctrl K
ComunidadGuías…

docs/mcp-gate-c-normative-acceptance.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Gate C: controles normativos e contrato verificável da Community

**Revisão:** MCP 2026-07-28. **Upstream de conformance congelado:** `modelcontextprotocol/conformance@c37eec888e1c6ff140af79987a40008548b7cc5f`. **Produto avaliado:** Gateway Community normal, 1 chat compatível ↔ 1 Linux Scoped, sem ferramentas artificiais `test_*`.

Esta página é um pacote de trabalho para **revisor independente**. **Não é certificação**, não afirma cobertura de cada norma e **não autoriza release**. O inventário verificável de 36 controles está em [mcp-gate-c-normative-controls.json](mcp-gate-c-normative-controls.json). O teste `tests/scripts/test_mcp_gate_c_normative_controls.py` rejeita desvios do inventário, arquivos de evidência inexistentes ou falsificação de `RAW_FAIL`.

## Resultado e significado

| Estado | Interpretação |
| --- | --- |
| `LAB_PASS` | Evidência automatizada focada em ambiente descartável, **não** certificação normativa completa |
| `PARTIAL` | Há implementação ou teste, mas falta uma condição ou cobertura normativa |
| `NOT_PROVEN` | Nenhuma prova direta suficiente do comportamento descrito |
| `NOT_ADVERTISED` | Capacidade opcional/condicional não anunciada, com não aplicabilidade sujeita a revisão |
| `REAL_ENV_PENDING` | Depende de ambiente de destino, identidade do operador ou auditor real |
| `RAW_FAIL` | Resultado bruto upstream, preservado sem waiver |

Os controles cobrem **base JSON-RPC; versão e metadados de cada requisição; HTTP stateless e Origin; headers e Base64; OAuth, introspecção e transportes TLS; autorização Scoped e Broker; ferramentas, schemas e rate limit; recursos, prompts, logging e MRTR; controles de publicação/revisão**. A existência de uma linha não substitui revisão normativa independente de todos os SHOULD/MUST aplicáveis.

## Evidência que pode ser reproduzida sem acessar a VPS

1. **HTTP MCP real sem fixtures sintéticas:** `scripts/mcp_community_profile_probe.py`, `internal/gateway/mcp_transport_compat_test.go`, `internal/gateway/mcp_origin_guard_test.go`, `internal/gateway/mcp_origin_default_port_test.go`, `internal/gateway/tool_rate_limit_test.go`.
2. **OAuth e segurança:** `internal/gateway/introspection_transport_security_test.go`, `tests/integration/mcp_oauth_broker_gate_c_test.go` e `tests/integration/mcp_oauth_external_approval_test.go`.
3. **TLS verificado e Gateway real:** `tests/integration/mcp_https_oauth_broker_contract_test.go`. O teste usa certificado e credenciais **somente de laboratório**: introspecção HTTPS com CA adicionada a processo-filho, Gateway HTTPS, endpoint de resource metadata, 401 challenge, bearer/audience/scope inválidos, Origin 403, leitura negada fora da raiz e leitura permitida na raiz pelo Broker/IPC real. **Não testa a CA, a rota Docker ou o domínio da VPS.**
4. **Runner oficial 37 cenários:** `.github/workflows/block2-mcp-lab-fixture.yml`, `scripts/mcp_conformance_matrix.py`, `scripts/mcp_gate_c_diagnostic.py`. Preservar `checks.json`, runner exit e classificações por SHA. O runner não é um gate de release aprovado.
5. **Gate anti-regressão:** `.github/workflows/mcp-community-profile-gate.yml` obriga testes nomeados a retornar PASS, sem skips. Incluir os novos controles e o TLS E2E antes do aceite deste conjunto.

## Evidência congelada anterior e leitura honesta

No [SHA de staging `b01f4d6`](https://github.com/josemirmoura/mcp-vps-agent-gateway/commit/b01f4d6b49dc47da250ed8253b34011ea7aa8b57), **19/19 verificações de GitHub Actions SUCCESS**. O perfil do Gateway normal executou [16 regressões nomeadas](https://github.com/josemirmoura/mcp-vps-agent-gateway/actions/runs/38169559098), sem skip. O [runner oficial bruto](https://github.com/josemirmoura/mcp-vps-agent-gateway/actions/runs/38169559117) retornou:

- Gateway distribuível normal: **8 PASS / 2 FAIL / 3 SKIPPED / 24 NOT_TESTED**; `release_gate_passed=false`.
- Fixture **exclusiva do laboratório**: **35 PASS / 1 FAIL / 1 SKIPPED / 0 NOT_TESTED**; `release_gate_passed=false`.

A não conformidade da suíte congelada **não** é apagada por testes alternativos. O cenário `completion/complete` exige uma capacidade opcional que o Gateway não anuncia. Vários outros cenários usam ferramentas, recursos e prompts de nome sintético, deliberadamente indisponíveis no produto. Isso **não prova** que o Gateway normal satisfaz todos os requisitos normativos; revisão independente deve avaliar separadamente o perfil anunciado, inclusive resultados e ferramentas reais. Não publicar diagnósticos `test_*` para aumentar o placar.

## Checklist do aceite técnico externo (sem intervenção do proprietário nos testes sintéticos)

- [ ] Fixar SHA único, versão SDK e upstream; repetir matriz, workflow do Gateway real e suite congelada.
- [ ] Conferir os 36 controles **contra texto normativo oficial**, expandir lacunas por MUST/SHOULD aplicável, inspecionar esquemas, logs, headers, SSE, cancelamento e recursos expostos. **Não** usar este inventário como assinatura pré-aprovada.
- [ ] Reproduzir ataques de auditoria A1–A6 e Origin (DNS rebinding + portas implícitas) no binário distribuível. Confirmar que nenhuma ferramenta de fixture aparece no catálogo.
- [ ] Verificar as provas de HTTPS/TLS em processo descartável, identidade OAuth, extração de subject, decisão Broker, revogação e erros fail closed.
- [ ] Analisar em ambiente **isolado** a configuração de destino para introspecção HTTPS, CA, hostname, cadeia TLS, migração de configuração antiga, backup e rollback. Não fazer rollout sem permissão.
- [ ] Registrar as exceções propostas e sua justificativa normativa, sem modificar resultados originais; revisão por pessoa independente do implementador, com decisão assinada e riscos residuais.
- [ ] Validar depois no ChatGPT Web/Android e Central com operador real (issue #65, gate separado). Não afirmar que o teste sintético prova o cliente real.

**GATE C = BLOCKED**, inclusive se a CI do candidato ficar integralmente verde, enquanto houver controles `PARTIAL`, `NOT_PROVEN`, `REAL_ENV_PENDING` relevantes, e até existir parecer normativo independente e critério formal de não aplicabilidade. Gate E (usuário real), licença/assinatura/promoção seguem independentes.

Referências normativas: [protocolo básico](https://modelcontextprotocol.io/specification/2026-07-28/basic); [Streamable HTTP](https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http); [OAuth](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization); [ferramentas](https://modelcontextprotocol.io/specification/2026-07-28/server/tools); [cenários oficiais fixados](https://github.com/modelcontextprotocol/conformance/blob/c37eec888e1c6ff140af79987a40008548b7cc5f/requirements/2026-07-28.yaml).