Skip to main content
Glama
aserper

RTFD (Read The F*****g Docs)

by aserper

RTFD Logo RTFD (Read The F*****g Docs) MCP Server

Tests GHCR PyPI Supported Python versions License: MIT

GitHub stars GitHub forks

The RTFD (Read The F*****g Docs) MCP Server acts as a bridge between Large Language Models (LLMs) and real-time documentation. It allows coding agents to query package repositories like PyPI, npm, crates.io, GoDocs, DockerHub, GitHub, and Google Cloud Platform (GCP) to retrieve the most up-to-date documentation and context.

This server solves a common problem where LLMs hallucinate APIs or provide outdated code examples because their training data is months or years old. By giving agents access to the actual documentation, RTFD ensures that generated code is accurate and follows current best practices.

⚠️ Security Warning

Security Warning: This MCP server grants agents access to unverified code and content from external sources (GitHub, PyPI, etc.). This introduces significant risks, including indirect prompt injection and the potential for malicious code execution, particularly when operating in autonomous or "YOLO" modes. Use at your own risk. The maintainers assume no responsibility for any damage or security compromises resulting from the use of this tool.

You can mitigate these risks by configuring specific environment variables to restrict functionality. For example, setting RTFD_FETCH=false disables all content fetching tools (allowing only metadata lookups), and VERIFIED_BY_PYPI=true restricts Python package documentation to only PyPI-verified sources. See the Configuration section for more details.

Related MCP server: Context7 MCP

Why use RTFD?

  • Accuracy: Agents can access the latest documentation for libraries, ensuring they use the correct version-specific APIs and avoid deprecated methods.

  • Context Awareness: Instead of just getting a raw text dump, the server extracts key sections like installation instructions, quickstart guides, and API references, giving the agent exactly what it needs.

  • Privacy: Unlike cloud-based documentation services, RTFD runs entirely on your local machine. Your queries are sent DIRECTLY to the source (no servers in the middle, no API keys needed, etc) and the documentation you access never leave your system, ensuring complete privacy and no data collection.

  • Supported Sources: PyPI (Python), npm (JavaScript/TypeScript), crates.io (Rust), GoDocs (Go), Zig docs, DockerHub, GitHub Container Registry (GHCR), GitHub repositories, and Google Cloud Platform (GCP).

Use Cases

RTFD helps in scenarios like:

  • Refactoring old code: Fetch current pandas docs to find deprecated methods and their replacements. Instead of guessing what changed, the LLM reads the actual upgrade guide.

  • Unfamiliar libraries: Integrating a Rust crate you've never seen? Look up the exact version, feature flags, and examples directly from the docs instead of guessing the API from general patterns.

  • Libraries after training cutoff: Using a library released after the LLM's training data ends? Fetch the actual README and code examples from GitHub so the LLM can write correct usage instead of hallucinating APIs.

  • Docker optimization: When optimizing a Dockerfile, inspect the official python:3.11-slim image to see exactly what packages and OS layers are included, rather than making assumptions.

  • Dependency audits: Check PyPI, npm, and crates.io for available updates across all your dependencies. The LLM sees the latest versions and can generate an audit report without manually visiting each registry.

Dependency audit example

Features

  • Documentation Content Fetching: Retrieve actual documentation content (README and key sections) from PyPI, npm, and GitHub rather than just URLs.

  • Smart Section Extraction: Automatically prioritizes and extracts relevant sections such as "Installation", "Usage", and "API Reference" to reduce noise.

  • Format Conversion: Automatically converts reStructuredText and HTML to Markdown for consistent formatting and easier consumption by LLMs.

  • Multi-Source Search: Aggregates results from PyPI, npm, crates.io, GoDocs, Zig docs, DockerHub, GHCR, GitHub, and GCP.

  • GitHub Repository Browsing: Browse repository file trees (list_repo_contents, get_repo_tree) and read source code files (get_file_content) directly.

  • GitHub Packages (GHCR): List packages and get versions for any GitHub user or organization to find the right image tag.

  • PyPI Verification: Optional security feature (VERIFIED_BY_PYPI) to ensure packages are verified by PyPI before fetching documentation.

  • Smart GCP Search: Hybrid search approach combining local service mapping with cloud.google.com search to find documentation for any Google Cloud service.

  • Pluggable Architecture: Easily add new documentation providers by creating a single provider module.

  • Error Resilience: Failures in one provider do not crash the server; the system is designed to degrade gracefully.

Installation

Claude Code Plugin (For Claude Code Users)

Install RTFD as a Claude Code plugin in two steps:

# Step 1: Add the RTFD marketplace
claude plugin marketplace add aserper/RTFD

# Step 2: Install the plugin
claude plugin install rtfd-mcp@rtfd-marketplace

For detailed configuration options and installation alternatives, see PLUGIN.md.

pip install rtfd-mcp

Or with uv:

uv pip install rtfd-mcp

From source

Clone the repository and install:

git clone https://github.com/aserper/RTFD.git
cd RTFD
uv sync --extra dev

Docker (GHCR)

You can run RTFD directly from the GitHub Container Registry without installing Python or dependencies locally.

docker run -i --rm \
  -e GITHUB_AUTH=token \
  -e GITHUB_TOKEN=your_token_here \
  ghcr.io/aserper/rtfd:latest

Available Tags:

  • :latest - Stable release (updates on new releases)

  • :edge - Development build (updates on push to main)

  • :vX.X.X - Specific version tags

Quickstart

RTFD is an MCP server that needs to be configured in your AI agent of choice.

1. Install RTFD

pip install rtfd-mcp
# or with uv:
uv pip install rtfd-mcp

2. Configure your Agent

Claude Code

Simplest Method (Recommended): Use Claude Code plugin marketplace:

# Step 1: Add the RTFD marketplace
claude plugin marketplace add aserper/RTFD

# Step 2: Install the plugin
claude plugin install rtfd-mcp@rtfd-marketplace

Alternative Methods:

Manually add RTFD as an MCP server using the following command to automatically add it to your configuration:

# Using GITHUB_TOKEN for authentication (default)
claude mcp add rtfd -- command="rtfd" --env GITHUB_AUTH=token --env GITHUB_TOKEN=your_token_here --env RTFD_FETCH=true

# Or using GitHub CLI for authentication
claude mcp add rtfd -- command="rtfd" --env GITHUB_AUTH=cli --env RTFD_FETCH=true

# Or using both methods with fallback
claude mcp add rtfd -- command="rtfd" --env GITHUB_AUTH=auto --env GITHUB_TOKEN=your_token_here --env RTFD_FETCH=true

# Or using Docker
claude mcp add rtfd -- type=docker -- image=ghcr.io/aserper/rtfd:latest --env GITHUB_AUTH=token --env GITHUB_TOKEN=your_token_here

Or manually edit ~/.claude.json:

{
  "mcpServers": {
    "rtfd": {
      "command": "rtfd",
      "env": {
        "GITHUB_AUTH": "token", // Options: "token", "cli", "auto", or "disabled"
        "GITHUB_TOKEN": "your_token_here",
        "RTFD_FETCH": "true"
      }
    }
  }
}

Cursor

  1. Go to Settings > Cursor Settings > MCP Servers

  2. Click "Add new MCP server"

  3. Name: rtfd

  4. Type: stdio

  5. Command: rtfd

  6. Add Environment Variable: GITHUB_AUTH = token (Options: token, cli, auto, disabled)

  7. Add Environment Variable: GITHUB_TOKEN = your_token_here

  8. Add Environment Variable: RTFD_FETCH = true

Or manually edit ~/.cursor/mcp.json:

{
  "mcpServers": {
    "rtfd": {
      "command": "rtfd",
      "env": {
        "GITHUB_AUTH": "token", // Options: "token", "cli", "auto", or "disabled"
        "GITHUB_TOKEN": "your_token_here",
        "RTFD_FETCH": "true"
      }
    }
  }
}

Windsurf

  1. Open Settings > Advanced Settings > Model Context Protocol

  2. Edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "rtfd": {
      "command": "rtfd",
      "env": {
        "GITHUB_AUTH": "token", // Options: "token", "cli", "auto", or "disabled"
        "GITHUB_TOKEN": "your_token_here",
        "RTFD_FETCH": "true"
      }
    }
  }
}

Gemini CLI

Edit ~/.gemini/settings.json:

{
  "mcpServers": {
    "rtfd": {
      "command": "rtfd",
      "env": {
        "GITHUB_AUTH": "token", // Options: "token", "cli", "auto", or "disabled"
        "GITHUB_TOKEN": "your_token_here",
        "RTFD_FETCH": "true"
      }
    }
  }
}

Codex

Edit ~/.codex/config.toml:

[mcpServers.rtfd]
command = "rtfd"
[mcpServers.rtfd.env]
GITHUB_AUTH = "token" # Options: "token", "cli", "auto", or "disabled"
GITHUB_TOKEN = "your_token_here"
RTFD_FETCH = "true"

3. Verify

Ask your agent: "What tools do you have available?" or "Search for documentation on pandas".

Testing with MCP Inspector

