# Execution - Rig + rmcp no `sdd-layer`

## Rastreabilidade
- Orquestração: `implementar-no-projeto-o-rig-rmcp-rmcp-para-fortalecer-o-mcp-rust-nativo-rig-como-provider-tool-adapter-opcional`
- Stage: execution
- Origem: solicitação humana para fortalecer o MCP Rust nativo com `rmcp` e adicionar Rig como provider/tool adapter opcional.
- Origem SDD esperada: `04-tasks.md` e `05-refinement.md` não foram materializados; execução direta autorizada pelo pedido humano.
- Context pack: `.sdd/intelligence/context-packs/implementar-no-projeto-o-rig-rmcp-rmcp-para-fortalecer-o-mcp-rust-nativo-rig-como-provider-tool-adapter-opcional/execution.md`
- Code intelligence: CodeGraph (`codegraph_status`, `codegraph_context`, `codegraph_explore`) e leituras focadas.

## Tarefa
Implementar suporte opcional a `rmcp` para fortalecer a superfície MCP Rust nativa e registrar Rig como provider/tool adapter opcional, preservando o caminho padrão provider-neutral e offline do CLI.

## Resumo da implementação
- Adicionadas as features opcionais `mcp-rmcp` e `rig-adapter` no Cargo, com dependências opcionais `rmcp` e `rig-core`.
- O MCP nativo continua em stdio/JSON-RPC manual por padrão, mas agora expõe metadata de runtime adapters por tool e resource read-only.
- `sdd_runtime_adapters` informa `rmcp`, `rig-core`, feature flag, estado compilado, fallback e capabilities.
- `sdd://runtime/adapters` permite ler a mesma metadata como resource MCP.
- O provider `rig` foi registrado como adapter opcional (`kind: rig-adapter`) no registry embutido e nos YAMLs versionados.
- A permissão `mcp__sdd__sdd_runtime_adapters` foi adicionada à superfície Claude.
- O catálogo de capabilities e o README foram atualizados para refletir MCP runtime adapters e Rig.

## Arquivos alterados
- `Cargo.toml`, `Cargo.lock`
- `src/runtime/mcp.rs`
- `src/main.rs`
- `src/domain/providers.rs`
- `tests/cli.rs`
- `sdd.config.yaml`, `sdd.config.example.yaml`
- `.claude/settings.json`
- `AGENTS.md`, `README.md`
- `templates/capability-catalog.yaml`

## Decisões técnicas
- `rmcp` entra atrás da feature `mcp-rmcp`; o caminho padrão permanece sem runtime async obrigatório.
- `rig-core` entra atrás da feature `rig-adapter`; Rig é tratado como adapter de provider/tools, não como provider remoto obrigatório.
- O MCP stdio atual permanece compatível e recebe metadata adicional em vez de trocar de transporte nesta fatia.
- `.mcp.json` e `.cursor/mcp.json` foram gerados localmente via `sdd mcp config --targets all --force` para validação estrita, mas continuam ignorados por conterem paths absolutos do projeto.

## Testes e evidências
- `cargo fmt --check`
- `cargo check`
- `cargo check --features mcp-rmcp,rig-adapter`
- `cargo test -q exposes_runtime_adapter_metadata`
- `cargo test -q builtin_registry_contains_optional_rig_adapter`
- `cargo test -q providers_memory_and_stage_flags_are_offline_and_redacted`
- `cargo test -q --features mcp-rmcp,rig-adapter builds_rmcp_server_info_when_feature_is_enabled`
- `cargo test -q`
- `cargo run -q -- providers list --json`
- `cargo run -q -- mcp serve --root .` com chamada JSON-RPC `sdd_runtime_adapters`
- `cargo run -q -- clients doctor --strict`
- `git diff --check`

### Resultados
- `cargo check`: passou.
- `cargo check --features mcp-rmcp,rig-adapter`: passou compilando 124 crates.
- `cargo test -q`: 390 testes passaram.
- `providers list --json`: mostrou `id: rig`, `kind: rig-adapter` e capability `provider-routing`.
- `sdd_runtime_adapters`: respondeu com adapters `rmcp` e `rig`, ambos `enabled: false` no binário default.
- `clients doctor --strict`: passou após gerar configs MCP locais ignorados.
- `git diff --check`: passou.

## Impactos
- Projetos existentes continuam usando o MCP stdio e providers atuais sem mudar flags.
- Consumers MCP podem descobrir adapters opcionais sem depender de provider/modelo específico.
- O provider `rig` aparece em `providers list/doctor`, mas fica `enabled: false` nos YAMLs versionados até o projeto optar por ele.

## Riscos e pendências
- Implementar execução direta via Rig em uma fatia futura, quando houver contrato de runtime para chamar providers/tools reais sem quebrar o fallback provider-neutral.
- Avaliar migração incremental para transporte rmcp completo caso o projeto aceite adicionar runtime async no caminho ativo.
