Desenvolvimento de Software Apoiado por IA — 2026.4

Aula 6
Model Context Protocol: dando ferramentas ao agente

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 8 de outubro de 2026 🕐 20h

O que é o MCP

Um protocolo aberto, sobre JSON-RPC, pelo qual um agente descobre e chama ferramentas oferecidas por outro processo.

Host: Claude Code Modelo JSON-RPC Servidores MCP O sistema real Cliente MCP stdio ru-ufpa cardapio, avaliar Banco do RU Cliente MCP HTTP GitHub create_pull_request… Repositórios e issues Cliente MCP HTTP Spotify search, play… Contas e playlists

Um cliente por servidor. Na aula 2 vimos o M × N virar M + N. Hoje, o que vem junto com isso.

A ideia: a ferramenta se descreve

O que o agente recebe quando pede tools/list:

{
  "name": "cardapio",
  "description": "Retorna o cardápio do RU para uma data (AAAA-MM-DD).
                  Use quando o usuário perguntar o que tem para comer.",
  "inputSchema": {
    "type": "object",
    "properties": { "data": { "type": "string" } },
    "required": ["data"]
  }
}

Implementação: o servidor

from fastmcp import FastMCP
import sqlite3

mcp = FastMCP("ru-ufpa")
db = sqlite3.connect("ru.db")

@mcp.tool
def cardapio(data: str) -> str:
    """Retorna o cardápio do RU para uma data (AAAA-MM-DD).
    Use quando o usuário perguntar o que tem para comer."""
    linhas = db.execute(
        "SELECT refeicao, prato FROM cardapio WHERE data = ?", (data,)
    ).fetchall()
    return "\n".join(f"{r}: {p}" for r, p in linhas) or "Sem cardápio."

@mcp.tool
def avaliar(prato: str, nota: int) -> str:
    """Registra uma nota de 1 a 5 para um prato do cardápio."""
    db.execute("INSERT INTO avaliacao VALUES (?, ?)", (prato, nota))
    db.commit()
    return "Avaliação registrada."

mcp.run()  # stdio por padrão

A docstring vira a description. As anotações de tipo viram o inputSchema.

Implementação: ligando ao agente

# local, por stdio: o host sobe o processo do servidor
claude mcp add ru -- uv run servidor.py

# remoto, por HTTP, com login por OAuth
claude mcp add --transport http github https://api.githubcopilot.com/mcp/

claude mcp list

Ou versionado na raiz do repositório, em .mcp.json:

{
  "mcpServers": {
    "ru": { "command": "uv", "args": ["run", "servidor.py"] }
  }
}

Com o arquivo no git, a dupla inteira usa o mesmo servidor, e quem clona o repositório precisa aprovar antes do primeiro uso.

MCPs conhecidos

GitHub

Lê código, issues e PRs. Abre PR, comenta, faz merge.

Google

Lê Drive, Gmail e Calendar. Cria arquivo, rascunha e-mail, marca reunião.

Spotify

Busca músicas, monta playlists, controla a reprodução.

Slack

Lê canais e threads. Envia mensagens.

Supabase

Consulta o banco, aplica migrações, faz deploy de funções.

Playwright

Abre o navegador, navega, clica, preenche formulários.

Figma

Lê frames, componentes e tokens do design.

Sentry

Lê erros e stack traces de produção.

Para cada um, perguntem: o que ele lê que é meu, o que ele lê que veio de fora, e por onde ele consegue mandar algo para fora.

A superfície de risco: a tríade letal

Dado privado

Repositório privado, caixa de e-mail, banco de produção.

Conteúdo não confiável

Issue pública, e-mail recebido, página web, linha do banco escrita por usuário.

Canal de saída

Abrir PR, mandar mensagem, fazer uma requisição HTTP.

Com as três na mesma sessão, quem escreveu o conteúdo não confiável passa a dar ordens ao agente.

Simon Willison, The lethal trifecta for AI agents, 2025.

Um caso real: o MCP do GitHub

O servidor não tinha bug. O problema está na composição: as três pernas da tríade na mesma sessão.

Invariant Labs, GitHub MCP Exploited: Accessing private repositories via MCP, 2025.

Leitura da semana

O primeiro estudo em larga escala sobre servidores MCP, publicado no TOSEM.

  • Analisa 1.899 servidores de código aberto: saúde do projeto, segurança e manutenibilidade
  • Combina uma ferramenta de análise estática comum com um scanner específico para MCP
  • Mostra que parte das vulnerabilidades só existe em MCP, e escapa das ferramentas de sempre

Leiam antes da próxima aula, com atenção às seções sobre tool poisoning. arxiv.org/abs/2506.13538

Primeira página do artigo Model Context Protocol (MCP) at First Glance, de Hasan et al.

Exercício: um servidor MCP para a AP1

Um servidor MCP ligado à aplicação que vocês construíram na AP1, para o agente operar a aplicação por ele.

Commit no dia. Leitura da semana: MCP at First Glance (arxiv.org/abs/2506.13538). Complementar: MCP, Security Best Practices.