The MCP Inspector tool allows you to test the RTFD MCP server directly without requiring an IDE or agent integration. This is useful for development and debugging.

Installation

# Install the MCP Inspector tool globally
npm install -g @modelcontextprotocol/inspector

Usage

# Run RTFD with the MCP Inspector
npx @modelcontextprotocol/inspector rtfd

# If you need to pass environment variables
npx @modelcontextprotocol/inspector rtfd -e GITHUB_AUTH=auto

The Inspector tool will open an interactive terminal where you can directly call the RTFD tools and see their responses.

Configuration

RTFD can be configured using the following environment variables:

Variable

Default

Description

GITHUB_AUTH

token

GitHub authentication method: token (use GITHUB_TOKEN only), cli (use gh CLI auth only), auto (try GITHUB_TOKEN, then gh CLI), or disabled (no GitHub access).

GITHUB_TOKEN

None

GitHub API token. Highly recommended to increase rate limits (60 -> 5000 requests/hour).

RTFD_FETCH

true

Enable/disable content fetching tools. Set to false to only allow metadata lookups.

RTFD_CACHE_ENABLED

true

Enable/disable caching. Set to false to disable.

RTFD_CACHE_TTL

604800

Cache time-to-live in seconds (default: 1 week).

RTFD_TRACK_TOKENS

false

Enable/disable token usage statistics in tool response metadata.

RTFD_CHUNK_TOKENS

2000

Maximum tokens per response chunk. Set to 0 to disable chunking. Prevents context overflow from large documentation.

VERIFIED_BY_PYPI

false

If true, only allows fetching documentation for packages verified by PyPI.

Token Optimization with Deferred Loading

RTFD provides 33 tools across multiple providers. By default, all tool descriptions are loaded into context, consuming ~10-15K tokens. You can reduce this to ~2-3K tokens (~80-85% reduction) using the defer_loading feature.

How It Works

defer_loading is a client-side configuration that marks tools as discoverable but not initially loaded. When an LLM needs a deferred tool, it's loaded on-demand. RTFD provides tier classifications and a config generator to help you configure this.

Tool Tier Classification

Tier

Defer

Category

Tools

1

No

Core

search_library_docs, github_repo_search

2

Yes

Frequent

pypi_metadata, npm_metadata, github_code_search, search_docker_images

3

Yes

Regular

fetch_pypi_docs, fetch_npm_docs, fetch_github_readme, list_repo_contents, get_file_content, get_repo_tree, docker_image_metadata, fetch_docker_image_docs, search_crates, crates_metadata

4

Yes

Situational

get_commit_diff, fetch_dockerfile, search_gcp_services, fetch_gcp_service_docs, godocs_metadata, fetch_godocs_docs

5

Yes

Niche

list_github_packages, get_package_versions, zig_docs

6

Yes

Admin

get_cache_info, get_cache_entries, get_next_chunk

Result: 2 tools always loaded, 31 tools deferred (~93% token reduction)

Config Generator CLI

RTFD includes a CLI tool to generate optimized configurations:

# Generate Claude Desktop configuration
rtfd-config --format claude-desktop

# Generate with custom defer tiers (e.g., only defer tiers 4-6)
rtfd-config --format claude-desktop --defer-tiers 4,5,6

# View tier summary
rtfd-config --format summary

# List all tools with tier info
rtfd-config --format tools

Sample Claude Desktop Configuration

{
  "mcpServers": {
    "rtfd": {
      "command": "uvx",
      "args": ["rtfd-mcp"],
      "type": "mcp_toolset",
      "default_config": {"defer_loading": true},
      "configs": {
        "search_library_docs": {"defer_loading": false},
        "github_repo_search": {"defer_loading": false}
      }
    }
  }
}

This configuration keeps the two most essential tools always loaded while deferring everything else.

Programmatic Access

You can access tier information programmatically:

from RTFD.config_generator import (
    get_all_tools_with_tiers,
    get_tools_by_tier,
    generate_claude_desktop_config,
)

# Get all tools with their tier info
tools = get_all_tools_with_tiers()
print(tools["search_library_docs"])  # {'tier': 1, 'defer_recommended': False, 'category': 'search'}

# Get tools organized by tier
by_tier = get_tools_by_tier()
print(by_tier[1])  # ['github_repo_search', 'search_library_docs']

# Generate config programmatically
config = generate_claude_desktop_config(defer_tiers=[3, 4, 5, 6])

Releases & Versioning

For maintainers, see CONTRIBUTING.md for the automated release process.

Available Tools

All tool responses are returned in JSON format.

Aggregator

  • search_library_docs(library, limit=5): Combined lookup across all providers (PyPI, npm, crates.io, GoDocs, GCP, GitHub). Note: Zig and DockerHub are accessed via dedicated tools.

Cache Management

  • get_cache_info(): Get cache statistics including entry count, database size, and location.

  • get_cache_entries(): Get detailed information about all cached items including age, size, and content preview.

Documentation Content Fetching

  • fetch_pypi_docs(package, max_bytes=20480): Fetch Python package documentation from PyPI.

  • fetch_npm_docs(package, max_bytes=20480): Fetch npm package documentation.

  • fetch_godocs_docs(package, max_bytes=20480): Fetch Go package documentation from godocs.io (e.g., 'github.com/gorilla/mux').

  • fetch_gcp_service_docs(service, max_bytes=20480): Fetch Google Cloud Platform service documentation from docs.cloud.google.com (e.g., "storage", "compute", "bigquery").

  • fetch_github_readme(repo, max_bytes=20480): Fetch README from a GitHub repository (format: "owner/repo").

  • fetch_docker_image_docs(image, max_bytes=20480): Fetch Docker image documentation and description from DockerHub (e.g., "nginx", "postgres", "user/image").

  • fetch_dockerfile(image): Fetch the Dockerfile for a Docker image by parsing its description for GitHub links (best-effort).

Metadata Providers

  • pypi_metadata(package): Fetch Python package metadata.

  • npm_metadata(package): Fetch JavaScript package metadata.

  • crates_metadata(crate): Get Rust crate metadata.

  • search_crates(query, limit=5): Search Rust crates.

  • godocs_metadata(package): Retrieve Go package documentation.

  • search_gcp_services(query, limit=5): Search Google Cloud Platform services by name or keyword (e.g., "storage", "compute", "bigquery").

  • zig_docs(query): Search Zig documentation.

  • docker_image_metadata(image): Get DockerHub Docker image metadata (stars, pulls, description, etc.).

  • search_docker_images(query, limit=5): Search for Docker images on DockerHub.

  • github_repo_search(query, limit=5, language="Python"): Search GitHub repositories.

  • github_code_search(query, repo=None, limit=5): Search code on GitHub.

  • list_github_packages(owner, package_type="container"): List GitHub packages for a user or organization.

  • get_package_versions(owner, package_type, package_name): Get versions for a specific GitHub package.

  • list_repo_contents(repo, path=""): List contents of a directory in a GitHub repository (format: "owner/repo").

  • get_file_content(repo, path, max_bytes=102400): Get content of a specific file from a GitHub repository.

  • get_repo_tree(repo, recursive=False, max_items=1000): Get the complete file tree of a GitHub repository.

  • get_commit_diff(repo, base, head): Get the diff between two commits, branches, or tags.

LogScale (Humio) Query Language

  • search_logscale_docs(query, limit=10): Search LogScale query language documentation for syntax topics, functions, and operators.

  • list_logscale_functions(category=None): List LogScale functions by category (aggregate, string, math, regex, etc.), or list all categories when no category is specified.

  • logscale_syntax(topic, max_bytes=20480): Fetch detailed syntax documentation for a topic (filters, operators, fields, regex, time, macros, etc.).

  • logscale_function(function_name, max_bytes=20480): Fetch documentation for a specific LogScale function (e.g., "regex", "splitString", "array:append").

Provider-Specific Notes

GCP (Google Cloud Platform)

  • Service Discovery: Uses a local service mapping (20+ common services), direct search on cloud.google.com (for general queries), and GitHub API search of the googleapis/googleapis repository.

  • Documentation Source: Fetches documentation by scraping docs.cloud.google.com and converting to Markdown.

  • GitHub Authentication: Configure using GITHUB_AUTH environment variable. Options are token (default), cli, auto, or disabled.

  • GitHub Token: Optional but recommended. Without a GITHUB_TOKEN, GitHub API search is limited to 60 requests/hour. With a token, the limit increases to 5,000 requests/hour.

  • Supported Services: Cloud Storage, Compute Engine, BigQuery, Cloud Functions, Cloud Run, Pub/Sub, Firestore, GKE, App Engine, Cloud Vision, Cloud Speech, IAM, Secret Manager, and more.

  • Service Name Formats: Accepts various formats (e.g., "storage", "cloud storage", "Cloud Storage", "kubernetes", "k8s" for GKE).

LogScale (Humio)

  • Documentation Source: Fetches documentation from the LogScale library.

  • Syntax Topics: Comments, filters, operators, fields, user-input, conditional, array, expressions, user-functions, function-calls, time, timezones, relative-time, macros, regex, regex-syntax, regex-flags, and regex-engines.

  • Function Categories: Aggregate, array, comparison, conditional, data-manipulation, event, filter, formatting, geolocation, hash, join, math, network, parsing, regex, security, statistics, string, time-date, and widget.

  • No Authentication Required: All documentation is publicly accessible.

