
Zero Dependências, 250KB, 486 Testes: O que Aprendi Construindo um Cliente MCP
Zero Dependencies, 250KB, 486 Tests: O que Aprendi Construindo um Cliente MCP
Isso não é uma apresentação de produto. É um diário de engenharia. Se você quer a apresentação, o README está aqui. Isso é sobre o custo de zero.
A configuração
Seis semanas atrás, comecei a construir mcptoon — uma ferramenta CLI que fica entre agentes de IA (Claude Code, Cursor, Codex) e servidores MCP. O problema que ela resolve: esquemas de ferramentas MCP são injetados na sua janela de contexto como JSON. 255 ferramentas = ~91K tokens de chaves, colchetes, aspas e vírgulas de JSON — antes de qualquer trabalho real acontecer.
mcptoon mantém esquemas fora do contexto. O agente executa comandos de shell. Apenas o resultado compacto entra no contexto.
Mas nada disso é sobre o que quero falar.
Quero falar sobre a decisão que moldou tudo: zero dependências.
# pyproject.toml
dependencies = []
Não "dependências mínimas." Não "poucas dependências." Zero.
Por que zero?
O gatilho foi o incidente de segurança uv. Uma dependência transitiva em uma ferramenta Python popular teve uma vulnerabilidade na cadeia de suprimentos. Milhares de projetos foram afetados. Não porque fizeram algo errado — porque alguém a montante fez algo errado.
Olhei para meu próprio histórico de pip install. Quantos pacotes eu instalei no último ano? Centenas. Cada um puxando sua própria árvore de dependências. Quantas dessas dependências eu auditei? Zero.
Então, quando comecei o mcptoon, fiz uma regra: sem importações de terceiros. Apenas a biblioteca padrão do Python.
Isso parecia razoável em teoria. Na prática, significava que eu estava prestes a criar muitas coisas do zero.
O custo: O que eu tive que construir eu mesmo
Sem requests → escrever manualmente um cliente HTTP
A biblioteca padrão tem http.client e urllib. Eles funcionam. Mas são verbosos. Aqui está como uma solicitação POST se parece com urllib:
import json, urllib.request
def http_post(url, data, headers=None):
body = json.dumps(data).encode("utf-8")
req = urllib.request.Request(
url, data=body,
headers={"Content-Type": "application/json", **(headers or {})}
)
with urllib.request.urlopen(req, timeout=30) as resp:
return json.loads(resp.read().decode("utf-8"))
Isso são 8 linhas. Com requests, seria 1:
import requests
resp = requests.post(url, json=data, headers=headers, timeout=30)
Custo: ~200 linhas de encanamento HTTP (streaming SSE, tratamento de erros, lógica de repetição, autenticação). Com requests, talvez 30 linhas.
Valeu a pena? Para a análise de SSE (Server-Sent Events) — sim, aprendi como o protocolo realmente funciona. Para HTTP básico — não, foi apenas encanamento.
Sem extensões click ou argparse → escrever manualmente a análise de CLI
A biblioteca padrão do Python argparse é... boa. Mas click é muito mais agradável. Decoradores, subcomandos, contexto, geração de texto de ajuda. Com argparse, acabei com uma função de despacho de CLI de 400 linhas:
def main():
parser = argparse.ArgumentParser(prog="mcptoon")
sub = parser.add_subparsers(dest="command")
# ... 15 subcomandos, cada um com seus próprios args ...
add_cmd = sub.add_parser("add")
add_cmd.add_argument("name")
add_cmd.A construção de ferramentas com zero dependências pode impactar a segurança e a eficiência de sistemas que interagem com agentes de IA. Empresas brasileiras devem considerar essa abordagem para mitigar riscos de segurança em suas aplicações web.
Noticias relacionadas
Servidor MCP 1.1.0 da endoflife.ai: Exposição KEV, verificações SBOM e dispositivos de borda para agentes de IA
O servidor MCP da endoflife.ai agora possui dez ferramentas de leitura. Novas funcionalidades incluem exposição a vulnerabilidades conhecidas e status de dispositivos de borda, essenciais para a segurança de versões de software.

O que os agentes de IA realmente veem ao buscar seu Ator Apify
O artigo explora como os agentes de IA interagem com o servidor MCP da Apify, destacando a importância da descrição e otimização dos Ators para serem encontrados. Inclui uma análise de como os resultados de busca diferem entre humanos e agentes.
Como o Protocolo de Contexto do Modelo (MCP) muda para sempre o lançamento de recursos em SaaS
O Protocolo de Contexto do Modelo (MCP) é mais do que leitura de dados; sua aplicação mais poderosa é a orquestração de aplicativos em tempo de execução, permitindo que agentes de IA gerenciem anúncios e guias de onboarding sem código efêmero.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.