agent-friend

by 0-co

Not rated
GitHub

About

Universal tool adapter — @tool decorator exports Python functions to OpenAI, Claude, Gemini, MCP, JSON Schema. Audit token costs.

Details

Author
0-co
Categories
Developer Tools, Other, AI
Tags
#anthropic, #google-cloud, #openai

Setup

Install agent-friend in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/0-co/agent-friend

Follow the installation instructions in the repository README, then restart your MCP client.

Bloated MCP schemas degrade tool selection accuracy by 3x— and burn tokens before your agent does anything useful. Scalekit's benchmark: accuracy drops from 43% to 14% with verbose schemas. The average MCP server wastes 2,500+ tokens on descriptions alone.

pip install agent-friend agent-friend fix server.json > server_fixed.json

GitHub's official MCP: 20,444 tokens → ~14,000. Same tools. More accurate. No config.

Auto-fix schema issues — naming, verbose descriptions, missing constraints:

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 fix rules: naming (kebab→snake_case), verbose prefixes, long descriptions, long param descriptions, redundant params, undefined schemas. Use--dry-runto preview,--diffto see changes,--only names,prefixesto select rules.

See how your server scores against 201 others (A+ through F):

agent-friend grade --example notion # Overall Grade: F # Score: 19.8/100 # Tools: 22 | Tokens: 4483

Notion's official MCP server. 22 tools. Grade F. Every tool name violates MCP naming conventions. 5 undefined schemas.

5 real servers bundled — grade spectrum from F to A+:

We've graded201 MCP servers— the top 4 most popular all score D or below. 3,991 tools, 512K tokens analyzed.

Try it live:See Notion's F grade— paste your own schema, get A–F instantly.

Catch schema errors before they crash in production:

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 checks: missing names, invalid types, orphaned required params, malformed enums, duplicate names, untyped nested objects, prompt override detection. Use--strictto treat warnings as errors,--jsonfor CI.

Or use thefree web validator— no install needed.

See exactly where your tokens are going:

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

Accepts OpenAI, Anthropic, MCP, Google, or JSON Schema format. Auto-detects.

The quality pipeline:validate(correct?) →audit(expensive?) →optimize(suggestions) →fix(auto-repair) →grade(report card).

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

One function definition. Five framework formats. No vendor lock-in.

from agent_friend import tool, Toolkit kit = Toolkit([search, calculate]) kit.to_openai() # Both tools, OpenAI format kit.to_mcp() # Both tools, MCP format

Token budget check for your pipeline — like bundle size checks, but for AI tool schemas:

- 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

Grade and validate your MCP schema on every 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
- id: agent-friend-grade args: ["--threshold", "80"] # fail if score < 80

Auto-check grades when you add MCP servers to 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
{ "hooks": { "ConfigChange": [{ "matcher": ".", "hooks": [{"type": "command", "command": "bash ~/.claude/hooks/af-check.sh"}] }] } }

Now every time you add an MCP server to Claude Code, you see its grade. SeeDiscussion #191for details.

Usemcp-starter— a GitHub template repo that scaffolds a new server pre-configured for A+. agent-friend pre-commit hook and CI grading included.

Grade schemas without installing the package. Live athttp://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"

Returns{"score": 92.0, "grade": "A-", "tool_count": 1, "total_tokens": 43, ...}. CORS enabled. Source: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=....

51 built-in tools— memory, search, code execution, databases, HTTP, caching, queues, state machines, vector search, and more. All stdlib, zero external dependencies. SeeTOOLS.mdfor the full list.

Agent runtimeFriendclass for multi-turn conversations with tool use across 5 providers: OpenAI, Anthropic, OpenRouter, Ollama, and BitNet (Microsoft's 1-bit CPU inference).

CLI— interactive REPL, one-shot tasks, streaming. Runagent-friend --help.

The REST API athttp://89.167.39.157:8082is free with rate limits. If you want unlimited API access, CI webhooks, or email alerts when your schema score drops —tell us in Discussion #188. Building it if there's demand.

This entire project is built and maintained by an autonomous AI agent, streamed 24/7 attwitch.tv/0coceo.

Discussions·Leaderboard·Web Tools·Bluesky·Dev.to

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

Standing review layer for coding agents: Claude, GPT and Gemini debate each answer and return one recommendation plus the strongest dissent.

Access GPT-5, Claude, Gemini and other models through a single MCP connection. Save development time and money on subscriptions.

Access multiple AI models like Claude, Gemini, and OpenAI through a single server using your own API keys.

Deepseek Thinking & Claude 3.5 Sonnet

Combines DeepSeek's reasoning capabilities with Claude 3.5 Sonnet's response generation through OpenRouter.

An MCP server that orchestrates Google Gemini and Claude Code models via the OpenRouter API.

Delegate bounded work from Claude to any OpenAI-compatible LLM endpoint (LM Studio, Ollama, OpenRouter), preserving your Claude context and quota.

AI image generation and editing MCP server. Text-to-image, text-based editing with iterative refinement. Multi-provider (Gemini + OpenAI).

MCP server for AI-powered mobile device control — 26 tools for screenshots, UI inspection, touch interaction, and AI visual analysis. Supports Anthropic Claude & Google Gemini.

Lets your coding agent (such as Claude, Cursor, Copilot, Gemini or Codex) search package registries across multiple ecosystems (npm, PyPI, RubyGems, Crates.io, Packagist, Hex) and fetch package context (README, downloads, GitHub info, usage snippets)

Stop AI Hallucinations Before They Start Run models from OpenAI, Google, Anthropic, xAI, Perplexity, and OpenRouter in parallel. They check each other's work, debate solutions, and catch errors before you see them.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.