Other Providers

  • Token Counting: Disabled by default. Set RTFD_TRACK_TOKENS=true to see token stats in Claude Code logs.

  • Rate Limiting: The crates.io provider respects the 1 request/second limit.

  • Dependencies: mcp, httpx, beautifulsoup4, markdownify, docutils, tiktoken.

Architecture

  • Entry point: src/RTFD/server.py contains the main search orchestration tool. Provider-specific tools are in src/RTFD/providers/.

  • Framework: Uses mcp.server.fastmcp.FastMCP to declare tools and run the server over stdio.

  • HTTP layer: httpx.AsyncClient with a shared _http_client() factory that applies timeouts, redirects, and user-agent headers.

  • Data model: Responses are plain dicts for easy serialization over MCP.

  • Serialization: Tool responses use serialize_response_with_meta() from utils.py.

  • Token counting: Optional token statistics in the meta field (disabled by default). Enable with RTFD_TRACK_TOKENS=true.

Serialization and Token Counting

Tool responses are handled by serialize_response_with_meta() in utils.py:

  • Token statistics: When RTFD_TRACK_TOKENS=true, the response includes a _meta field with token counts (tokens_json, tokens_sent, bytes_json).

  • Token counting: Uses tiktoken library with cl100k_base encoding (compatible with Claude models).

  • Zero-cost metadata: Token statistics appear in the _meta field of CallToolResult, which is visible in Claude Code's special metadata logs but NOT sent to the LLM, costing 0 tokens.

Token-Efficient Tool Descriptions

RTFD uses a compact, structured format for MCP tool descriptions to minimize token consumption while preserving semantic clarity. With 29 tools exposed to LLMs, verbose descriptions would consume ~6,000+ tokens per context load. The optimized format reduces this to ~1,500 tokens—a 75% reduction.

Design Principles

  1. Terse summaries - One-line description of what the tool does

  2. Structured metadata - When:, Args:, Ex: format for easy parsing

  3. Inline examples - Compact parameter examples with actual values

  4. Cross-references - See also: for related tools instead of verbose explanations

  5. No redundancy - Avoid describing response format (LLMs see the actual response)

Example Format

"""
{One-line summary}. For related usage, see other_tool.

When: {brief condition}
Args: param="example_value", param2=default_value
Ex: tool_name("arg") → brief result description
"""

This format provides LLMs with exactly the information needed to:

  • Understand when to use the tool

  • Call the tool with correct parameters

  • Interpret what the response represents

For guidelines on writing tool descriptions, see Tool Description Guidelines in CONTRIBUTING.md.

Extensibility & Development

Adding Providers

The RTFD server uses a modular architecture. Providers are located in src/RTFD/providers/ and implement the BaseProvider interface. New providers are automatically discovered and registered upon server restart.

To add a custom provider:

  1. Create a new file in src/RTFD/providers/.

  2. Define async functions decorated with @mcp.tool().

  3. Ensure tools return CallToolResult using serialize_response_with_meta(result_data).

Development Notes

  • Dependencies: Declared in pyproject.toml (Python 3.10+).

  • Testing: Use pytest to run the test suite.

  • Environment: If you change environment-sensitive settings (e.g., GITHUB_TOKEN), restart the rtfd process.

Available Tools

27 tools
crates_metadataA
        Get detailed metadata for a specific Rust crate from crates.io.

        USE THIS WHEN: You need comprehensive information about a specific Rust crate.

        RETURNS: Detailed crate metadata including version, URLs, downloads, and license.
        Does NOT include full documentation content.

        The response includes:
        - Crate name, version, description
        - Documentation URL (docs.rs) - can be passed to WebFetch for full API docs
        - Repository URL (usually GitHub) - can be used with GitHub provider
        - Homepage, license, categories, keywords
        - Download statistics, creation/update dates
        - Minimum Rust version required

        Args:
            crate: Crate name (e.g., "serde", "tokio", "actix-web")

        Returns:
            JSON with comprehensive crate metadata

        Example: crates_metadata("serde") → Returns metadata with docs.rs link and GitHub repo
        
ParametersJSON Schema
NameRequiredDescriptionDefault
crateYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it returns metadata but 'Does NOT include full documentation content,' clarifies what the response includes (e.g., URLs for docs.rs and GitHub), and mentions that outputs can be passed to other tools (WebFetch, GitHub provider). However, it doesn't cover potential errors, rate limits, or authentication needs, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, returns, details, args, returns, example). Each sentence adds value, such as clarifying exclusions ('Does NOT include full documentation content') and providing actionable context ('can be passed to WebFetch'). There is no redundant or wasted text, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does a good job covering the tool's behavior, parameters, and return details. It lists what the response includes and provides an example. However, it doesn't explicitly mention error cases (e.g., invalid crate names) or potential limitations (e.g., network failures), which would enhance completeness for a tool with no structured output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides a dedicated 'Args' section explaining the single parameter 'crate' with examples ('serde', 'tokio', 'actix-web'), adding meaning beyond the schema's minimal title. The description fully documents the parameter's purpose and format, effectively compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get detailed metadata for a specific Rust crate from crates.io.' It specifies the verb ('Get'), resource ('Rust crate'), and source ('crates.io'), distinguishing it from sibling tools like npm_metadata or pypi_metadata that target other ecosystems. The description is specific and avoids tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'USE THIS WHEN' section: 'You need comprehensive information about a specific Rust crate.' It distinguishes this tool from search_crates (which likely returns multiple results) and fetch_*_docs tools (which retrieve documentation content). The guidance is clear and provides context for when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

