CURSOS / TECNOLOGIA / CLAUDE AI NA PRÁTICA (ETAPA 7 DE 7 · FINAL)
← Voltar aos cursos
Etapa 7 de 7 · Final · Desenvolvimento e API

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.

Ilustração editorial representando a arquitetura da API Anthropic, Tool Use, Computer Use e pontes do Model Context Protocol
6 Oficinas CompletasMessages API, Caching/Batch, Tool Use, Computer Use, Agent SDK e MCP.
API Real IntegradaConsole interativo com fetch() real em REST APIs públicas + modo chave Anthropic.
Gerador de CódigoTemplates prontos em Python para Streaming, Tool Use, Computer Use, Agent SDK e FastMCP.
Percurso completo em 7 etapas · Claude AI Bible (Stephen Clear, 2026)

Trilha de formação: Dominando o ecossistema Claude

Você está na Etapa 7 (Final): Desenvolvimento e API. Navegue entre os sete arquivos dedicados do curso abaixo.

Percurso da Etapa 7 (Desenvolvimento e API)

Capítulos 16, 17, 18, 19 e Apêndice D
Diagrama ilustrativo do ciclo de Tool Use, Computer Use e conexão universal via Model Context Protocol
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)
Salvo automaticamente neste navegador.
Oficina 03 / 06 · Capítulo 19

Tool Use: Negociação Estruturada, Chamadas Paralelas & Erros

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:

  1. Você envia a lista tools com nome, descrição detalhada e input_schema (JSON Schema).
  2. 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.
  3. O seu código executa a função real (consulta SQL, chamada REST, cálculo) — você está sempre no comando do que roda.
  4. 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
import base64
import anthropic

client = anthropic.Anthropic()
img_b64 = base64.standard_b64encode(open("nota_fiscal.png", "rb").read()).decode()

resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=600,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "image",
                "source": {"type": "base64", "media_type": "image/png", "data": img_b64}
            },
            {
                "type": "text",
                "text": (
                    "Extraia numero_nota, data_emissao, cnpj_emissor e valor_total. "
                    "Retorne exclusivamente um objeto JSON válido; se algum campo estiver ilegível, use null."
                )
            }
        ]
    }]
)
print(resp.content[0].text)
Salvo automaticamente neste navegador.
Oficina 05 / 06 · Capítulo 18

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
// 1. Trecho do claude_desktop_config.json (Apêndice D)
{
  "mcpServers": {
    "postgres-leitura": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://leitor_ro:senha@localhost:5432/erp_db"]
    },
    "diagnostico-interno": {
      "command": "python",
      "args": ["/caminho/para/servidor_mcp.py"]
    }
  }
}

# 2. servidor_mcp.py — Servidor MCP customizado em Python (FastMCP)
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("diagnostico-interno")

@mcp.tool()
def verificar_fila_eventos(empresa_id: int) -> str:
    """Retorna a contagem de eventos pendentes na fila (somente leitura)."""
    return f"Empresa {empresa_id}: 0 erros críticos, 3 eventos aguardando processamento."

if __name__ == "__main__":
    mcp.run()
Salvo automaticamente neste navegador.
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.

Formato: MOEDA_ORIGEM,MOEDA_DESTINO,VALOR (ex.: USD,BRL,150)
Sem chave: executa a API pública real e sintetiza o turno final.
Passo 1 · Bloco tool_use solicitado pelo Claude

          
Passo 2 · Retorno HTTP Real (fetch ao vivo)

          
Passo 3 · Bloco tool_result devolvido à API

          
Resposta Final Consolidada (Turno 2 do Assistente)
Clique em "Executar Ciclo com API Real" para disparar a requisição HTTP ao vivo e inspecionar os três estágios do protocolo de Tool Use.
Laboratório de Código · 5 Padrões de Produção

Gerador de Esqueleto Python (Messages API, Tool Use, Computer Use, Agent SDK & MCP)

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.

← Voltar ao Catálogo de Cursos