gpal
Provides access to Google Gemini models for autonomous codebase exploration and analysis, supporting stateful sessions, multimodal inputs, context caching, and semantic search.
Integrates native OpenTelemetry support for monitoring and distributed tracing, with automatic traceparent header propagation from MCP requests.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gpalExplain authentication flow in this project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gpal
An MCP server that gives your IDE or agent access to Google Gemini with autonomous codebase exploration. Your pal Gemini.
Why gpal?
When you ask gpal a question, Gemini doesn't just guess β it explores your codebase itself. It lists directories, reads files, and searches for patterns before answering. This makes it ideal for:
π Deep code analysis β "Find all error handling patterns in this codebase"
ποΈ Architectural reviews β "How is authentication implemented?"
π Bug hunting β "Why might this function return null?"
π Codebase onboarding β "Explain how the request pipeline works"
πΌοΈ Visual review β Analyze screenshots, diagrams, video via
media_pathsπ Structured extraction β "List all API endpoints as JSON"
Related MCP server: Gemini Bridge
Features
Feature | Description |
Stateful sessions | Maintains conversation history via |
Autonomous exploration | Gemini has tools to list, read, and search files |
FileSearch | Semantic code search via Google's native FileSearch API |
Gemini 3 Series | Supports Flash and Pro with unified auto mode |
Context Caching | Store large code contexts to reduce costs and latency |
Observability | Native OpenTelemetry support (OTLP gRPC) |
Distributed Tracing | Propagates |
Multimodal | Analyze images, audio, video, PDFs |
Batch Processing | Async discounted (~50%) Gemini batch API |
Limits: 10MB file reads, 20MB inline media, 20 search matches max.
Model Tiers
Tool | Model | Use Case |
|
| Lite explores, then Flash synthesizes |
|
| Fast, efficient mapping and searching |
|
| Deep reasoning, complex reviews |
|
| Stateless single-shot queries, no session history |
Auto mode: Lite autonomously explores the codebase (cheap, thorough), then Flash synthesizes over what Lite found. Use model="pro" for deep reasoning (Lite explores, then Pro with thinking HIGH).
Observability & Tracing
gpal supports native OpenTelemetry for monitoring and distributed tracing. It automatically propagates traceparent headers from incoming MCP requests.
# Configure via standard environment variables
export OTEL_SERVICE_NAME="gpal-server"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"
# Or via CLI argument
uv run gpal --otel-endpoint localhost:4317Context Caching
Reduce costs for large projects by caching context on Google's servers:
Upload large files using
upload_file.Create a cache using
create_context_cachewith the returned URIs.Reference the cache name in
consult_geminicalls via thecached_contentparameter.View active caches via the
gpal://cachesresource.
FileSearch
Semantic code search using Google's native FileSearch API β no local embeddings or databases:
# Create a store and upload files
create_file_store("my-project")
upload_to_file_store("stores/...", "src/server.py")
# Gemini searches stores automatically during generation
consult_gemini("find authentication logic", model="auto")Google handles chunking, embedding, and retrieval
Stores managed via
create_file_store,upload_to_file_store,list_file_stores,delete_file_storeWhen stores exist, Gemini searches them automatically during
consult_geminicalls
Custom System Prompts
Customize what Gemini "knows" about you, your project, or your workflow by composing system prompts from multiple sources.
Config file (~/.config/gpal/config.toml):
# Files loaded in order and concatenated
system_prompts = [
"~/.config/gpal/GEMINI.md",
"~/CLAUDE.md",
]
# Inline text appended after files
system_prompt = "εΈΈγ«ζ₯ζ¬θͺγ§εηγγ¦γγ γγ (Always respond in Japanese)"
# Set to false to fully replace the built-in prompt with your own
include_default_prompt = truePaths support ~ and $ENV_VAR expansion, so you can use $WORKSPACE/CLAUDE.md etc.
CLI flags (repeatable, concatenated in order):
# Append additional prompt files
uv run gpal --system-prompt /path/to/project-context.md
# Multiple files
uv run gpal --system-prompt ~/GEMINI.md --system-prompt ./CLAUDE.md
# Replace the built-in prompt entirely
uv run gpal --system-prompt ~/my-prompt.md --no-default-promptComposition order:
Built-in gpal system instruction (unless
include_default_prompt = falseor--no-default-prompt)Files from
system_promptsin config.tomlInline
system_promptfrom config.tomlFiles from
--system-promptCLI flags
Check what's active via the gpal://info resource β it shows which sources contributed and the total instruction length.
Installation
Prerequisites
Python 3.12+
uv (recommended)
Quick Start
git clone https://github.com/tobert/gpal.git
cd gpal
export GEMINI_API_KEY="your_key_here" # or GOOGLE_API_KEY
uv run gpalUsage
Claude Desktop / Cursor / VS Code
Add to your MCP config (e.g., claude_desktop_config.json):
{
"mcpServers": {
"gpal": {
"command": "uv",
"args": ["--directory", "/path/to/gpal", "run", "gpal"],
"env": {
"GEMINI_API_KEY": "your_key_here"
}
}
}
}Then ask your AI assistant:
"Ask Gemini to analyze the authentication flow in this codebase"
"Use
consult_geminito find where errors are handled"
Development
uv run pytest # Run tests
uv run pytest -v # Verbose outputβ οΈ Note: Integration tests (test_connectivity.py, test_agentic.py, test_switching.py) make live API calls and will incur Gemini API costs.
See Also
cpal β The inverse: an MCP server that lets Gemini (or any MCP client) consult Claude. Your pal Claude.
License
MIT β see LICENSE
Roadmap / TODO
Refactoring Agent: A loop that edits files, runs tests (via
code_executionor shell), and iterates until green.Review Agent: specialized system instruction for code review that outputs structured comments.
Available Tools
20 toolscancel_batchADestructive
Cancel a running batch job. Already-completed requests are unaffected.
Args: name: Batch job name from create_batch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as destructive and open-world. The description adds that only the running job is canceled and completed requests are untouched, which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus an args line. It front-loads the purpose and adds necessary detail without waste. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the key aspects. It could mention potential errors or behavior when the batch is already done, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by explaining the 'name' parameter as 'Batch job name from create_batch', providing essential context for the single required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('cancel') and the target ('a running batch job'). It provides nuance about already-completed requests being unaffected. However, it does not explicitly distinguish itself from the sibling tool 'delete_batch', which may cause confusion about when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context that this is for canceling a running batch, and notes that completed requests remain unaffected. It does not specify when not to use it or mention alternatives like 'delete_batch' for finished batches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consult_geminiARead-only
Consult Gemini for codebase analysis.
Gemini autonomously explores our project β reading files, listing directories, and searching code β so we don't need to pre-read files. Just describe what we need. Use file_paths only when specific files must be included.
Pipeline: For auto, flash, and pro, Lite explores quickly first, then our selected model synthesizes. "lite" and explicit model IDs skip the exploration phase and query directly. Gemini's tools: list_directory, read_file, search_project, git, gemini_search; FileSearch stores are searched automatically when present.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The question or instruction | |
| model | No | "auto" (default, Lite explore β Flash analyze), "flash", "pro", "lite", or full model ID | auto |
| file_paths | No | Local text files to read and include inline as context | |
| media_paths | No | Local image/PDF files (.png, .jpg, .webp, .gif, .pdf) for vision analysis | |
| file_uris | No | Gemini File API URIs (from upload_file). Use for large files that exceed inline limits | |
| json_mode | No | Return structured JSON output | |
| response_schema | No | JSON schema string for structured output | |
| cached_content | No | Gemini context cache name | |
| thinking | No | Thinking level: "minimal", "low", "medium", "high", or None. Pro defaults to "high" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds context about autonomous exploration, the pipeline (Lite explores then selected model synthesizes), and lists Gemini's internal tools, which enriches the behavioral model beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and no fluff. Every sentence adds value, though it is slightly longer than necessary for the core purpose. It remains front-loaded with the most critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and number of parameters, the description covers the tool's workflow and parameter usage quite well. It does not explain return values (no output schema), but the rest of the context is sufficiently complete for an agent to understand usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the description adds meaning: explains 'auto' model behavior, that file_paths are for specific inclusions, and that thinking levels affect depth. This provides semantic value beyond the bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's for codebase analysis using Gemini, with autonomous exploration. However, it does not explicitly distinguish itself from the sibling tool 'consult_gemini_oneshot', which may have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use file_paths and explains the pipeline for different models. However, it lacks explicit when-not-to-use conditions or comparisons with sibling tools like gemini_search or consult_gemini_oneshot, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consult_gemini_oneshotARead-only
Stateless single-shot Gemini query with no session history.
Use for independent questions, one-off lookups, or batch-style queries where conversation context would be noise. Still has tool access (list_directory, read_file, etc.) and retry logic.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The question or instruction | |
| model | No | "flash", "pro" (default), or full model ID | pro |
| file_paths | No | Local text files to read and include inline as context | |
| media_paths | No | Local image/PDF files (.png, .jpg, .webp, .gif, .pdf) for vision analysis | |
| file_uris | No | Gemini File API URIs (from upload_file). Use for large files that exceed inline limits | |
| json_mode | No | Return structured JSON output | |
| response_schema | No | JSON schema string for structured output | |
| cached_content | No | Gemini context cache name | |
| thinking | No | Thinking level: "minimal", "low", "medium", "high", or None. Pro defaults to "high" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about statelessness and retry logic beyond the readOnlyHint and openWorldHint annotations. However, it does not detail what happens on failure or idempotency guarantees, keeping 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a line break, elegantly front-loading the core stateless concept and usage context with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, robust schema, and annotations, the description is mostly complete. It lacks mention of the return format (no output schema), but the statelessness and usage guidance are well-covered, earning a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all parameters. The description does not add extra meaning beyond what the schema provides, meeting the baseline for a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Stateless single-shot Gemini query with no session history,' which clearly identifies the tool's purpose and distinguishes it from the sibling 'consult_gemini' that likely maintains session state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using the tool for 'independent questions, one-off lookups, or batch-style queries where conversation context would be noise,' providing clear guidance on when to use it versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_batchA
Submit a batch of queries for async processing (~50% cost discount).
Batches run asynchronously (up to 24h). No tool use β inline all relevant context in each prompt. Use get_batch/list_batches to check status and get_batch_results when the job completes.
The system prompt follows the same configuration as consult_gemini (config.toml, --system-prompt CLI flags).
Args: queries: List of {custom_id: str, prompt: str} dicts. model: Model alias or ID (default: "flash"). "pro" enables deep thinking. temperature: Sampling temperature (default: 0.2).
| Name | Required | Description | Default |
|---|---|---|---|
| queries | Yes | ||
| model | No | flash | |
| temperature | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the openWorldHint annotation, the description discloses key behaviors: asynchronous processing with 24h limit, cost discount, and the system prompt configuration matched from consult_gemini. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence captures the core purpose. The bullet-style Args section is clean and avoids unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and moderate complexity (3 params, 1 required), the description covers all critical aspects: usage, constraints, related tools, and configuration. No gaps remain for this async batch submission tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds essential structure beyond the schema: it specifies that queries are a list of objects with 'custom_id' and 'prompt' strings, and notes that model 'pro' enables deep thinking. With 0% schema coverage, this compensates well, though temperature semantics could be expanded slightly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Submit a batch of queries for async processing (~50% cost discount).' This verb-resource combination immediately distinguishes it from synchronous tools like consult_gemini.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on async nature (up to 24h), inlining context instead of tool use, and using get_batch/list_batches/get_batch_results for status. This tells the agent exactly when and how 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.
create_context_cacheAIdempotent
Create a Gemini context cache for a set of files.
Caching is useful for large files (>32k tokens) used across multiple turns. Model must be an explicit version (e.g., gemini-1.5-flash-001) or a supported alias.
| Name | Required | Description | Default |
|---|---|---|---|
| file_uris | Yes | Gemini File API URIs (from upload_file) | |
| model | No | Model alias or explicit version ID | flash |
| display_name | No | Display name for the cache | |
| ttl_seconds | No | Cache TTL in seconds (default 1 hour) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint and openWorldHint. Description adds context about caching use cases but does not disclose behavior on cache collisions or error conditions. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, three sentences front-loaded with essential information. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers use case, parameter context, and model requirement. Output schema exists, so return values not needed. Could mention prerequisites like authentication, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds value by clarifying file_uris source (from upload_file) and model version requirement, which are not fully covered in schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'create' and the resource 'Gemini context cache', with specific context about files. Distinct from sibling tools like delete_context_cache.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when caching is useful (large files >32k tokens, multiple turns) and model requirements (explicit version or alias). Lacks explicit when-not-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_file_storeA
Create a new FileSearch store for semantic code search.
Upload files to the store with upload_to_file_store. Once populated, Gemini will automatically search the store during consult_gemini calls.
| Name | Required | Description | Default |
|---|---|---|---|
| display_name | Yes | Display name for the store |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that Gemini automatically searches the store during consult_gemini calls after population. No contradictions with annotations (openWorldHint=true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second explains workflow. Front-loaded with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool, it explains the post-creation workflow (upload, then auto-search) and has an output schema, making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No additional semantics beyond the schema's 'display_name' description. 100% schema coverage keeps baseline at 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool creates a new FileSearch store for semantic code search with specific verb and resource. Distinguishes from siblings like delete_file_store and upload_to_file_store.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on how to use the store (upload files then Gemini auto-searches) and implies the creation step is before uploads, but does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_batchADestructiveIdempotent
Delete a batch job. Only works on ended (succeeded/failed/cancelled) jobs.
Args: name: Batch job name from create_batch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate `destructiveHint: true` and `idempotentHint: true`. The description adds the key behavioral detail that the tool only succeeds on ended jobs, preventing misuse on active jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with the core action. It could be extended slightly to cover error cases, but it is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive tool with one parameter and annotations covering safety, the description is complete enough. It specifies the constraint and parameter origin, and the output schema exists, so return values are handled elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage for parameter descriptions, so the description carries the burden. It explains that `name` is the batch job name from `create_batch`, which adds context but no further details about format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a batch job, with the specific constraint that it only works on ended jobs (succeeded/failed/cancelled). This distinguishes it from the sibling `cancel_batch` which targets active jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Only works on ended jobs,' guiding the agent not to use it on active jobs. While it doesn't name the alternative explicitly, the sibling `cancel_batch` is implied for active jobs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_context_cacheBDestructiveIdempotent
Delete a Gemini context cache.
| Name | Required | Description | Default |
|---|---|---|---|
| cache_name | Yes | Cache name to delete (from create_context_cache) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the agent knows this is a mutating operation. The description adds no further behavioral details (e.g., side effects, irreversibility, or consequences of deleting in-use caches). With annotations covering the basic safety profile, a score of 3 is appropriate because the description does not enhance transparency beyond what is already structured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that gets straight to the point. It is front-loaded and efficient, though it could benefit from mentioning idempotency or return behavior. Still, it avoids unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no nested objects, output schema present), the description is minimally adequate. However, it does not explain what happens on successful deletion (e.g., returns nothing or a confirmation) or any error conditions. The output schema exists but the description doesn't leverage it to set expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself provides a clear meaning for cache_name ('Cache name to delete (from create_context_cache)'). The description adds no additional semantics beyond the schema. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Delete' and the resource 'Gemini context cache'. It uses a specific verb and resource, and it's easily distinguishable from sibling tools like create_context_cache, get_batch, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as when to delete a cache versus leaving it or using another deletion tool. The description does not mention any prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_file_storeADestructive
Delete a FileSearch store and all its documents.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Store resource name (e.g. 'fileSearchStores/xxx') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the important detail that all documents are deleted, which supplements the 'destructiveHint' annotation. However, it doesn't mention permissions, irreversibility, or rate limits, though the annotation already signals destructiveness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no extraneous words, directly communicating the tool's action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple operation (one parameter) and presence of output schema, the description covers the core effect. It could mention that the operation is irreversible to enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning to the 'name' parameter beyond what the schema already provides (resource name format).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('FileSearch store') and clarifies that all associated documents are also removed, distinguishing it from siblings like 'delete_batch' or 'delete_context_cache'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but provides no explicit guidance on when to use it versus alternatives like 'delete_batch' or 'create_file_store'. Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gemini_code_execARead-only
Execute Python code using Gemini's built-in code execution sandbox.
Returns stdout, stderr, and any execution results. Stateless utility.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python code to execute | |
| model | No | Model to use for code execution | gemini-flash-latest |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. Description adds behavioral context: execution in a sandbox, statelessness, and return of stdout/stderr/results. No contradictions. Could elaborate on sandbox limitations but overall adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states core action and environment, second covers outputs and statefulness. No redundant words, front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a code execution tool, description covers inputs, sandbox environment, and outputs. An output schema exists, so return details are not required. Could be enhanced with information on timeouts or available libraries, but the current description is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions (code, model). The description does not add new information about parameters; it restates 'Execute Python code' which aligns with the code parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Execute' and the resource 'Python code' using 'Gemini's built-in code execution sandbox'. Distinguishes from sibling tools like consult_gemini or gemini_search, which are for querying, not code execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes what the tool does and what it returns (stdout, stderr, results). Mentions it is 'Stateless utility', implying isolated executions. However, no explicit comparison or guidance on when to use this versus alternative tools for similar tasks (e.g., consult_gemini).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gemini_searchARead-only
Search the web using Gemini's built-in Google Search.
Returns formatted search results (titles, URLs, snippets). Stateless utility.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| num_results | No | ||
| model | No | gemini-flash-latest |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, indicating safe and stateless behavior. The description adds that it returns 'formatted search results (titles, URLs, snippets)' and states it is a 'stateless utility', providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (two sentences), front-loaded with the main purpose, and every sentence adds value. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers purpose and return format but is missing parameter explanations. For a tool with 3 parameters (one required), this is a gap, making it only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the meaning or usage of any parameters (query, num_results, model). The parameter names are self-explanatory, but the description fails to add value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search the web using Gemini's built-in Google Search.' It specifies the verb 'search' and the resource 'web', and distinguishes itself from sibling tools like consult_gemini which are for general conversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for web search but provides no explicit guidance on when to use this tool versus alternatives like consult_gemini or consult_gemini_oneshot. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageA
Generates an image using Imagen or Nano Banana (Gemini image) models.
Args: prompt: Text description of the image to generate. output_path: File path to save the generated image. model: Model alias or ID. "imagen" (default, ultra), "imagen-fast", "nano-pro", or "nano-flash". aspect_ratio: Aspect ratio (e.g. "1:1", "16:9", "9:16", "4:3", "3:4"). image_size: Output size for Nano Banana only (e.g. "1024x1024"). Not supported by Imagen.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Text description of the image to generate | |
| output_path | Yes | File path to save the generated image | |
| model | No | "imagen" (default, ultra), "imagen-fast", "nano-pro", or "nano-flash" | imagen |
| aspect_ratio | No | Aspect ratio (e.g. "1:1", "16:9", "9:16", "4:3", "3:4") | |
| image_size | No | Output size for Nano Banana only (e.g. "1024x1024"). Not supported by Imagen |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include openWorldHint=true. The description explains the model options and constraints (e.g., image_size not supported by Imagen) but lacks details on error handling, rate limits, or other side effects. Minimal behavioral disclosure beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with bullet-like clarity and front-loaded purpose. A few words could be trimmed, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has output schema so return format is covered. Explains all parameters and model-specific behavior. Lacks guidance on when to choose each model variant, but sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds some clarification (e.g., defaults, model restrictions) but does not significantly exceed the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates an image using named models (Imagen, Nano Banana). It lists key parameters and distinguishes from unrelated siblings like generate_speech, which is for audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, or when not to use it. It provides parameter details but does not add usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_speechB
Synthesizes speech from text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to synthesize into speech | |
| output_path | Yes | File path to save the generated audio (.wav) | |
| voice_name | No | Voice name (e.g. Puck, Charon, Kore, Fenrir, Aoede) | Puck |
| model | No | "speech" (default, Pro quality) or "speech-fast" | speech |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite openWorldHint annotation indicating side effects, the description does not mention that the tool saves audio to an output file. This omission reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no redundant information. Single sentence that clearly states the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists, the description lacks details on output format, file type, or usage constraints. Adequate but could be more informative for a tool with multiple parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The tool description adds no new information beyond the schema, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Synthesizes speech from text.' uses a specific verb and resource, clearly indicating the tool's function. It distinguishes itself from sibling tools like generate_image and consult_gemini.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives or prerequisites. Missing context on appropriate use cases or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batchARead-only
Get the status of a batch job.
Args: name: Batch job name (e.g. "batches/abc") from create_batch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true (safe read) and openWorldHint=true (unexpected response fields). The description adds 'status' but does not elaborate on what the status includes or any side effects. With annotations covering safety, the description provides minimal additional behavioral context, just a restatement of the tool's reading nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences. The first sentence states purpose upfront, and the second explains the single parameter. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-status tool with one required parameter and an output schema, the description covers the essential purpose and parameter. However, it does not explicitly state that the parameter is required (though the schema does), nor does it mention error handling or batch status semantics. Still, it is nearly complete given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully by specifying that 'name' is a batch job name (e.g., 'batches/abc') from create_batch. This adds meaning, format, and origin beyond the schema's bare type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the status of a batch job,' which is a specific verb and resource. It distinguishes itself from sibling tools like cancel_batch, create_batch, delete_batch, list_batches, and get_batch_results by focusing on status retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by noting the name comes from create_batch, but it does not explicitly state when to use this tool versus alternatives like list_batches (to enumerate all batches) or get_batch_results (to get actual outputs). No exclusion or when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batch_resultsARead-only
Get results from a completed batch job.
Only available when state is JOB_STATE_SUCCEEDED or JOB_STATE_PARTIALLY_SUCCEEDED. Results include text extracted from each response, keyed by custom_id.
Args: name: Batch job name from create_batch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint: true. The description adds that results are only available on specific job states and that they include text extracted from each response keyed by custom_id, which is valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: three sentences plus an args line. Every sentence is necessary and front-loaded with the purpose, with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description does not need to detail return values. It covers the single parameter, the valid states, and the nature of results. This is fully complete for a read-only result retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameter description (0% coverage). The description explains that 'name' is the batch job name from create_batch, which adds critical context for the agent to correctly identify the parameter's purpose and source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get results from a completed batch job', specifying the verb and resource. It distinguishes itself from siblings like get_batch (which likely retrieves job metadata) by focusing on results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states availability conditions (state must be JOB_STATE_SUCCEEDED or JOB_STATE_PARTIALLY_SUCCEEDED) and indicates the name parameter comes from create_batch. Does not mention alternatives or when not to use, but the precondition is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_batchesARead-only
List recent batch jobs.
Args: limit: Maximum number of batches to return (default: 20, max: 100).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. Description adds that it returns 'recent' jobs and explains limit behavior, providing some context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise with two sentences, front-loaded purpose. Uses an informal 'Args:' style but remains efficient with no unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple list tool with one optional parameter and an output schema. Could mention ordering or pagination, but not critical given output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage for limit. Description explains default value (20) and maximum (100), adding meaning beyond the schema's type and default fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List recent batch jobs' with a specific verb and resource. Distinguishes from siblings like get_batch and create_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_batch or get_batch_results. Only describes the limit parameter, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_file_storesARead-only
List all FileSearch stores with document counts and sizes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. Description adds specific output details (document counts, sizes) beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, front-loaded with verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema, the description sufficiently covers what the tool does and returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description need not add parameter info; baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'List', the resource 'FileSearch stores', and the included details 'document counts and sizes'. Distinguishes from siblings like 'list_batches' or 'list_models'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, but for a simple list operation the context is clear among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsARead-onlyIdempotent
List available Gemini models grouped by capability.
Queries the Gemini API for all accessible models and groups them by supported actions (generateContent, generateImages, embedContent, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and openWorldHint, so the description adds value by explaining the grouping behavior. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and every sentence adds meaningful detail without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero parameters, presence of output schema, and rich annotations, the description provides enough context about behavior (grouping by capability) to fully understand the tool's output and purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and schema coverage is effectively 100%. Baseline is 3 as per guidelines, and the description does not need to add parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'available Gemini models', and adds the specific grouping by capability, which distinguishes it from sibling tools that focus on batches, files, or other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about querying all accessible models and grouping by actions. While it does not explicitly exclude alternatives, the uniqueness of the tool among siblings makes the usage straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileCIdempotent
Upload a large file to Gemini's File API.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the local file to upload | |
| display_name | No | Display name in the Files API (defaults to filename) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds minimal behavioral context beyond what annotations already provide. Annotations indicate idempotency and open-world hints, but the description does not elaborate on traits like file size handling, error behavior, or storage semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary information, effectively communicating the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file upload tool, the description lacks critical context such as supported file types, maximum file size, authentication requirements, or how the output schema defines the response. Given the existence of an output schema, more behavioral notes would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any additional meaning beyond what the schema already provides for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (upload), resource (large file), and target (Gemini's File API), providing a specific verb and resource. However, it does not differentiate from the sibling tool 'upload_to_file_store', which might serve a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'upload_to_file_store' or other upload-related tools. There is no mention of prerequisites, file size limits, or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_to_file_storeA
Upload a file to a FileSearch store for semantic search.
Supported: text, code, PDF, and other document formats. Files are chunked and embedded by Google for retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| store_name | Yes | Store resource name (from create_file_store) | |
| file_path | Yes | Path to the local file to upload | |
| display_name | No | Display name for the file in the store |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that files are 'chunked and embedded by Google for retrieval', adding value beyond the openWorldHint annotation. No contradictory information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded main action, no redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, supported formats, and processing. Output schema exists, so return values not needed. Could mention prerequisite store existence, but acceptable given context signals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. Description adds context on supported file formats but does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'upload', resource 'FileSearch store', and purpose 'for semantic search'. Supported formats listed. Differentiates from siblings like 'upload_file' and 'create_file_store'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage context (uploading to a store for semantic search) and lists supported formats, but does not explicitly state when to use vs alternatives like 'upload_file' or exclude scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes, but consult_gemini and consult_gemini_oneshot overlap significantly (both query Gemini, differing only in statefulness). The descriptions help differentiate them, but the similarity could cause misselection.
Naming is mostly snake_case and verb-driven (e.g., create_batch, delete_file_store), but some tools start with nouns (gemini_code_exec, gemini_search) and there's no consistent pattern like verb_noun. This inconsistency may confuse agents.
20 tools is on the higher side but still reasonable for wrapping Gemini's extensive API. Each tool covers a distinct feature (batch, file stores, caching, search, generation), so the count feels appropriate.
The tool set covers major Gemini capabilities: batch processing, file management, caching, code execution, web search, image/speech generation, and model listing. Minor gaps exist (e.g., no tool to list uploaded files or update cache settings), but core workflows are solid.
Maintenance
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
An MCP server that gives your AI access to the source code and docs of all public github repos
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Related MCP Servers
- AlicenseBqualityDmaintenanceA lightweight MCP server that enables AI agents to perform deep codebase analysis by leveraging Gemini's massive context window for cross-file analysis and intelligent file selection.429MIT
- AlicenseAqualityFmaintenanceA lightweight MCP server that enables AI coding assistants to interact with Google's Gemini AI through the official CLI.3MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that integrates Google Gemini CLI with Claude Code for AI-powered development assistance, enabling code review, bug analysis, feature planning, and code explanation without requiring an API key.8MIT
- AlicenseAqualityCmaintenanceGemini-powered MCP server for automated code review, analysis, and documentation.1361MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/tobert/gpal'
If you have feedback or need assistance with the MCP directory API, please join our Discord server