docker_image_metadataA
        Get detailed metadata for a specific Docker image from DockerHub.

        USE THIS WHEN: You need comprehensive information about a Docker image (stats, description, tags).

        RETURNS: Image metadata including popularity metrics and description.
        Does NOT include full README documentation.

        The response includes:
        - Image name, namespace, description
        - Star count (popularity)
        - Pull count (total downloads)
        - Last updated timestamp
        - Official/community status

        Args:
            image: Docker image name (e.g., "nginx", "postgres", "username/custom-image")

        Returns:
            JSON with comprehensive image metadata

        Example: docker_image_metadata("nginx") → Returns stars, pulls, description for nginx image
        
ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it specifies the source (DockerHub), details what is returned (e.g., popularity metrics, description) and what is excluded (full README), and provides an example of usage. However, it lacks information on rate limits, authentication needs, or error handling, which are common for API tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (e.g., USE THIS WHEN, RETURNS, Args, Returns, Example) and front-loaded key information. It is appropriately sized, but some redundancy exists (e.g., repeating 'comprehensive' in multiple places), slightly reducing efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and low schema coverage, the description does a good job by explaining purpose, usage, parameters, and return details with examples. However, it lacks information on potential errors, response format specifics beyond JSON, or dependencies, which would enhance completeness for a tool interacting with an external API.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It adds meaningful semantics by explaining the 'image' parameter with examples (e.g., 'nginx', 'postgres', 'username/custom-image'), clarifying format and usage. This goes beyond the basic schema, though it could detail constraints like case sensitivity or special characters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get detailed metadata') and resource ('for a specific Docker image from DockerHub'), distinguishing it from sibling tools like search_docker_images (which searches) or fetch_docker_image_docs (which fetches documentation). It explicitly mentions what it does and does not include (e.g., no full README).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'USE THIS WHEN' section that specifies the context ('You need comprehensive information about a Docker image'), and it distinguishes from alternatives by noting what it does NOT include (e.g., full README documentation), helping differentiate from tools like fetch_docker_image_docs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_dockerfileA
        Fetch the actual Dockerfile used to build a Docker image.

        USE THIS WHEN: You need to see exactly how an image is built (base image, installed packages, configuration).

        BEST FOR: Understanding image composition, security analysis, or learning how to build similar images.
        Attempts to find Dockerfile link in DockerHub description and fetches from source (usually GitHub).

        Useful for:
        - Seeing what base image is used
        - Identifying installed packages and dependencies
        - Understanding build process and optimizations
        - Security auditing (what's included in the image)
        - Learning Dockerfile best practices from official images

        Note: Not all images have publicly accessible Dockerfiles. Many official images do.

        Args:
            image: Docker image name (e.g., "nginx", "python", "postgres")

        Returns:
            JSON with Dockerfile content, source URL, and metadata (or error if not found)

        Example: fetch_dockerfile("nginx") → Returns Dockerfile from nginx GitHub repository
        
ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing key behaviors: it describes the method ('Attempts to find Dockerfile link in DockerHub description and fetches from source'), limitations ('Not all images have publicly accessible Dockerfiles'), and typical outcomes ('Many official images do'). It could improve by mentioning rate limits or authentication needs, but covers essential operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with front-loaded purpose, usage guidelines, and key details, followed by bullet points for clarity. Every sentence adds value without redundancy, and the example at the end reinforces understanding efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, 0% schema coverage, and no output schema, the description provides comprehensive context: it explains the tool's purpose, usage, behavior, parameters, returns (JSON with content, URL, metadata, or error), and includes an example. This fully compensates for the lack of structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It clearly explains the single parameter 'image' with examples ('e.g., "nginx", "python", "postgres"') and context on what it represents ('Docker image name'), adding significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('fetch the actual Dockerfile'), resource ('used to build a Docker image'), and distinguishes it from sibling tools like docker_image_metadata or search_docker_images by focusing on retrieving the build file itself rather than metadata or search results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides 'USE THIS WHEN' and 'BEST FOR' sections that detail when to use this tool (e.g., for seeing how an image is built, security analysis) and when it might not work ('Not all images have publicly accessible Dockerfiles'), with clear alternatives implied by sibling tools like docker_image_metadata for different needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_docker_image_docsA
        Fetch actual Docker image documentation and README from DockerHub.

        USE THIS WHEN: You need usage instructions, environment variables, volume mounts, or examples.

        BEST FOR: Understanding how to use a Docker image and configure it properly.
        Better than using curl or WebFetch because it:
        - Extracts README content from DockerHub
        - Includes image description and key details
        - Formats content in readable Markdown
        - Prioritizes important sections (Usage, Environment Variables, Examples)

        Typical content includes:
        - How to run the container
        - Available environment variables
        - Volume mount points
        - Port configurations
        - Usage examples and docker-compose snippets

        Args:
            image: Docker image name (e.g., "nginx", "postgres", "redis")
            max_bytes: Maximum content size, default 20KB (increase for detailed docs)

        Returns:
            JSON with README content, size, and source info

        Example: fetch_docker_image_docs("nginx") → Returns README with usage instructions
        
ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
max_bytesNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it extracts README content from DockerHub, formats it in readable Markdown, prioritizes important sections, and includes details about content size handling via 'max_bytes'. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions, which keeps it from a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, benefits, typical content, args, returns, example) and every sentence adds value. It's front-loaded with the core purpose and usage context, avoiding redundancy. The length is appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does a good job covering purpose, usage, parameters, and expected return content. It mentions the return format ('JSON with README content, size, and source info') and provides an example. However, it lacks details on error handling or edge cases (e.g., invalid image names), which would enhance completeness for a tool with 2 parameters and no structured output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful context for both parameters: 'image' is explained with examples ('nginx', 'postgres', 'redis') and 'max_bytes' is described with its default (20KB) and purpose ('increase for detailed docs'). This goes beyond the bare schema, though it doesn't detail format constraints for 'image' (e.g., repository/tag syntax).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Fetch actual Docker image documentation and README from DockerHub') and distinguishes it from siblings like 'docker_image_metadata' (which likely provides metadata rather than docs) and 'fetch_dockerfile' (which fetches Dockerfile instead of README). It explicitly names the resource (Docker image docs/README) and source (DockerHub).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'BEST FOR' sections that specify when to use this tool (for usage instructions, environment variables, etc.) and contrasts it with alternatives like 'curl or WebFetch', explaining why this tool is better. It provides clear context about its specialized purpose for Docker image documentation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_gcp_service_docsA
        Fetch actual documentation content for a GCP (Google Cloud Platform) service.

        USE THIS WHEN: You need detailed documentation, guides, tutorials, or API reference for a GCP service.

        BEST FOR: Getting complete documentation with setup instructions, usage examples, and API details.
        Better than using curl or WebFetch because it:
        - Automatically extracts relevant content from cloud.google.com
        - Converts HTML to clean Markdown format
        - Prioritizes important sections (Overview, Quickstart, API Reference)
        - Removes navigation, ads, and other non-content elements
        - Handles multi-word service names (e.g., "gke audit policy")

        Works with:
        - Exact service names (e.g., "Cloud Storage", "Compute Engine")
        - Common abbreviations (e.g., "GCS", "GKE", "BigQuery")
        - Multi-word queries (e.g., "gke audit policy configuration")

        Args:
            service: Service name or topic (e.g., "Cloud Storage", "vertex ai", "gke audit")
            max_bytes: Maximum content size, default 20KB (increase for comprehensive docs)

        Returns:
            JSON with documentation content, size, source URL, truncation status

        Example: fetch_gcp_service_docs("vertex ai") → Returns formatted documentation from cloud.google.com
        
ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYes
max_bytesNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: extracting content from cloud.google.com, converting HTML to Markdown, prioritizing sections, removing non-content elements, and handling various input formats. It also mentions truncation based on max_bytes. However, it lacks details on error handling or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, advantages, supported inputs, args, returns, example) and uses bullet points for readability. It is appropriately sized for the tool's complexity, though it could be slightly more concise by integrating some bullet points into prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is largely complete. It covers purpose, usage, behavioral traits, parameter details, and return format. However, without an output schema, it could benefit from more detail on the JSON structure returned (e.g., specific fields like 'content', 'size', 'url').

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It fully explains both parameters: 'service' with examples (e.g., 'Cloud Storage', 'vertex ai', 'gke audit') and acceptable formats (exact names, abbreviations, multi-word queries), and 'max_bytes' with its default value (20KB) and purpose (controlling content size). This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches documentation content for GCP services, specifying the verb 'fetch' and resource 'GCP service documentation'. It distinguishes from siblings like 'search_gcp_services' by focusing on retrieving actual content rather than searching, and mentions specific advantages over generic tools like curl or WebFetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'BEST FOR' sections that detail when to use this tool (for detailed documentation, guides, tutorials, or API references) and why it's better than alternatives (e.g., curl or WebFetch). It also lists specific use cases like handling multi-word service names and common abbreviations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_github_readmeA
        Fetch README file from a GitHub repository.

        USE THIS WHEN: You need the project overview, quick start, or basic documentation.

        BEST FOR: Getting a high-level understanding of a project.
        The README typically contains installation, usage examples, and project description.

        For deeper code exploration, use:
        - get_repo_tree() to see the complete file structure
        - get_file_content() to read specific source files

        Args:
            repo: Repository in "owner/repo" format (e.g., "psf/requests")
            max_bytes: Maximum content size, default 20KB

        Returns: JSON with README content, size, and metadata

        Example: fetch_github_readme("psf/requests") → Returns the requests README
        
ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
max_bytesNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (fetches README content), mentions a default value for max_bytes (20KB), and specifies the return format (JSON with content, size, metadata). However, it doesn't address potential errors (e.g., missing README, rate limits, authentication needs) or pagination behavior, leaving some behavioral aspects unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, parameters, returns, example) and every sentence earns its place. It's front-loaded with the core purpose and usage context, avoiding redundancy while maintaining completeness. The example at the end reinforces understanding without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is largely complete. It covers purpose, usage, parameters, returns, and provides an example. However, without an output schema, it could benefit from more detail on the JSON structure (e.g., specific metadata fields) or error handling, leaving minor gaps in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It provides detailed parameter semantics: 'repo' is explained with format ('owner/repo') and an example ('psf/requests'), and 'max_bytes' is explained with its purpose ('Maximum content size') and default value ('default 20KB'). This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Fetch README file') and resource ('from a GitHub repository'), distinguishing it from siblings like get_file_content() for arbitrary files or get_repo_tree() for directory structure. It provides a concrete example ('psf/requests') that reinforces the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly includes 'USE THIS WHEN' and 'BEST FOR' sections that specify when to use this tool (for project overview, quick start, basic documentation) and when not to use it (for deeper code exploration). It names two alternative tools (get_repo_tree(), get_file_content()) for different use cases, providing clear guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_godocs_docsA
        Fetch actual Go package documentation from godocs.io.

        USE THIS WHEN: You need package overview, function signatures, type definitions, or API reference.

        BEST FOR: Getting complete documentation for Go packages.
        Better than using curl or WebFetch because it:
        - Extracts package overview and descriptions
        - Includes function and type documentation
        - Formats content in readable text format
        - Limits output to avoid overwhelming context

        NOT SUITABLE FOR: Source code (use GitHub provider for that)

        Args:
            package: Go package path (e.g., "github.com/gin-gonic/gin", "golang.org/x/sync")
            max_bytes: Maximum content size, default 20KB (increase for large packages)

        Returns:
            JSON with documentation content, size, truncation status, and source info

        Example: fetch_godocs_docs("github.com/gin-gonic/gin") → Returns overview and API docs
        
ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes
max_bytesNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well: it discloses that the tool extracts and formats content ('Extracts package overview...', 'Formats content in readable text format'), limits output size ('Limits output to avoid overwhelming context'), and mentions truncation behavior in the Returns section. It doesn't cover error cases or rate limits, but provides substantial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (USE THIS WHEN, BEST FOR, NOT SUITABLE FOR, Args, Returns, Example). Every sentence adds value: no repetition, no fluff. The information is front-loaded with the core purpose immediately stated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters, no annotations, and no output schema, the description is quite complete: it covers purpose, usage, parameters, and return format. The only minor gap is lack of explicit error handling or authentication details, but given the context, it provides sufficient guidance for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It does: it explains both parameters with examples ('package: Go package path (e.g., "github.com/gin-gonic/gin")') and default values ('max_bytes: Maximum content size, default 20KB (increase for large packages)'), adding meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fetch actual Go package documentation from godocs.io' with specific resources (package overview, function signatures, type definitions, API reference). It distinguishes from siblings like 'fetch_github_readme' or 'godocs_metadata' by focusing on complete documentation extraction rather than metadata or source code.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: 'USE THIS WHEN: You need package overview...', 'BEST FOR: Getting complete documentation for Go packages', and 'NOT SUITABLE FOR: Source code (use GitHub provider for that)'. It also compares to alternatives ('Better than using curl or WebFetch because...'), giving clear context for when to choose this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_npm_docsA
        Fetch actual npm package documentation from npm registry README.

        USE THIS WHEN: You need installation instructions, usage examples, API reference, or quickstart guides.

        BEST FOR: Getting complete, formatted documentation for JavaScript/Node.js packages.
        Better than using curl or WebFetch because it:
        - Automatically extracts relevant sections (Installation, Usage, Examples, API)
        - Prioritizes most useful content sections
        - Already in Markdown format (npm requires Markdown READMEs)

        NOT SUITABLE FOR: External documentation sites (use docs_url from npm_metadata + WebFetch)

        Args:
            package: npm package name (e.g., "express", "react", "axios")
            max_bytes: Maximum content size, default 20KB (increase for large packages)

        Returns:
            JSON with actual documentation content, size, truncation status, version

        Example: fetch_npm_docs("express") → Returns formatted README with installation and usage
        
ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes
max_bytesNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it automatically extracts relevant sections (Installation, Usage, Examples, API), prioritizes useful content, returns Markdown format, and handles truncation via max_bytes. However, it doesn't mention rate limits, error handling, or authentication needs, leaving some gaps for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, best for, not suitable for, args, returns, example) and front-loaded key information. It's appropriately sized but has minor verbosity in comparisons (e.g., 'Better than using curl or WebFetch because it:'), which slightly reduces efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does a good job covering purpose, usage, parameters, and return format (JSON with content, size, truncation status, version). However, it lacks details on error cases, response structure, or potential limitations like network dependencies, which would enhance completeness for a tool with such sparse structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains both parameters: 'package' as npm package name with examples (e.g., 'express'), and 'max_bytes' as maximum content size with default 20KB and note to increase for large packages. This adds meaningful context beyond the bare schema, though it could specify units or constraints more precisely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches npm package documentation from registry READMEs, specifying the exact resource (npm package documentation) and action (fetching from README). It distinguishes from siblings like 'npm_metadata' (which likely provides metadata) and 'fetch_pypi_docs' (for Python packages), making the purpose specific and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly includes 'USE THIS WHEN' for installation instructions, usage examples, API reference, or quickstart guides, and 'NOT SUITABLE FOR' external documentation sites (directing to docs_url from npm_metadata + WebFetch). It also compares to alternatives like curl or WebFetch, providing clear context on when to use this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_pypi_docsA
        Fetch actual Python package documentation from PyPI README/description.

        USE THIS WHEN: You need installation instructions, usage examples, API reference, or quickstart guides.

        BEST FOR: Getting complete, formatted documentation for Python packages.
        Better than using curl or WebFetch because it:
        - Automatically extracts relevant sections (Installation, Usage, Examples)
        - Converts reStructuredText to Markdown
        - Prioritizes most useful content sections
        - Falls back to GitHub README if PyPI description is minimal

        NOT SUITABLE FOR: External documentation sites (use docs_url from pypi_metadata + WebFetch)

        Args:
            package: PyPI package name (e.g., "requests", "numpy", "pandas")
            max_bytes: Maximum content size, default 20KB (increase for large packages)
            ignore_verification: Skip PyPI verification check if VERIFIED_BY_PYPI is enabled

        Returns: JSON with actual documentation content, size, truncation status

        Example: fetch_pypi_docs("requests") → Returns formatted README with installation and usage
        
ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes
max_bytesNo
ignore_verificationNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it extracts relevant sections, converts reStructuredText to Markdown, prioritizes useful content, and falls back to GitHub README. However, it lacks details on error handling, rate limits, or authentication needs, which are common for API tools, leaving some behavioral aspects unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, parameters, returns, example) and front-loaded key information. Every sentence adds value without redundancy, making it efficient for an agent to parse while maintaining completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no annotations, no output schema), the description is largely complete. It covers purpose, usage, parameters, and return format. However, without an output schema, it could benefit from more detail on the JSON structure (e.g., specific fields like 'content', 'size', 'truncation_status') to fully guide the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for all three parameters: 'package' is explained with examples, 'max_bytes' specifies a default and purpose, and 'ignore_verification' clarifies its conditional use. This goes beyond the bare schema, though it could provide more detail on parameter interactions or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('fetch', 'extracts', 'converts') and resources ('Python package documentation from PyPI README/description'). It explicitly distinguishes itself from alternatives like curl, WebFetch, and external documentation sites, making its scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance with dedicated sections: 'USE THIS WHEN' lists specific use cases (installation instructions, usage examples, etc.), 'BEST FOR' clarifies its primary function, and 'NOT SUITABLE FOR' explicitly excludes external documentation sites while suggesting an alternative (docs_url from pypi_metadata + WebFetch). This comprehensive guidance helps the agent choose correctly among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cache_entriesB

