Anthropic API, Claude Agent SDK, Tool Use, Computer Use & MCP
Domine a eletricidade bruta por trás do ecossistema Claude: estruture chamadas stateless na Messages API, reduza custos com Prompt Caching e Batch, implemente Tool Use, Computer Use e Vision, orquestre agentes com o Claude Agent SDK, conecte dados via MCP e teste uma integração de API real ao vivo aqui mesmo na página.
Quando você usa a API, o modelo deixa de ser uma janela fechada: Tool Use dá mãos estruturadas, Vision dá visão, Computer Use opera telas legadas sem API e o MCP padroniza o plugue com bancos e serviços.
Oficina 01 / 06 · Capítulo 17
Anthropic Messages API: A Eletricidade Bruta
Como define Stephen Clear no Capítulo 17, os aplicativos de chat são produtos prontos e opinativos; já a Anthropic Messages API (POST https://api.anthropic.com/v1/messages) é a eletricidade bruta sobre a qual tudo é construído. Ao chamá-la diretamente, você deixa de ser apenas usuário e passa a ser construtor.
Natureza Stateless (Sem Estado): o servidor não guarda memória entre chamadas. Para manter uma conversa de múltiplos turnos, seu código acumula e reenvia a lista messages (alternando user e assistant).
Parâmetros Essenciais:model (ex.: claude-sonnet-4-6 ou claude-haiku-4-5), max_tokens (teto obrigatório de saída), system (instrução de papel/regras no nível superior) e messages.
Cabeçalhos HTTP: toda requisição autentica via x-api-key, declara anthropic-version: 2023-06-01 e envia content-type: application/json.
Python · Chamada completa à Messages API com variável de modelo centralizada
import os
import anthropic
# Boa prática (Cap. 17): centralize o identificador do modelo em um único ponto
DEFAULT_MODEL = os.getenv("CLAUDE_MODEL", "claude-sonnet-4-6")
client = anthropic.Anthropic() # lê ANTHROPIC_API_KEY do ambiente
response = client.messages.create(
model=DEFAULT_MODEL,
max_tokens=600,
temperature=0.2,
system=(
"Você é um engenheiro de suporte nível 3 especialista em PostgreSQL e ERP. "
"Responda em português do Brasil com diagnóstico objetivo e SQL seguro."
),
messages=[
{
"role": "user",
"content": "Uma query em tabela de 8 milhões de linhas ficou lenta após filtro por JSONB. Como investigar e indexar?"
}
]
)
print("Stop reason:", response.stop_reason)
print("Tokens (in/out):", response.usage.input_tokens, response.usage.output_tokens)
print(response.content[0].text)
Dois cintos de segurança obrigatórios antes do primeiro script: nunca coloque sua chave sk-ant-... hardcoded no código-fonte (use variáveis de ambiente ou cofre de segredos) e configure imediatamente um spending cap (limite mensal de gastos em dólares) no console da Anthropic para evitar surpresas com loops acidentais.
Salvo automaticamente neste navegador.
Oficina 02 / 06 · Capítulo 17
Streaming (SSE), Prompt Caching, Batch API & Roteamento de Modelos
O erro financeiro mais comum com IA é rodar todas as tarefas no modelo mais caro, sem cache e de forma síncrona. Na API, quatro alavancas reduzem drasticamente a latência e o custo:
As 4 alavancas de performance e economia na Anthropic API
Recurso
Como Funciona na Prática
Ganho Real em Produção
Streaming (SSE)
Usa client.messages.stream() para entregar cada pedaço de texto (text_stream) via Server-Sent Events assim que é gerado.
Elimina a sensação de tela travada em respostas longas; o primeiro token aparece em menos de 1 segundo.
Prompt Caching
Marca blocos grandes e repetidos (manuais, schemas SQL, regras de negócio) com cache_control: {"type": "ephemeral"}.
Corta até 90% do custo e grande parte da latência de leitura nos turnos seguintes que reutilizam o mesmo prefixo.
Message Batches API
Envia até dezenas de milhares de requisições assíncronas via client.messages.batches.create() para processamento em até 24h.
Reduz o preço por token pela metade em rotinas noturnas (classificação de catálogo, auditoria de documentos, relatórios).
Roteamento Haiku → Sonnet/Opus
Usa um modelo rápido e econômico (claude-haiku-4-5) para classificar/extrair dados simples e só escala para Sonnet ou Opus nos casos complexos.
Mantém qualidade máxima nas decisões difíceis enquanto derruba o custo médio de milhares de chamadas triviais.
Python · Prompt Caching de manual técnico + Streaming em tempo real
import anthropic
client = anthropic.Anthropic()
MANUAL_SISTEMA = open("manual_regras_folha.txt", encoding="utf-8").read()
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=800,
system=[
{
"type": "text",
"text": "Você analisa chamados com base estrita no manual técnico abaixo:\n\n" + MANUAL_SISTEMA,
"cache_control": {"type": "ephemeral"} # reutiliza o prefixo pesado no cache!
}
],
messages=[{"role": "user", "content": "Qual o código de evento para rescisão complementar?"}]
) as stream:
for chunk in stream.text_stream:
print(chunk, end="", flush=True)
Um ponto fundamental do Capítulo 19: o Claude nunca executa código diretamente no seu servidor. Tool Use (ou function calling) é uma negociação estruturada em quatro tempos:
Você envia a lista tools com nome, descrição detalhada e input_schema (JSON Schema).
Quando o Claude precisa consultar ou agir, ele pausa com stop_reason: "tool_use" e devolve um bloco tool_use contendo o id, o name e o objeto input preenchido.
O seu código executa a função real (consulta SQL, chamada REST, cálculo) — você está sempre no comando do que roda.
Você envia uma nova mensagem role: "user" com um bloco tool_result referenciando o mesmo tool_use_id, e o Claude formula a resposta final.
Truque de mestre — Saída JSON Estruturada Garantida: precisa extrair campos limpos de um texto bagunçado sem correr risco de falha no parser? Declare uma ferramenta com o schema desejado e force tool_choice={"type": "tool", "name": "extrair_entidades"}. O modelo é obrigado a devolver um dicionário válido seguindo exatamente as propriedades definidas.
Python · Ciclo completo de Tool Use + Tratamento informativo de erro (is_error: True)
import json
import anthropic
client = anthropic.Anthropic()
tools = [{
"name": "get_exchange_rate",
"description": (
"Consulta a taxa de câmbio comercial atual entre duas moedas ISO (ex.: USD, BRL, EUR, CLP). "
"Use sempre que o usuário pedir conversão de valores. Nunca adivinhe taxas de memória."
),
"input_schema": {
"type": "object",
"properties": {
"from_currency": {"type": "string", "description": "Código ISO de 3 letras, ex.: 'USD'"},
"to_currency": {"type": "string", "description": "Código ISO de 3 letras, ex.: 'BRL'"}
},
"required": ["from_currency", "to_currency"]
}
}]
messages = [{"role": "user", "content": "Quanto custam 180 USD em BRL hoje?"}]
resp = client.messages.create(model="claude-sonnet-4-6", max_tokens=512, tools=tools, messages=messages)
if resp.stop_reason == "tool_use":
messages.append({"role": "assistant", "content": resp.content})
tool_results = []
for block in resp.content:
if block.type == "tool_use":
# Seu código executa a integração real (ou devolve is_error=True explicativo se falhar)
try:
rate = 5.18 # Exemplo: retorno da sua API de câmbio
payload = json.dumps({"pair": f"{block.input['from_currency']}/{block.input['to_currency']}", "rate": rate})
tool_results.append({"type": "tool_result", "tool_use_id": block.id, "content": payload})
except Exception as err:
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"is_error": True,
"content": f"Falha temporária na API de câmbio ({err}). Informe o usuário sem inventar valores."
})
messages.append({"role": "user", "content": tool_results})
final_resp = client.messages.create(model="claude-sonnet-4-6", max_tokens=512, tools=tools, messages=messages)
print(final_resp.content[0].text)
Salvo automaticamente neste navegador.
Oficina 04 / 06 · Capítulo 19
Computer Use & Vision: Olhos, Mouse e Quando Usar
Nem todo software corporativo possui API. Para portais antigos, sistemas legados de despesas ou telas desktop fechadas, o Capítulo 19 apresenta duas capacidades visuais distintas que não devem ser confundidas:
Comparativo prático: Vision vs. Computer Use vs. Tool Use
Capacidade
O Que Faz
Risco / Custo / Velocidade
Regra de Decisão (Cap. 19)
Vision (Visão)
Lê imagens, PDFs escaneados, notas fiscais, gráficos e fotos de quadros brancos enviados em Base64 ou URL.
Baixo risco (ver não é agir), rápido e excelente custo-benefício.
Use sempre que precisar extrair JSON estruturado de documentos visuais ou diagnosticar capturas de tela.
Tool Use
Chama funções e APIs estruturadas definidas por JSON Schema.
Baixa latência, barato, determinístico e auditável.
Primeira opção sempre que existir API ou acesso direto ao banco/serviço.
Computer Use
Observa um screenshot da tela, decide coordenadas (x, y) para clicar, digitar ou rolar, tira novo screenshot e repete.
Mais lento, mais caro (imagens a cada passo) e maior superfície de risco.
Último recurso (apenas quando não existe API). Exige VM/container isolado e aprovação humana no botão final.
Lição das trincheiras (Agência de Viagens em Lisboa — Cap. 19): ao automatizar três portais de fornecedores sem API via Computer Use, um portal confuso tinha os botões "Cancelar" e "Confirmar" lado a lado. O agente clicou no botão errado em uma reserva atípica — e só não cancelou o hotel de um cliente real porque havia um portão obrigatório de aprovação humana antes do submit final. Nunca rode Computer Use sem sandbox e sem confirmação humana em ações irreversíveis.
Python · Vision API extraindo JSON estruturado de uma nota fiscal / fatura
Claude Agent SDK: O Motor do Claude Code nas Suas Mãos
Uma única chamada de API não é um agente. Um agente nasce quando o sistema recebe uma meta, planeja passos, aciona ferramentas, inspeciona o resultado e continua até concluir o trabalho. Em vez de programar esse loop do zero, o Claude Agent SDK entrega o mesmo motor testado em batalha que move o Claude Code:
Loop Gerenciado: controla automaticamente o ciclo raciocinar → chamar ferramenta → ler resultado → decidir próximo passo e a compactação de contexto.
Travas de Segurança (max_iterations e can_run): limita quantas voltas o agente pode dar (evitando loop infinito de custos) e intercepta ferramentas sensíveis para exigir confirmação humana.
Delegação para Subagentes: um agente coordenador divide tarefas grandes entre subagentes especialistas com contextos limpos e isolados.
Python · Padrão de Agente com portão de aprovação (can_run) e teto de iterações
# Padrão arquitetural do Capítulo 18 (confirme a assinatura atual em docs.claude.com)
READ_ONLY_TOOLS = {"consultar_logs", "buscar_documentacao", "listar_chamados"}
def can_run(tool_name: str, args: dict) -> bool:
"""Ferramentas de leitura rodam livremente; escrita/exclusão exige aprovação humana."""
if tool_name in READ_ONLY_TOOLS:
return True
resposta = input(f"[APROVAÇÃO HUMANA] Permitir {tool_name} com args={args}? (s/N): ")
return resposta.strip().lower() == "s"
# Configure sempre max_iterations e observabilidade de eventos (on_event)
agent_config = {
"model": "claude-sonnet-4-6",
"max_iterations": 10,
"permission_gate": can_run
}
Salvo automaticamente neste navegador.
Oficina 06 / 06 · Capítulo 16 & Apêndice D
Model Context Protocol (MCP): O "USB" Universal da IA
Antes do MCP, conectar cada modelo a cada banco de dados, repositório Git ou CRM exigia código de cola exclusivo e incompatível. Como explica o Capítulo 16, o MCP faz pelas integrações de IA o que o padrão USB fez pelos periféricos: você constrói ou instala um Servidor MCP uma única vez, e qualquer Cliente MCP (Claude Desktop, Claude Code, Cowork ou seu próprio agente) passa a conversar com ele.
As 3 primitivas de um Servidor MCP:Resources (dados somente leitura, como arquivos ou schemas), Tools (funções executáveis) e Prompts (templates reutilizáveis).
Configuração padrão (mcpServers): declarada no arquivo JSON do cliente (como claude_desktop_config.json), indicando o comando (npx, uvx, python) e variáveis de ambiente de cada servidor.
Defesa contra Prompt Injection Indireta: um servidor MCP que lê tickets externos, e-mails ou páginas web traz texto de terceiros para dentro da janela do modelo. Sempre aplique o menor privilégio (conexão somente leitura no banco) e trate dados externos como não confiáveis.
JSON + Python · Receita de configuração mcpServers + Servidor FastMCP somente leitura
Integração de API na Prática · Execução Ao Vivo no Navegador
● API REST Real Pronta (fetch ao vivo)
Playground Ao Vivo: Ciclo Tool Use + Integração de API Real
Experimente na prática o ciclo completo do Capítulo 19 aqui mesmo no navegador! Ao clicar em Executar Ciclo com API Real, a página dispara um fetch() HTTPS real para uma API pública ao vivo (Câmbio Frankfurter/ECB, Endereço ViaCEP ou Repositório GitHub de Nigel Poulton/Anthropic), monta os pacotes exatos tool_use e tool_result da Anthropic e — se você informar uma chave sk-ant-... opcional — também envia o resultado ao endpoint oficial api.anthropic.com/v1/messages.
Escolha a arquitetura desejada, defina o modelo e o nome da operação para gerar o código estruturado pronto para colar no seu projeto.
Código Python gerado
Autoavaliação · Etapa 7 (5 Questões)
Verificação rápida de domínio
1. Por que a Messages API exige o envio do array messages acumulado em conversas de vários turnos?
2. O que realmente acontece quando o Claude decide usar uma ferramenta via Tool Use?
3. Segundo o Capítulo 19, quando devemos usar Computer Use (cliques e screenshots) em vez de Tool Use?
4. Qual problema arquitetural o Model Context Protocol (MCP) resolve?
5. Por que devemos definir max_iterations e portões can_run no Claude Agent SDK?
Fechamento da Etapa 7
Checklist prático & Caderno de Estudos
Marque o que você já aplicou na prática e exporte suas anotações em arquivo texto.
0 de 6 concluídos
Formação Concluída · 7 de 7 Etapas
Parabéns por concluir o curso Claude AI na Prática!
Você completou as 7 etapas baseadas em Claude AI Bible: Fundamentos, Engenharia de Prompt, Organização de Projetos, Aplicativos/Artifacts, Automação com Cowork, Ferramentas de Construção (Claude Code/Skills/Plugins) e Desenvolvimento com Anthropic API, Agent SDK, Tool Use, Computer Use e MCP.