Desafio 005: Construa uma Ferramenta Segura no Estilo MCP¶
Cenário¶
A OutdoorGear quer expor uma ferramenta de consulta de status de pedido para agentes por meio de um contrato no estilo MCP. A ferramenta atual vaza e-mails de clientes, aceita argumentos extras e tem um schema incompleto.
Sua tarefa é projetar um contrato local de ferramenta e um caminho de execução seguros antes que a ferramenta seja exposta a qualquer runtime de agente.
Objetivo¶
Corrija starter_mcp_tool.py para que o manifesto da ferramenta seja válido, a validação de argumentos seja rígida, chamadas inválidas sejam bloqueadas, consultas de pedido redijam PII e o validador gere um código de conclusão.
Sua ferramenta final deve:
- Definir um manifesto claro de
get_order_statuscom schema de entrada - Aceitar apenas
order_id - Rejeitar ferramentas desconhecidas e argumentos extras
- Retornar dados seguros de status do pedido sem
customer_email - Reportar métricas de contrato corretamente
Arquivos Iniciais¶
Salve estes arquivos em uma pasta chamada challenge-005/:
| Arquivo | Finalidade | Download |
|---|---|---|
orders.json |
Pedidos mock da OutdoorGear | Download |
tool_requests.json |
Chamadas de ferramenta válidas e inválidas | Download |
starter_mcp_tool.py |
Implementação quebrada de ferramenta estilo MCP | Download |
test_mcp_tool.py |
Testes de aceite | Download |
validate_mcp_tool.py |
Gera o código final de conclusão | Download |
Briefing do Desafio¶
Você recebe pedidos mock, chamadas de ferramenta válidas e inválidas e uma implementação quebrada. Não há walkthrough: decida como descrever a ferramenta, validar argumentos, despachar execução e redigir campos sensíveis.
Restrições¶
- Use apenas a biblioteca padrão do Python em
starter_mcp_tool.py. - Não exponha
customer_emailnos resultados da ferramenta. - Não aceite argumentos extras.
- Não execute ferramentas desconhecidas.
- Preserve os nomes públicos das funções usados pelos testes.
Critérios de Aceite¶
Sua solução está completa quando:
python -m pytest test_mcp_tool.pypassa- O manifesto inclui um
inputSchemaválido - Apenas
order_idé aceito como entrada - Ferramentas desconhecidas e argumentos extras com PII são bloqueados
- Chamadas bem-sucedidas retornam
deliveredeprocessing - Resultados da ferramenta são redigidos
Validação¶
Quando sua implementação estiver pronta, execute:
Digite o código de conclusão impresso por validate_mcp_tool.py:
Dicas¶
Dica 1 — O schema é uma fronteira de segurança
Um schema frouxo convida agentes a enviar campos que a ferramenta nunca deveria receber.
Dica 2 — Redação pertence perto da ferramenta
Não dependa do agente para esconder campos sensíveis depois que a ferramenta os retorna.
Dica 3 — Falhe fechado
Ferramentas desconhecidas, campos obrigatórios ausentes e argumentos extras devem gerar erro.
Rubrica¶
| Área | Pontos | Como fica bom |
|---|---|---|
| Contrato do manifesto | 25 | Nome, descrição, schema e campos obrigatórios claros |
| Validação de argumentos | 25 | Campos ausentes e extras são rejeitados |
| Execução segura | 25 | Status correto do pedido com PII redigida |
| Tratamento de erros | 15 | Chamadas desconhecidas ou inválidas falham fechadas |
| Simplicidade | 10 | Código de ferramenta pequeno e determinístico |