Get detailed information about all cached entries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but doesn't describe what 'detailed information' includes, whether it's a read-only operation, potential performance impacts, or how results are structured. This leaves significant gaps for a tool that presumably returns data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a simple purpose, the description is incomplete. It doesn't explain what 'detailed information' entails, how results are formatted, or any behavioral traits like caching behavior or error handling, leaving the agent with insufficient context for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description doesn't need to add parameter details, and it correctly implies no inputs are required, aligning with the schema. A baseline of 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed information about all cached entries'), making the purpose understandable. However, it doesn't differentiate from the sibling tool 'get_cache_info', which appears to be a related cache operation, so it doesn't achieve full sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_cache_info' or other metadata-fetching siblings. It lacks context about prerequisites, timing, or exclusions, leaving usage entirely implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cache_infoB

Get information about the current cache usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but fails to describe key traits like whether it's read-only, what format the information is returned in, if there are rate limits, or any side effects. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that directly states the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it efficient and easy to parse for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool that likely returns structured data about cache usage. It doesn't explain what information is included (e.g., size, hit rates, entries), the return format, or any behavioral context, leaving significant gaps for the agent to operate effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and the schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it doesn't introduce any confusion, earning a high baseline score for this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('information about the current cache usage'), making it immediately understandable. However, it doesn't explicitly differentiate from its sibling tool 'get_cache_entries', which appears to be closely related, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as the sibling 'get_cache_entries' or other metadata-fetching tools in the list. It lacks any context about prerequisites, timing, or exclusions, leaving the agent to infer usage based on the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commit_diffA
        Get the diff between two commits, branches, or tags in a GitHub repository.

        USE THIS WHEN: You need to see what changed between two versions of code.

        BEST FOR: Analyzing changes, reviewing pull requests (by comparing branches), or checking version differences.
        Returns the raw git diff output.

        Args:
            repo: Repository in format "owner/repo" (e.g., "psf/requests")
            base: Base commit SHA, branch name, or tag (e.g., "main", "v1.0.0", "a1b2c3d")
            head: Head commit SHA, branch name, or tag (e.g., "feature-branch", "v1.1.0", "e5f6g7h")

        Returns:
            JSON with the raw git diff content.

        Example: get_commit_diff("psf/requests", "v2.28.0", "v2.28.1") → Returns diff between versions
        
ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
baseYes
headYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it returns 'raw git diff output' in JSON format, implies it's a read-only operation (no mention of mutations), and specifies it works with GitHub repositories. However, it lacks details on error handling, rate limits, or authentication needs, which are relevant for GitHub API tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for purpose, usage guidelines, parameters, returns, and an example. It's front-loaded with the core purpose. However, it includes some redundancy (e.g., repeating parameter info in the example) and could be slightly more concise by integrating the example more tightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no annotations, no output schema), the description is largely complete. It covers purpose, usage, parameters, and return format. However, it lacks details on output structure (beyond 'JSON with raw git diff content'), error cases, or GitHub API specifics, leaving minor gaps for an agent to invoke it fully correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all three parameters: 'repo' as 'owner/repo' format with an example, 'base' as 'commit SHA, branch name, or tag' with examples, and 'head' similarly. This adds essential meaning beyond the bare schema, clarifying acceptable values and formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the diff between two commits, branches, or tags in a GitHub repository.' It specifies the verb ('Get'), resource ('diff'), and scope ('GitHub repository'), distinguishing it from siblings like get_file_content or get_repo_tree that fetch different repository data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly includes 'USE THIS WHEN: You need to see what changed between two versions of code' and 'BEST FOR: Analyzing changes, reviewing pull requests (by comparing branches), or checking version differences.' This provides clear context for when to use this tool versus alternatives, such as for diff analysis rather than content fetching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_contentA
        Get content of a specific file from a GitHub repository.

        USE THIS WHEN: You need to read the actual source code or contents of a specific file.

        BEST FOR: Examining implementation details, understanding how code works, or reading configuration files.
        Returns the full file content (UTF-8 text only, binary files are rejected).

        Automatically handles:
        - Base64 decoding from GitHub API
        - UTF-8 conversion with safe truncation
        - Binary file detection

        Args:
            repo: Repository in format "owner/repo" (e.g., "psf/requests")
            path: Path to file (e.g., "requests/api.py")
            max_bytes: Maximum content size (default 100KB, increase for large files)

        Returns:
            JSON with file content, size, truncation status, and metadata

        Example: get_file_content("psf/requests", "requests/api.py") → Returns source code of api.py
        
ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
pathYes
max_bytesNo

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does an excellent job disclosing behavioral traits: it specifies UTF-8 text only with binary file rejection, describes automatic handling (base64 decoding, UTF-8 conversion, truncation), mentions default max_bytes and that it can be increased, and describes the JSON return structure. It doesn't mention rate limits or authentication needs, but covers most other important aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, automatic handling, parameters, returns, example) and every sentence adds value. It's appropriately sized for a tool with 3 parameters and complex behavior, with the most important information (what it does and when to use it) presented first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, no annotations, and no output schema, the description provides complete context: clear purpose, usage guidelines, behavioral details, parameter semantics, return format description, and an example. It addresses all aspects needed for an agent to understand and use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by providing clear semantics for all 3 parameters: repo format ('owner/repo'), path meaning ('Path to file'), and max_bytes purpose ('Maximum content size') with default value and usage guidance. The example further clarifies parameter usage with concrete values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get content') and resource ('specific file from a GitHub repository'), distinguishing it from sibling tools like get_repo_tree (which lists contents) or fetch_github_readme (which fetches only README files). It explicitly mentions reading source code or configuration files, making the scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'BEST FOR' sections that clearly state when to use this tool (e.g., 'need to read the actual source code or contents of a specific file') and what it's best for (e.g., 'examining implementation details'). This provides strong guidance compared to alternatives like list_repo_contents or github_code_search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_package_versionsA
        Get versions for a specific GitHub package.

        USE THIS WHEN: You found a package using list_github_packages and want to see available tags/versions.

        Args:
            owner: GitHub username or organization name
            package_type: Type of package (e.g., "container")
            package_name: Name of the package (e.g., "rtfd")

        Returns:
            JSON list of versions/tags.
        
ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYes
package_typeYes
package_nameYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a 'JSON list of versions/tags,' which adds useful behavioral context about the output format. However, it doesn't mention potential limitations like rate limits, authentication requirements, or error conditions, leaving gaps for a tool interacting with GitHub's API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded, with the purpose stated first, followed by usage guidelines, parameters, and returns. Each sentence earns its place by providing essential information without redundancy, making it efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does a good job covering purpose, usage, parameters, and return format. However, as a GitHub API tool, it lacks details on authentication, rate limits, or error handling, which are common contextual needs. This minor gap prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all three parameters: 'owner' (GitHub username or organization), 'package_type' (e.g., 'container'), and 'package_name' (e.g., 'rtfd'), including examples. This adds significant value beyond the bare schema, though it doesn't detail constraints like valid package types, preventing a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get versions for a specific GitHub package.' It specifies the verb ('Get'), resource ('versions'), and domain ('GitHub package'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'list_github_packages' beyond mentioning it as a prerequisite, so it falls short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'USE THIS WHEN' section that provides clear guidance: 'You found a package using list_github_packages and want to see available tags/versions.' This directly states when to use this tool versus alternatives, naming a specific sibling tool as a prerequisite, which is excellent for agent decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_repo_treeA
        Get the full file tree of a GitHub repository.

        USE THIS WHEN: You need to see the overall structure and organization of a repository.

        BEST FOR: Understanding project layout, finding specific files, or getting a complete directory listing.
        Returns all file paths, types (file/directory), and sizes in a single call.

        Use recursive=True for complete tree (all files in all subdirectories).
        Use recursive=False for just top-level overview (faster, less data).

        After getting the tree, use:
        - get_file_content() to read specific files you identified
        - list_repo_contents() to browse specific directories in detail

        Args:
            repo: Repository in format "owner/repo" (e.g., "psf/requests")
            recursive: Whether to get full tree recursively (default False)
            max_items: Maximum number of items to return (default 1000)

        Returns:
            JSON with complete file tree structure, branch, and count

        Example: get_repo_tree("psf/requests", recursive=True) → Returns complete file listing
        
ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
recursiveNo
max_itemsNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it describes the return format ('JSON with complete file tree structure, branch, and count'), performance trade-offs (recursive=False is 'faster, less data'), and default values (recursive=False, max_items=1000). It doesn't mention rate limits or auth needs, but covers core operational aspects adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage, parameters, returns, example), front-loading key information. Every sentence adds value—no fluff—and it efficiently covers usage scenarios, parameter details, and follow-up actions in a compact format, making it easy to scan and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides strong context: it explains what the tool does, when to use it, parameter semantics, return format, and example. It could improve by specifying error cases or pagination details, but for a tool with 3 parameters and clear sibling differentiation, it's nearly complete and highly usable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It does so by explaining all three parameters: 'repo' format ('owner/repo'), 'recursive' effect ('complete tree' vs. 'top-level overview'), and 'max_items' purpose ('Maximum number of items to return'). This adds essential meaning beyond the bare schema, making parameters clear and actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get the full file tree') and resource ('of a GitHub repository'), distinguishing it from siblings like get_file_content (reads specific files) and list_repo_contents (browses specific directories). It explicitly mentions what it returns ('all file paths, types, and sizes'), making the purpose unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance with 'USE THIS WHEN' and 'BEST FOR' sections, detailing scenarios like understanding project layout or finding files. It also names alternatives (get_file_content, list_repo_contents) for follow-up actions, and clarifies when to use recursive vs. non-recursive modes, offering comprehensive usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

godocs_metadataA
        Get Go package metadata from godocs.io (name, summary, URLs).

        USE THIS WHEN: You need basic package info or links to documentation sites.

        RETURNS: Package metadata ONLY - does NOT include actual documentation content.
        For full documentation, use fetch_godocs_docs instead.

        The response includes:
        - Package name and summary/description
        - godocs.io URL
        - pkg.go.dev source URL

        Args:
            package: Go package path (e.g., "github.com/gin-gonic/gin", "golang.org/x/tools")

        Example: godocs_metadata("github.com/gin-gonic/gin") → Returns metadata with summary
        
ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns (metadata only, not full docs), lists specific response fields, and clarifies limitations. However, it doesn't mention potential errors, rate limits, or authentication needs, leaving some behavioral aspects uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, returns, response details, args, example), each sentence adds value, and it's front-loaded with the core purpose. There's no wasted text, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no annotations, no output schema), the description is nearly complete: it covers purpose, usage, returns, parameter details, and an example. However, without an output schema, it could benefit from more explicit details on the response structure or error handling, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It clearly explains the single parameter 'package' as 'Go package path' with concrete examples ('github.com/gin-gonic/gin', 'golang.org/x/tools'), adding essential meaning beyond the bare schema. This fully addresses the parameter semantics gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get Go package metadata'), resource ('from godocs.io'), and scope ('name, summary, URLs'), distinguishing it from sibling tools like fetch_godocs_docs. It explicitly names what it retrieves versus what it doesn't, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'USE THIS WHEN' section that specifies when to use this tool ('need basic package info or links to documentation sites') and when not to ('does NOT include actual documentation content'), with a clear alternative named ('fetch_godocs_docs'). This provides comprehensive guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_github_packagesA
        List packages (including GHCR images) for a GitHub user or organization.

        USE THIS WHEN: You want to find Docker images or other packages hosted on GitHub for a specific user/org.
        Note: GitHub does not support global package search; you must provide an owner.

        Args:
            owner: GitHub username or organization name (e.g. "github", "octocat")
            package_type: Type of package to list. Defaults to "container" (GHCR).
                          Options: "container", "npm", "maven", "rubygems", "nuget", "docker" (legacy)

        Returns:
            JSON list of packages with metadata (name, repository, version count, etc.)
        
ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYes
package_typeNocontainer

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses behavioral traits such as the requirement for an owner (no global search), default package type, and return format (JSON list with metadata). However, it lacks details on rate limits, authentication needs, or pagination, which could be relevant for an API tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the purpose, followed by usage guidelines, args, and returns in a structured format. Every sentence adds value, with no redundant information, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides good context for a simple tool with 2 parameters. It covers purpose, usage, parameters, and return format. However, it could improve by mentioning authentication or error handling, but it's largely complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds significant meaning beyond the schema by explaining 'owner' as 'GitHub username or organization name' with examples, 'package_type' with default value and options, and clarifies that 'docker' is legacy. This fully documents both parameters effectively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and resource 'packages (including GHCR images) for a GitHub user or organization.' It distinguishes from siblings by specifying GitHub packages rather than other package types like npm or Docker images from other sources, making the purpose specific and well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'USE THIS WHEN' section that states when to use it ('You want to find Docker images or other packages hosted on GitHub for a specific user/org') and when not to use it ('GitHub does not support global package search; you must provide an owner'), providing clear guidance and alternatives implicitly by noting the limitation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_repo_contentsA
        List contents of a directory in a GitHub repository.

        USE THIS WHEN: You need to browse or explore the structure of a repository directory.

        BEST FOR: Discovering what files and folders exist in a specific location.
        Returns names, paths, types (file/dir), sizes for each item.

        Common workflow:
        1. Use github_repo_search() to find the repository
        2. Use get_repo_tree() to see the overall structure
        3. Use list_repo_contents() to browse specific directories
        4. Use get_file_content() to read individual files

        Args:
            repo: Repository in format "owner/repo" (e.g., "psf/requests")
            path: Path to directory (empty string for root, e.g., "src/utils")

        Returns:
            JSON with list of files and directories with metadata

        Example: list_repo_contents("psf/requests", "requests") → Lists files in requests/ directory
        
ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
pathNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns ('names, paths, types, sizes for each item'), its read-only nature (implied by 'List'), and provides an example. However, it doesn't mention potential limitations like rate limits, authentication requirements, or pagination behavior, which would be helpful for a GitHub API tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, workflow, parameters, returns, example) and every sentence adds value. It could be slightly more concise by integrating some sections, but the information density is high and the structure aids comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters, no annotations, and no output schema, the description provides excellent coverage of purpose, usage, parameters, and return format. The example further clarifies usage. The only minor gap is lack of explicit mention of authentication or rate limits, which are common for GitHub API tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It provides detailed parameter documentation in the 'Args:' section with clear explanations, format examples ('owner/repo'), and usage notes (empty string for root). This adds substantial value beyond the bare schema, fully explaining both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('List contents of a directory') and resource ('in a GitHub repository'), distinguishing it from siblings like get_repo_tree (overall structure) and get_file_content (individual files). It provides a precise verb+resource combination with clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly includes 'USE THIS WHEN:' and 'BEST FOR:' sections that specify when to use this tool ('browse or explore the structure of a repository directory'). It also provides a detailed 'Common workflow' section that positions this tool among alternatives like github_repo_search, get_repo_tree, and get_file_content, giving clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_metadataA
        Get npm package metadata (name, version, URLs, maintainers).

        USE THIS WHEN: You need basic package info, version numbers, or links to external documentation.

        RETURNS: Package metadata ONLY - does NOT include actual documentation content.
        For full documentation, use fetch_npm_docs instead.

        The response includes:
        - Package name, version, description
        - Documentation URL (docs_url/homepage) - can be passed to WebFetch for external docs
        - Repository URL (usually GitHub)
        - License, keywords, maintainers

        Args:
            package: npm package name (e.g., "express", "react", "lodash")

        Example: npm_metadata("express") → Returns metadata with links to expressjs.com
        
ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly describes what the tool returns (metadata only, not documentation content) and includes details like response structure and external URL usage, though it lacks information on error handling or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, returns, response details, args, example), front-loading key information. Every sentence adds value, such as distinguishing from fetch_npm_docs and listing response fields, with no wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is complete. It covers purpose, usage, behavioral traits, parameter semantics, and response details, providing all necessary context for an AI agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% coverage. It explains the 'package' parameter with semantics (npm package name), provides examples (e.g., 'express'), and clarifies the expected format, fully compensating for the schema's lack of description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Get npm package metadata') and resources ('npm package'), listing key data fields like name, version, URLs, and maintainers. It distinguishes from sibling tools by explicitly contrasting with fetch_npm_docs for documentation content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance with a 'USE THIS WHEN' section detailing scenarios ('need basic package info, version numbers, or links to external documentation') and a clear alternative ('For full documentation, use fetch_npm_docs instead'), effectively guiding when to use this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pypi_metadataA
        Get Python package metadata from PyPI (name, version, URLs, summary).

        USE THIS WHEN: You need basic package info, version numbers, or links to external documentation.

        RETURNS: Package metadata ONLY - does NOT include actual documentation content.
        For full documentation, use fetch_pypi_docs instead.

        The response includes:
        - Package name, version, summary
        - Documentation URL (docs_url) - can be passed to WebFetch for external docs
        - Project URLs (homepage, repository, etc.)

        Args:
            package: PyPI package name (e.g., "requests", "flask", "django")
            ignore_verification: Skip PyPI verification check if VERIFIED_BY_PYPI is enabled

        Example: pypi_metadata("requests") → Returns metadata with docs_url pointing to readthedocs
        
ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes
ignore_verificationNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (retrieves metadata), what it doesn't do (no documentation content), and includes an example of the response format. However, it doesn't mention potential failure modes, rate limits, or authentication requirements, which would be helpful for a tool interacting with an external API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, returns, response details, args, example), front-loading key information. Every sentence earns its place by providing essential guidance without redundancy, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description provides comprehensive context about what the tool does, when to use it, what it returns, and parameter semantics. The main gap is the lack of output schema, so the description doesn't fully document the response structure, though it lists key fields. For a metadata retrieval tool, this is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the lack of parameter documentation in the schema. It provides clear explanations for both parameters: 'package' is described with examples ('requests', 'flask', 'django'), and 'ignore_verification' is explained with context about PyPI verification checks. The description adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Get Python package metadata') and resources ('from PyPI'), listing the exact information retrieved (name, version, URLs, summary). It distinguishes itself from sibling tools like fetch_pypi_docs by specifying it returns metadata only, not documentation content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'USE THIS WHEN' section that provides clear guidance on when to use this tool ('You need basic package info, version numbers, or links to external documentation') and when not to use it ('does NOT include actual documentation content. For full documentation, use fetch_pypi_docs instead'), directly naming an alternative sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cratesA
        Search for Rust crates on crates.io by name or keywords.

        USE THIS WHEN: You need to find Rust packages/crates for a specific purpose or library.

        BEST FOR: Discovering which Rust crates exist for a topic or functionality.
        Returns multiple matching crates with names, versions, descriptions, download counts, and URLs.

        After finding a crate, use:
        - crates_metadata() to get detailed information about a specific crate
        - The documentation URL to read full docs (use WebFetch)

        Args:
            query: Search keywords (e.g., "http client", "web framework", "serde")
            limit: Maximum number of results (default 5, max 100)

        Returns:
            JSON with list of matching crates, total results, and metadata

        Example: search_crates("web framework") → Finds actix-web, rocket, axum, etc.
        
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it describes the return format ('multiple matching crates with names, versions, descriptions, download counts, and URLs'), mentions default and maximum values for the limit parameter, and provides an example of what results look like. It doesn't mention rate limits or authentication requirements, but provides substantial operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, parameters, returns, example) and every sentence adds value. It's appropriately sized for a search tool with 2 parameters and no annotations, with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (search operation with 2 parameters), no annotations, and no output schema, the description provides substantial context: clear purpose, usage guidelines, parameter details, return format description, and an example. It could potentially mention error cases or pagination, but covers the essential operational context well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It successfully adds meaning for both parameters: it explains that 'query' accepts 'search keywords' with concrete examples ('http client', 'web framework'), and specifies that 'limit' has a default of 5 and maximum of 100. This goes well beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Search for Rust crates on crates.io') and resource ('by name or keywords'), distinguishing it from sibling tools like search_docker_images or search_gcp_services by specifying the Rust/crates.io domain. It explicitly mentions the verb 'search' and target 'Rust crates'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'BEST FOR' sections that provide clear context for when to use this tool ('to find Rust packages/crates for a specific purpose or library' and 'discovering which Rust crates exist'). It also names specific alternative tools to use after finding a crate (crates_metadata, WebFetch for docs).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_docker_imagesA
        Search for Docker images on DockerHub by name or keywords.

        USE THIS WHEN: You need to find Docker container images for a specific service, application, or technology.

        BEST FOR: Discovering official and community Docker images.
        Returns multiple matching images with names, descriptions, star counts, pull counts, and whether they're official.

        After finding an image, use:
        - docker_image_metadata() for detailed information
        - fetch_docker_image_docs() for README and usage instructions
        - fetch_dockerfile() to see how the image is built

        Args:
            query: Search query (e.g., "nginx", "postgres", "machine learning", "python")
            limit: Maximum number of results (default 5)

        Returns:
            JSON with list of matching images including name, description, stars, pulls, official status

        Example: search_docker_images("postgres") → Finds official postgres image and alternatives
        
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool returns multiple matching images with specific attributes (names, descriptions, star counts, etc.) and mentions it searches DockerHub. However, it doesn't cover potential rate limits, authentication needs, or error behaviors, leaving some gaps for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, parameter details, returns, example) and every sentence adds value. It's appropriately sized without redundancy, making it easy to scan and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides comprehensive context: purpose, usage guidelines, parameter semantics, return format, and an example. It covers all necessary aspects for a search tool with two parameters, making it complete enough for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clearly explains both parameters: 'query' as a search query with examples and 'limit' as maximum results with default value. This adds meaningful context beyond the bare schema, fully documenting the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for Docker images on DockerHub by name or keywords, specifying the verb 'search' and resource 'Docker images'. It distinguishes from siblings like docker_image_metadata (detailed info) and fetch_dockerfile (build details) by focusing on discovery.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'BEST FOR' sections, stating to use it for finding images for specific services/applications and discovering official/community images. It also lists alternative tools to use after finding an image, providing clear guidance on when to use this vs. other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_gcp_servicesA
        Search for GCP (Google Cloud Platform) services and documentation.

        USE THIS WHEN: You need to find Google Cloud services, APIs, or documentation for a specific GCP topic.

        BEST FOR: Discovering which GCP services exist for a use case or finding service documentation.
        Returns multiple matching services with names, descriptions, API endpoints, and docs URLs.

        Searches:
        1. Local service mapping (exact and partial matches)
        2. cloud.google.com website (fallback for specific queries)
        3. googleapis GitHub repository (API definitions)

        After finding a service, use:
        - fetch_gcp_service_docs() to get full documentation content
        - The docs_url with WebFetch for external documentation

        Note: GitHub API search (fallback) is limited to 60 requests/hour without GITHUB_TOKEN.

        Args:
            query: Service name or keywords (e.g., "storage", "vertex ai", "gke audit", "bigquery")
            limit: Maximum number of results (default 5)

        Returns:
            JSON with list of matching services including name, description, API endpoint, docs URL

        Example: search_gcp_services("vertex ai") → Finds Vertex AI service with docs links
        
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well. It discloses the three search sources (local mapping, cloud.google.com, GitHub), mentions the GitHub API rate limit constraint (60 requests/hour without token), and describes the multi-step search process. It doesn't mention error handling or authentication requirements, but covers key behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (purpose, usage guidelines, search sources, related tools, parameters, returns, example). Every sentence adds value, though it's slightly verbose with the three search sources enumerated. The information is front-loaded with purpose and usage guidelines first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 2 parameters, no annotations, and no output schema, the description provides comprehensive context. It covers purpose, usage, behavioral details, parameters, return format, and examples. The only minor gap is not explicitly describing the JSON structure of returned results, though it mentions what fields are included.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate and does so effectively. It explains both parameters: 'query' with examples ('storage', 'vertex ai', 'gke audit', 'bigquery') and 'limit' with its default value. The description adds meaning beyond the bare schema by showing query format examples and explaining the limit's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for GCP services and documentation with specific resources mentioned (services, APIs, documentation). It distinguishes from siblings like fetch_gcp_service_docs by focusing on discovery/search rather than fetching full documentation content. The verb 'search' is specific and the scope is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'USE THIS WHEN' and 'BEST FOR' sections provide clear guidance on when to use this tool. It explicitly mentions alternatives like fetch_gcp_service_docs for full documentation and WebFetch for external docs. The description distinguishes this search tool from documentation-fetching siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_library_docsC

