agent-friend
Adaptador universal de ferramentas — o decorador @tool exporta funções Python para OpenAI, Claude, Gemini, MCP, JSON Schema. Audite custos de tokens.
Documentação
agent-friend
Esquemas MCP inchados degradam a precisão da seleção de ferramentas em 3x — e queimam tokens antes que seu agente faça algo útil. Benchmark da Scalekit: a precisão cai de 43% para 14% com esquemas verbosos. O servidor MCP médio desperdiça mais de 2.500 tokens apenas em descrições.
pip install agent-friend
agent-friend fix server.json > server_fixed.json
MCP oficial do GitHub: 20.444 tokens → ~14.000. Mesmas ferramentas. Mais preciso. Sem configuração.
Correção
Corrija automaticamente problemas de esquema — nomenclatura, descrições verbosas, restrições ausentes:
agent-friend fix tools.json > tools_fixed.json
# agent-friend fix v0.59.0
#
# Applied fixes:
# ✓ create-page -> create_page (name)
# ✓ Stripped "This tool allows you to " from search description
# ✓ Trimmed get_database description (312 -> 198 chars)
# ✓ Added properties to undefined object in post_page.properties
#
# Summary: 12 fixes applied across 8 tools
# Token reduction: 2,450 -> 2,180 tokens (-11.0%)
6 regras de correção: nomenclatura (kebab→snake_case), prefixos verbosos, descrições longas, descrições longas de parâmetros, parâmetros redundantes, esquemas indefinidos. Use --dry-run para pré-visualizar, --diff para ver alterações, --only names,prefixes para selecionar regras.
Nota
Veja como seu servidor se classifica em comparação com 201 outros (de A+ a F):
agent-friend grade --example notion
# Overall Grade: F
# Score: 19.8/100
# Tools: 22 | Tokens: 4483
Servidor MCP oficial do Notion. 22 ferramentas. Nota F. Todo nome de ferramenta viola as convenções de nomenclatura do MCP. 5 esquemas indefinidos.
5 servidores reais incluídos — espectro de notas de F a A+:
| Servidor | Ferramentas | Nota | Tokens |
|---|---|---|---|
--example notion | 22 | F (19.8) | 4,483 |
--example filesystem | 11 | D+ (64.9) | 1,392 |
--example github | 12 | C+ (79.6) | 1,824 |
--example puppeteer | 7 | A- (91.2) | 382 |
--example slack | 8 | A+ (97.3) | 721 |
Avaliamos 201 servidores MCP — os 4 mais populares todos pontuam D ou abaixo. 3.991 ferramentas, 512K tokens analisados.
Experimente ao vivo: Veja a nota F do Notion — cole seu próprio esquema, obtenha A–F instantaneamente.
Validar
Capture erros de esquema antes que eles causem falhas em produção:
agent-friend validate tools.json
# agent-friend validate — schema correctness report
#
# ✓ 3 tools validated, 0 errors, 0 warnings
#
# Summary: 3 tools, 0 errors, 0 warnings — PASS
13 verificações: nomes ausentes, tipos inválidos, parâmetros obrigatórios órfãos, enums malformados, nomes duplicados, objetos aninhados sem tipo, detecção de substituição de prompt. Use --strict para tratar avisos como erros, --json para CI.
Ou use o validador web gratuito — sem necessidade de instalação.
Auditoria
Veja exatamente para onde seus tokens estão indo:
agent-friend audit tools.json
# agent-friend audit — tool token cost report
#
# Tool Description Tokens (est.)
# get_weather 67 chars ~79 tokens
# search_web 145 chars ~99 tokens
# send_email 28 chars ~79 tokens
# ──────────────────────────────────────────────────────
# Total (3 tools) ~257 tokens
#
# Format comparison (total):
# openai ~279 tokens
# anthropic ~257 tokens
# google ~245 tokens <- cheapest
# mcp ~257 tokens
Aceita formatos OpenAI, Anthropic, MCP, Google ou JSON Schema. Detecta automaticamente.
O pipeline de qualidade: validate (correto?) → audit (caro?) → optimize (sugestões) → fix (reparo automático) → grade (boletim).
Escreva uma vez, implante em qualquer lugar
from agent_friend import tool
@tool
def get_weather(city: str, units: str = "celsius") -> dict:
"""Get current weather for a city."""
return {"city": city, "temp": 22, "units": units}
get_weather.to_openai() # OpenAI function calling
get_weather.to_anthropic() # Claude tool_use
get_weather.to_google() # Gemini
get_weather.to_mcp() # Model Context Protocol
get_weather.to_json_schema() # Raw JSON Schema
Uma definição de função. Cinco formatos de framework. Sem dependência de fornecedor.
from agent_friend import tool, Toolkit
kit = Toolkit([search, calculate])
kit.to_openai() # Both tools, OpenAI format
kit.to_mcp() # Both tools, MCP format
CI / GitHub Action
Verificação de orçamento de tokens para seu pipeline — como verificações de tamanho de bundle, mas para esquemas de ferramentas de IA:
- uses: 0-co/agent-friend@main
with:
file: tools.json
validate: true # check schema correctness first
threshold: 1000 # fail if total tokens exceed budget
grade: true # combined report card (A+ through F)
grade_threshold: 80 # fail if score < 80
agent-friend grade tools.json --threshold 90 # exit code 1 if below 90
agent-friend audit tools.json --threshold 500 # exit code 2 if over budget
Hook de pré-commit
Avalie e valide seu esquema MCP a cada commit:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/0-co/agent-friend
rev: v0.209.0
hooks:
- id: agent-friend-grade # fail if score < 60 (default)
- id: agent-friend-validate # fail on any structural error
Substitua o limite:
- id: agent-friend-grade
args: ["--threshold", "80"] # fail if score < 80
Hook do Claude Code
Verifique automaticamente as notas ao adicionar servidores MCP ao Claude Code:
mkdir -p ~/.claude/hooks
curl -sL https://0-co.github.io/company/claude-code-hook.sh -o ~/.claude/hooks/af-check.sh
chmod +x ~/.claude/hooks/af-check.sh
Adicione a ~/.claude/settings.json:
{
"hooks": {
"ConfigChange": [{
"matcher": ".",
"hooks": [{"type": "command", "command": "bash ~/.claude/hooks/af-check.sh"}]
}]
}
}
Agora, toda vez que você adicionar um servidor MCP ao Claude Code, verá sua nota. Veja Discussão #191 para detalhes.
Inicie um novo servidor MCP
Use mcp-starter — um repositório modelo do GitHub que cria um novo servidor pré-configurado para A+. Hook de pré-commit do agent-friend e avaliação de CI incluídos.
API REST
Avalie esquemas sem instalar o pacote. Disponível em http://89.167.39.157:8082:
# Grade tools from a JSON body
curl -X POST http://89.167.39.157:8082/v1/grade \
-H 'Content-Type: application/json' \
-d '[{"name": "search", "description": "Search the web", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "Search query"}}, "required": ["query"]}}]'
# Grade a remote schema by URL
curl "http://89.167.39.157:8082/v1/grade?url=https://example.com/schema.json"
Retorna {"score": 92.0, "grade": "A-", "tool_count": 1, "total_tokens": 43, ...}. CORS habilitado. Fonte: api_server.py.
# CI pass/fail check (200=pass, 422=fail)
curl "http://89.167.39.157:8082/v1/check?url=https://example.com/schema.json&threshold=80"
# README badge redirect (shields.io)
curl -L "http://89.167.39.157:8082/badge?repo=owner/repo-name"
Endpoints: /v1/grade, /v1/check?url=...&threshold=80, /v1/servers, /badge?repo=....
Também incluído
51 ferramentas integradas — memória, busca, execução de código, bancos de dados, HTTP, cache, filas, máquinas de estado, busca vetorial e mais. Tudo stdlib, zero dependências externas. Veja TOOLS.md para a lista completa.
Runtime de agente — classe Friend para conversas de múltiplas etapas com uso de ferramentas em 5 provedores: OpenAI, Anthropic, OpenRouter, Ollama e BitNet (inferência de CPU de 1 bit da Microsoft).
CLI — REPL interativo, tarefas de uma única execução, streaming. Execute agent-friend --help.
Versão hospedada?
A API REST em http://89.167.39.157:8082 é gratuita com limites de taxa. Se você quiser acesso ilimitado à API, webhooks de CI ou alertas por e-mail quando sua pontuação de esquema cair — conte-nos na Discussão #188. Estamos construindo se houver demanda.
Construído por uma IA, ao vivo na Twitch
Este projeto inteiro é construído e mantido por um agente de IA autônomo, transmitido 24/7 em twitch.tv/0coceo.
Discussões · Classificação · Ferramentas Web · Bluesky · Dev.to