Find docs for a library using PyPI metadata and GitHub repos combined. Returns data in JSON format with token statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
libraryYes
limitNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('JSON format with token statistics'), which is useful, but lacks critical details such as whether this is a read-only operation, potential rate limits, authentication requirements, error handling, or what 'token statistics' entails. The description is insufficient for a tool with mutation potential or external dependencies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences that efficiently cover the purpose and output format. It avoids unnecessary details but could be slightly more structured by front-loading key usage information. Every sentence adds value, though it's brief given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (searching across multiple sources), lack of annotations, and no output schema, the description is incomplete. It doesn't address how results are combined, sorted, or filtered, what 'token statistics' means, or error cases. For a tool with 2 parameters and external dependencies, more context is needed to ensure reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It doesn't explain what 'library' expects (e.g., package name, repository URL) or how 'limit' affects results (e.g., number of docs, ranking criteria). The mention of 'PyPI metadata and GitHub repos' hints at the scope but doesn't clarify parameter usage or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Find docs') and resource ('for a library'), specifying it uses PyPI metadata and GitHub repos combined. It distinguishes from some siblings like 'fetch_pypi_docs' or 'fetch_github_readme' by mentioning the combined approach, but doesn't explicitly differentiate from all similar tools like 'search_crates' or 'search_docker_images'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives is provided. The description mentions the data sources (PyPI and GitHub) but doesn't specify when this combined approach is preferable over using individual tools like 'fetch_pypi_docs' or 'fetch_github_readme'. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zig_docsA
        Search Zig programming language documentation.

        USE THIS WHEN: You need information about Zig language features, syntax, stdlib, or concepts.

        BEST FOR: Learning Zig language specifics and finding relevant documentation sections.
        Searches the official Zig documentation (ziglang.org/documentation/master/) and returns
        matching sections with titles, summaries, and relevance scores.

        Good for queries about:
        - Language features (e.g., "comptime", "async", "optionals")
        - Standard library (e.g., "ArrayList", "HashMap", "allocators")
        - Memory management (e.g., "allocator", "defer", "errdefer")
        - Error handling (e.g., "error sets", "try", "catch")
        - Build system (e.g., "build.zig", "zig build")

        NOT SUITABLE FOR: Third-party Zig packages (use GitHub provider for that)

        Args:
            query: Search keywords (e.g., "comptime", "async", "ArrayList", "error handling")

        Returns:
            JSON with matching documentation sections, relevance scores, and source URL

        Example: zig_docs("comptime") → Returns sections about compile-time code execution
        
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (searches documentation and returns matching sections with titles, summaries, relevance scores, and source URL), though it doesn't mention potential limitations like rate limits, authentication needs, or pagination. However, it clearly states the scope (official documentation only) and what to expect in returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage guidelines, examples, parameters, returns, and example), front-loading key information. Every sentence adds value without redundancy, making it efficient and easy to parse despite its comprehensive coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is highly complete. It covers purpose, usage guidelines, behavioral traits, parameter details, return format, and an example, providing all necessary context for an AI agent to understand and invoke the tool correctly without relying on structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It provides a dedicated 'Args' section explaining the single parameter 'query' as 'Search keywords' with concrete examples (e.g., 'comptime', 'async', 'ArrayList', 'error handling'), adding significant meaning beyond the bare schema. The example usage further clarifies parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches Zig programming language documentation, specifying the exact resource (official Zig documentation at ziglang.org/documentation/master/) and distinguishing it from sibling tools that search other documentation sources like GitHub, Docker, or package registries. The verb 'search' is specific and the scope is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'BEST FOR' sections that detail when to use this tool (for Zig language features, syntax, stdlib, or concepts) and 'NOT SUITABLE FOR' that explicitly names an alternative (GitHub provider for third-party Zig packages). It also provides a bulleted list of good query examples, giving clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 27 tool updatesv1.0.0
    • First observedcrates_metadata
    • First observeddocker_image_metadata
    • First observedfetch_docker_image_docs
    • First observedfetch_dockerfile
    • First observedfetch_gcp_service_docs
    • First observedfetch_github_readme
    • First observedfetch_godocs_docs
    • First observedfetch_npm_docs
    • First observedfetch_pypi_docs
    • First observedget_cache_entries
    • First observedget_cache_info
    • First observedget_commit_diff
    • First observedget_file_content
    • First observedget_package_versions
    • First observedget_repo_tree
    • First observedgithub_code_search
    • First observedgithub_repo_search
    • First observedgodocs_metadata
    • First observedlist_github_packages
    • First observedlist_repo_contents
    • First observednpm_metadata
    • First observedpypi_metadata
    • First observedsearch_crates
    • First observedsearch_docker_images
    • First observedsearch_gcp_services
    • First observedsearch_library_docs
    • First observedzig_docs

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific ecosystems (GitHub, Docker, npm, PyPI, etc.), but there is some overlap between fetch_*_docs tools and their corresponding *_metadata tools, which could cause confusion about when to use metadata vs. full docs. Additionally, get_cache_entries and get_cache_info are vague and could be conflated with other tools.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern (e.g., fetch_godocs_docs, search_docker_images, get_file_content) with clear actions and targets. However, there are minor deviations like crates_metadata (plural noun) vs. docker_image_metadata (singular noun) and inconsistent use of underscores in compound terms (e.g., github_code_search vs. search_gcp_services).

Tool Count3/5

With 27 tools, the count is high but justifiable given the broad scope of fetching documentation and metadata across multiple ecosystems (GitHub, Docker, npm, PyPI, GCP, Rust, Go, Zig). However, it borders on being heavy and could overwhelm users, as some tools (like get_cache_entries/info) seem peripheral to the core purpose.

Completeness5/5

The toolset provides comprehensive coverage for documentation and metadata retrieval across supported ecosystems, including search, metadata fetching, and full documentation fetching. Each ecosystem has consistent tooling (e.g., search, metadata, docs fetch), and there are no obvious gaps for the stated purpose of reading documentation from various sources.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides LLMs with up-to-date, version-specific documentation and code examples from library sources directly into prompts, eliminating outdated code generation and hallucinated APIs.
    879,513
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides LLMs with up-to-date, version-specific documentation and code examples directly from library sources, eliminating outdated training data and hallucinated APIs by fetching current documentation at prompt time.
    4
    2
    879,513
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aserper/RTFD'

If you have feedback or need assistance with the MCP directory API, please join our Discord server