metabase-mcp
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., "@metabase-mcprun a SQL query to get monthly sales for 2024"
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.
Metabase MCP Server - Connect AI Assistants to Your Metabase Analytics
A high-performance Model Context Protocol (MCP) server for Metabase, enabling AI assistants like Claude, Cursor, and other MCP clients to interact seamlessly with your Metabase instance. Query databases, execute SQL, manage dashboards, and automate analytics workflows with natural language through AI-powered database operations.
Perfect for: Data analysts, developers, and teams looking to integrate AI assistants with their Metabase business intelligence platform for automated SQL queries, dashboard management, and data exploration.
Key Features
Database Operations
List Databases: Browse all configured Metabase databases
Table Discovery: Explore tables with metadata and descriptions
Field Inspection: Get detailed field/column information with smart pagination
Query & Analytics
SQL Execution: Run native SQL queries with parameter support and templating
MongoDB Support: Execute native MongoDB queries with automatic JSON conversion for aggregation pipelines
Card Management: Execute, create, and manage Metabase questions/cards (SQL and MongoDB)
Collection Organization: Create and manage collections for better organization
Natural Language Queries: Let AI assistants translate questions into SQL or MongoDB queries
Authentication & Security
API Key Support: Secure authentication via Metabase API keys (recommended)
Session-based Auth: Alternative email/password authentication
Environment Variables: Secure credential management via
.envfiles
AI Assistant Integration
Claude Desktop: Native integration with Anthropic's Claude AI
Cursor IDE: Seamless integration for AI-assisted development
Any MCP Client: Compatible with all Model Context Protocol clients
Enhanced Performance & Reliability
Context-aware Logging: Real-time logging with debug, info, warning, and error levels visible to AI clients
Proper Error Handling: FastMCP
ToolErrorexceptions for better error messages and debuggingMiddleware Stack: Built-in error handling and logging middleware for production reliability
Best Practices: Follows latest FastMCP patterns with duplicate prevention and clean configuration
Modern Python: Uses Python 3.12+ type hints (
|syntax) for better type safety
Related MCP server: Metabase MCP Server
Quick Start
Prerequisites
Python 3.12+
Metabase instance with API access
uvxoruvpackage manager
Installation
Option 1: Using uvx (Easiest - No Installation Required)
# Run directly without installing (like npx for Python)
uvx metabase-mcp
# With environment variables
METABASE_URL=https://your-instance.com METABASE_API_KEY=your-key uvx metabase-mcpOption 2: Install from PyPI
# Install globally
uv tool install metabase-mcp
# Or with pip
pip install metabase-mcp
# Then run
metabase-mcpOption 3: Development Setup (From Source)
# Clone the repository
git clone https://github.com/cheukyin175/metabase-mcp.git
cd metabase-mcp
# Install dependencies
uv sync
# Run the server
uv run python server.pyConfiguration
Create a .env file with your Metabase credentials:
cp .env.example .envConfiguration Options
Option 1: API Key Authentication (Recommended)
METABASE_URL=https://your-metabase-instance.com
METABASE_API_KEY=your-api-key-hereOption 2: Email/Password Authentication
METABASE_URL=https://your-metabase-instance.com
METABASE_USER_EMAIL=your-email@example.com
METABASE_PASSWORD=your-passwordOptional: Metabase API HTTP Timeout
METABASE_HTTP_TIMEOUT=30.0 # Default: 30.0 secondsOptional: Custom Host/Port for SSE/HTTP
HOST=localhost # Default: 0.0.0.0
PORT=9000 # Default: 8000Usage
Run the Server
Quick Start (No Setup Required)
# Run directly with uvx
uvx metabase-mcp
# With custom Metabase instance
METABASE_URL=https://your-instance.com METABASE_API_KEY=your-key uvx metabase-mcpFrom Source (Development)
# STDIO transport (default)
uv run python server.py
# SSE transport (uses HOST=0.0.0.0, PORT=8000 by default)
uv run python server.py --sse
# HTTP transport (uses HOST=0.0.0.0, PORT=8000 by default)
uv run python server.py --http
# Custom host and port via environment variables
HOST=localhost PORT=9000 uv run python server.py --sse
HOST=192.168.1.100 PORT=8080 uv run python server.py --httpCursor Integration
You can manually configure Cursor by editing your Cursor settings.
For SSE transport: You must start the server before using Cursor:
uv run python server.py --sseClaude Desktop Integration
Option 1: Using uvx (Recommended)
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"metabase-mcp": {
"command": "uvx",
"args": ["metabase-mcp"],
"env": {
"METABASE_URL": "https://your-metabase-instance.com",
"METABASE_API_KEY": "your-api-key-here"
}
}
}
}Option 2: Using Local Installation
If you've cloned the repository:
{
"mcpServers": {
"metabase-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/metabase-mcp",
"python",
"server.py"
],
"env": {
"METABASE_URL": "https://your-metabase-instance.com",
"METABASE_API_KEY": "your-api-key-here"
}
}
}
}Option 3: Using FastMCP CLI
fastmcp install server.py -n "Metabase MCP"Available Tools
Database Operations
Tool | Description |
| List all configured databases in Metabase |
| Get all tables in a specific database with metadata |
| Retrieve field/column information for a table |
Query Operations
Tool | Description |
| Execute native SQL queries with parameter support |
| Execute native MongoDB queries with automatic JSON conversion for aggregation pipelines |
| Run saved Metabase questions/cards |
Card Management
Tool | Description |
| List all saved questions/cards |
| Create new questions/cards with SQL queries |
| Create new MongoDB questions/cards with native query support |
Collection Management
Tool | Description |
| Browse all collections |
| Create new collections for organization |
Transport Methods
The server supports multiple transport methods:
STDIO (default): For IDE integration (Cursor, Claude Desktop)
SSE: Server-Sent Events for web applications
HTTP: Standard HTTP for API access
uv run python server.py # STDIO (default)
uv run python server.py --sse # SSE (HOST=0.0.0.0, PORT=8000)
uv run python server.py --http # HTTP (HOST=0.0.0.0, PORT=8000)
HOST=localhost PORT=9000 uv run python server.py --sse # Custom host/portDevelopment
Setup Development Environment
# Install with dev dependencies
uv sync --group dev
# Or with pip
pip install -r requirements-dev.txtCode Quality
# Run linting
uv run ruff check .
# Format code
uv run ruff format .
# Type checking
uv run mypy server.pyUsage Examples
Query Examples
# List all databases
databases = await list_databases()
# Execute a SQL query
result = await execute_query(
database_id=1,
query="SELECT * FROM users LIMIT 10"
)
# Create and run a card
card = await create_card(
name="Active Users Report",
database_id=1,
query="SELECT COUNT(*) FROM users WHERE active = true",
collection_id=2
)Project Structure
metabase-mcp/
├── server.py # Main MCP server implementation
├── pyproject.toml # Project configuration and dependencies
└── .env.example # Environment variables templateContributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details
Resources
Keywords & Topics
metabase mcp model-context-protocol claude cursor ai-assistant fastmcp sql database analytics business-intelligence bi data-analysis anthropic llm python automation api data-science query-builder natural-language-sql
Star History
If you find this project useful, please consider giving it a star! It helps others discover this tool.
Use Cases
Natural Language Database Queries: Ask Claude to query your Metabase databases using plain English
Automated Report Generation: Use AI to create and manage Metabase cards and collections
Data Exploration: Let AI assistants help you discover insights from your data
SQL Query Assistance: Get help writing and optimizing SQL queries through AI
Dashboard Management: Automate the creation and organization of Metabase dashboards
Data Analysis Workflows: Integrate AI-powered analytics into your development workflow
Available Tools
28 toolsadd_card_to_dashboardA
Add an existing card to a dashboard at a specified position and size.
Args: dashboard_id: The ID of the dashboard to add the card to. card_id: The ID of the card to add. col: Column position on the dashboard grid (default: 0). row: Row position on the dashboard grid (default: 0). size_x: Width of the card in grid units (default: 6). size_y: Height of the card in grid units (default: 4).
Returns: The created dashboard card object.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| card_id | Yes | ||
| col | No | ||
| row | No | ||
| size_x | No | ||
| size_y | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 states the return value but does not disclose side effects (e.g., whether the card is linked to the dashboard, if existing position is overwritten, or any state changes). Minimal behavioral disclosure.
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 well-structured: a clear one-sentence purpose followed by structured Args/Returns sections. Every sentence adds value, with no 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?
The description covers all parameters and the return value. Given the tool's moderate complexity (6 params, 2 required) and the presence of an output schema, it is fairly complete. However, it lacks context on when to use this tool vs. siblings, slightly lowering the score.
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 includes a full docstring covering all 6 parameters with meanings (e.g., 'col: Column position on the dashboard grid'), adding significant semantic value beyond the schema's type/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?
The description clearly states the action: 'Add an existing card to a dashboard at a specified position and size.' It uses a specific verb and resource, and distinguishes this from sibling tools like 'update_dashboard_card_position' (which repositions existing cards) and 'create_card' (which creates new cards).
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 no guidance on when to use this tool versus alternatives (e.g., 'reposition_dashboard_cards', 'create_card'), nor does it mention prerequisites like the card and dashboard must exist. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cardA
Create a new question/card in Metabase.
Args: name: Name of the card. database_id: ID of the database to query. query: SQL query for the card. description: Optional description. collection_id: Optional collection to place the card in. visualization_settings: Optional visualization configuration.
Returns: The created card object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| database_id | Yes | ||
| query | Yes | ||
| description | No | ||
| collection_id | No | ||
| visualization_settings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool creates a card and returns the created object, implying a write operation. However, it does not disclose potential side effects (e.g., duplicate name handling), required permissions, or idempotency. Some transparency exists but gaps remain.
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 a clear header, parameter list, and return statement. Each parameter gets its own line for readability. However, the parameter lines are somewhat repetitive ('Args:' prefix), and could be more concise without losing clarity.
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 an output schema exists, the description does not need to detail return values beyond noting it returns the card object. It covers all required and optional parameters with brief explanations. However, it does not specify constraints like valid SQL format or database_id existence checks, leaving some questions for a complete agent.
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 0%, so description must compensate. It lists all 6 parameters with brief explanations, adding meaning beyond the schema's type definitions. However, some explanations are tautological (e.g., 'name: Name of the card.'), and for complex fields like visualization_settings, no additional format guidance is given, limiting depth.
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 'Create a new question/card in Metabase.' with a specific verb and resource. It lists all parameters and their roles, and distinguishes from sibling tools like create_model or create_dashboard by focusing on 'card'. The name and description together make the tool's purpose unambiguous.
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 no guidance on when to use this tool versus alternatives like create_mongodb_card or create_model. It does not mention prerequisites, error conditions, or contexts where this tool is preferred. The only instructions are parameter explanations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_collectionA
Create a new collection in Metabase.
Args: name: Name of the collection. description: Optional description. color: Optional color for the collection. parent_id: Optional parent collection ID.
Returns: The created collection object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| color | No | ||
| parent_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description implies mutation ('Create') and mentions the return object, but does not disclose permissions, uniqueness constraints, or side effects like whether parent_id is validated.
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: a one-line summary, structured Args list, and a Returns line. Every element is essential and front-loaded.
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?
The description covers purpose, parameters, and return value. With a straightforward tool (no enums, few params) and an output schema existing, it is sufficiently complete, though potential edge cases (e.g., invalid parent_id) are not addressed.
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%, so the description adds value by explaining each parameter (e.g., 'name: Name of the collection'). The explanations are clear and useful, though brief.
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 'Create a new collection in Metabase,' using a specific verb and resource. It distinguishes from sibling tools like create_card or create_dashboard.
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 lists parameters and their purposes, but provides no guidance on when to use this tool versus alternatives (e.g., list_collections) or what prerequisites exist (e.g., parent_id must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dashboardA
Create a new dashboard in Metabase.
Args:
name: Name of the dashboard.
description: Optional description of the dashboard.
collection_id: Optional collection ID to place the dashboard in.
parameters: Optional list of parameter/filter configurations for the dashboard.
– Returns: The created dashboard object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| collection_id | No | ||
| parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It correctly states that the tool creates a new dashboard and returns the object, but does not disclose any side effects, authorization needs, rate limits, or persistence details. Basic, but adequate for a straightforward creation tool.
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 efficiently structured with a one-line purpose statement followed by clear Args and Returns sections. Every sentence adds value without redundancy. The front-loaded purpose immediately informs the agent.
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 moderate complexity (4 params, no annotations, but output schema exists), the description covers the essential aspects. It explains each parameter and the return value. Minor omissions include default behavior for collection_id and detailed parameter format, but overall sufficient.
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 0% parameter descriptions, yet the tool description provides one-line explanations for all four parameters (name, description, collection_id, parameters). This adds meaningful context beyond the schema types, though it could be more explicit about the format of '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 explicitly states 'Create a new dashboard in Metabase.' which is a clear verb-resource pairing. The tool name 'create_dashboard' aligns perfectly with this purpose, and it is well-distinguished from sibling tools like 'list_dashboards' and 'update_dashboard'.
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 creating a new dashboard but lacks explicit guidance on when to use this tool versus alternatives (e.g., when a dashboard already exists, or prerequisites like collection existence). No exclusions or contextual hints are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_modelA
Create a new model in Metabase.
A model is a special type of saved question that acts as a curated dataset. Models can define metadata for their columns and serve as building blocks for other questions.
Args: name: Name of the model. database_id: ID of the database to query. query: SQL query that defines the model. description: Optional description of the model. collection_id: Optional collection to place the model in. result_metadata: Optional list of column metadata dicts. Each dict can include keys like "name", "display_name", "base_type", "semantic_type", "description", and "field_ref". visualization_settings: Optional visualization configuration.
Returns: The created model object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| database_id | Yes | ||
| query | Yes | ||
| description | No | ||
| collection_id | No | ||
| result_metadata | No | ||
| visualization_settings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It mentions the creation action and return of the model object, but does not disclose side effects, permissions, or error conditions.
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 a brief opening, model explanation, and clearly separated Args/Returns sections. It is appropriately sized, though the explanation of models could be slightly more concise.
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, the description adequately covers purpose, parameters, and returns. However, it lacks details on prerequisites, default behavior (e.g., collection placement), and limitations.
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 0% description coverage, but the tool description provides detailed explanations for all 7 parameters in the Args section, adding significant meaning beyond the raw schema.
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 'Create a new model in Metabase' and explains that a model is a curated dataset, distinct from saved questions. This distinguishes it from sibling tools like 'create_card' and 'create_mongodb_card'.
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 explains that models serve as curated datasets and building blocks, providing context on when to use this tool. However, it lacks explicit 'when not to use' guidance or comparisons to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mongodb_cardA
Create a new MongoDB question/card in Metabase.
Args: name: Name of the card. database_id: ID of the MongoDB database. collection: MongoDB collection name. query: MongoDB query string (aggregation pipeline or query). description: Optional description. collection_id: Optional collection to place the card in. visualization_settings: Optional visualization configuration.
Returns: The created MongoDB card object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| database_id | Yes | ||
| collection | Yes | ||
| query | Yes | ||
| description | No | ||
| collection_id | No | ||
| visualization_settings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only states the creation action and return value, but omits behavioral details such as required permissions, data validation, side effects, or error handling. This is insufficient for an agent to understand consequences.
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 a title, Args list, and Returns. It is concise, front-loading the purpose, and every sentence adds value 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 tool has 7 parameters and an output schema exists, the description covers the basic purpose but lacks context on prerequisites (e.g., database must exist), error conditions, and how it fits with sibling tools. It is minimally 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 coverage is 0%, so the description must compensate. It adds brief explanations for each parameter (e.g., 'MongoDB query string (aggregation pipeline or query)'), which gives meaning beyond the schema. However, some parameters like 'visualization_settings' could be more detailed.
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 explicitly states 'Create a new MongoDB question/card in Metabase', which is a specific verb-resource combination. It clearly distinguishes from sibling tools like 'create_card' (general) and 'create_model' (different resource).
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 such as 'create_card' or 'execute_mongodb_query'. The description implies it is for MongoDB cards but does not provide any context on prerequisites or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_cardA
Execute a saved Metabase question/card and retrieve results.
Args: card_id: The ID of the card to execute. parameters: Optional parameters for the card execution.
Returns: Card execution results.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description minimally indicates the tool executes a card and returns results, implying a read-like operation. However, it does not clarify whether the execution modifies state or has side effects, leaving some ambiguity.
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, using two sentences plus an Args/Returns block. It is front-loaded with the core purpose. However, it could be slightly more compact by removing the redundant 'Args' and 'Returns' labels if not needed.
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 the description covers the basic purpose and parameters, it lacks context about error handling, authentication requirements, or when to prefer this tool over similar ones (e.g., execute_query). Given the complexity and sibling tools, it is minimally 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?
The description explains both parameters: card_id as the ID of the card, and parameters as optional execution parameters. This adds meaning beyond the schema's bare types (integer, object), especially given the schema's 0% description coverage.
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 function: 'Execute a saved Metabase question/card and retrieve results.' It uses a specific verb ('execute') and resource ('card'), distinguishing it from siblings like create_card or list_cards.
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 over alternatives such as execute_query or execute_mongodb_query. The description does not mention when it is appropriate or when to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_mongodb_queryB
Execute a MongoDB native query against a Metabase database.
Args: database_id: The ID of the MongoDB database to query. collection: The MongoDB collection name. query: The MongoDB query (aggregation pipeline array or query object). native_parameters: Optional parameters for the query.
Returns: Query execution results.
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes | ||
| collection | Yes | ||
| query | Yes | ||
| native_parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for disclosing behavior. It mentions 'execute' but does not specify if write operations (insert, update, delete) are allowed or if it is read-only. No warnings about destructive potential or authentication requirements are provided.
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 plus Args/Returns list) with no wasted words. The structured format (Args/Returns) improves readability for an agent.
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?
Despite having an output schema (which describes return values), the description lacks critical context such as usage guidelines and behavioral transparency. For a tool that executes arbitrary MongoDB queries, it should mention potential side effects (e.g., writes) and recommended use cases. The description is incomplete for such a powerful 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 meaning to all parameters beyond the schema, especially clarifying that 'query' can be an 'aggregation pipeline array or query object.' For 'native_parameters,' it explains they are optional but could be more specific (e.g., parameter binding). Given 0% schema coverage, this is a strong contribution.
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 'Execute a MongoDB native query against a Metabase database,' specifying the verb, resource, and context. It distinguishes from siblings like execute_query (SQL) and execute_card (saved card) by emphasizing native MongoDB.
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 (e.g., execute_query, create_mongodb_card) or when not to use it (e.g., for simple queries). Prerequisites like having a MongoDB database configured are implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_queryB
Execute a native SQL query against a Metabase database.
Args: database_id: The ID of the database to query. query: The SQL query to execute. native_parameters: Optional parameters for the query.
Returns: Query execution results.
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes | ||
| query | Yes | ||
| native_parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description fails to disclose potential risks of executing raw SQL, such as destructive actions or permission requirements. It mentions 'native SQL' but does not warn of dangers.
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, front-loaded with purpose, and uses a structured docstring format without 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?
For a tool executing raw SQL, the description is too sparse. It omits security, output structure (despite having an output schema), and potential side effects, leaving agents with insufficient context.
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 adds brief parameter explanations (e.g., 'The ID of the database to query'). However, 'native_parameters' is vague, lacking detail on format or usage.
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 executes a native SQL query against a Metabase database, distinguishing it from siblings like execute_card and execute_mongodb_query.
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 execute_card or execute_mongodb_query. Lacks context about prerequisites or suitable scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboard_cardsB
Get the cards and their layout information for a specific dashboard.
Returns each card's id, name, display type, size, and position on the dashboard grid (col, row, size_x, size_y).
Args: dashboard_id: The ID of the dashboard.
Returns: A list of dashboard card objects with layout and card metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as side effects, error handling, authentication requirements, or rate limits. It only describes input and output format.
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 well-structured: first sentence states purpose, then lists return fields, then defines argument and return sections. 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?
The description adequately covers input, output, and return structure. It is fairly complete for a simple read tool with one parameter and an output schema, though it lacks error handling context.
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 only one parameter and 0% schema coverage in the input schema, the description adds a brief explanation for dashboard_id. However, this is minimal and could be more precise (e.g., specifying it comes from list_dashboards).
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 retrieves cards and layout info for a specific dashboard, listing specific return fields. However, it doesn't explicitly differentiate from sibling tools like 'list_dashboard_tab_cards' which may have similar 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?
The description implies the user needs a dashboard_id, but provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_fieldsA
Get all fields/columns in a specific table.
Args: table_id: The ID of the table. limit: Maximum number of fields to return (default: 20).
Returns: Dictionary with field metadata, truncated if necessary.
| Name | Required | Description | Default |
|---|---|---|---|
| table_id | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses truncation behavior ('truncated if necessary') but does not mention error conditions, authorization needs, or performance implications. Adequate but incomplete for a read operation without 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?
Three short, clear sentences with bullet-like arg descriptions. No fluff, but the arg section could be condensed into a single sentence while retaining clarity.
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?
Despite existence of output schema (not shown), description provides only vague return info: 'Dictionary with field metadata, truncated if necessary'. In a low-complexity tool, this is adequate but could specify keys like 'name', 'type' etc.
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, so description adds essential meaning: table_id is 'ID of the table', limit is 'Maximum number of fields to return (default: 20)'. This compensates well for the schema gap.
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?
Description clearly states 'Get all fields/columns in a specific table', using specific verb ('Get') and resource ('fields/columns in a specific table'), effectively distinguishing from sibling tools like 'list_tables' or 'list_databases'.
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, nor any conditions for use. Usage is implied for retrieving table column metadata, but lacking directives like 'Use this instead of list_tables when you need column details'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cardsB
List all saved questions/cards in Metabase.
Returns: Dictionary containing all cards with their metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the return type (dictionary with metadata) but does not disclose whether the tool is read-only, requires authentication, or has rate limits. For a listing tool, read-only hint is implicit but not explicit, which is insufficient for safe agent decisions.
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), front-loaded with the purpose, and every sentence adds value. No redundant or verbose text. This is an exemplar of conciseness.
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 no parameters and no annotations, the description is minimally adequate. It states what it does and what it returns. However, it lacks any guidance on usage context or when to prefer this over siblings. The presence of an output schema likely covers return details, but the description misses behavioral cues for safe selection.
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 zero parameters, so baseline is 4. The description does not need to explain parameters because none exist. It correctly focuses on the action and return value.
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 action 'List all' and resource 'saved questions/cards in Metabase'. It is specific about what it returns. However, it does not distinguish from sibling tools like 'get_dashboard_cards' which also returns cards but filtered by dashboard. The purpose is clear but lacks differentiation.
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 no guidance on when to use this tool versus alternatives like 'get_dashboard_cards' or 'list_collections'. It does not mention any prerequisites or exclusions. Agents have no context to choose the right tool among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsA
List all collections in Metabase that the current user has read permissions for.
Args: archived: If true, return only archived collections. exclude_other_user_collections: If true, hide other users' personal collections. namespace: Filter collections by namespace (e.g. "snippets" for snippet folders). personal_only: If true, return only personal collections (where personal_owner_id is not null).
Returns: Dictionary containing all collections with their metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| archived | No | ||
| exclude_other_user_collections | No | ||
| namespace | No | ||
| personal_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly states that only collections the current user has read permissions for are returned, explains all four parameters (archived, exclude_other_user_collections, namespace, personal_only), and describes the return type. However, it does not disclose rate limits or error conditions.
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 concise paragraphs: one for purpose and one for parameters/returns. It uses a clear docstring-style list for Args and Returns, with no superfluous words. 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?
The tool has 4 optional parameters explained fully, an output schema exists (so return details are not required), and the description covers both input and output adequately. It provides enough context for an agent to invoke the tool correctly without ambiguity.
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 0% coverage (no descriptions in schema), so the description compensates fully by explaining each parameter in detail. The Args section provides clear semantics for 'archived', 'exclude_other_user_collections', 'namespace', and 'personal_only', which are absent from the schema.
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 ('List all collections') and the resource ('collections in Metabase') with a specific scope ('that the current user has read permissions for'). It distinguishes itself from sibling tools like 'create_collection' by being a read-only list operation.
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 implicitly indicates usage for listing viewable collections but does not provide explicit guidance on when to use this tool versus alternatives or when not to use it. No alternative tools are mentioned, though the sibling list includes related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboardsA
List all dashboards in Metabase.
Returns: A list of dashboards with their metadata including id, name, description, collection_id, and creator info.
| 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?
No annotations are provided, so the description carries full burden. It does not disclose behavioral traits beyond listing, such as permissions, pagination, or side effects. The read-only nature is implied but not explicit.
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 two sentences: one for action and one for return value. Every word is purposeful with no 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?
For a simple list tool with no parameters and an output schema (implied), the description sufficiently covers the purpose and return format. No additional context is needed.
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?
There are zero parameters, so the baseline is 4. The description adds nothing about parameters, but that is acceptable as none exist. It briefly describes the output, which aligns with the schema.
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 'List all dashboards in Metabase', providing a specific verb and resource. It effectively distinguishes from sibling tools like create_dashboard or update_dashboard.
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 obtaining a list of all dashboards without explicit exclusions or alternatives. While clear, it does not explicitly guide when not to use it versus other list tools like list_cards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboard_tab_cardsA
List the cards belonging to a specific tab on a dashboard.
Args: dashboard_id: The ID of the dashboard. tab_id: The ID of the tab (from list_dashboard_tabs).
Returns: A list of dashcards on the given tab with layout and card metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| tab_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It states the return type (list of dashcards with layout and metadata), which is sufficient for a read operation. It does not mention error behavior or side effects, but for a simple list tool this is acceptable.
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, front-loading the purpose and then detailing args and returns with no extraneous 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 two-parameter list tool with an output schema, the description provides all necessary information: what the tool does, input parameters with context, and return content. No gaps are apparent.
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 meaning to both parameters: dashboard_id is identified as the dashboard's ID, and tab_id is linked to 'list_dashboard_tabs' output. This goes beyond the bare schema which only shows type and requirement.
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 lists cards belonging to a specific tab on a dashboard, using specific verb 'list' and resource 'cards'. It distinguishes from siblings like 'get_dashboard_cards' which likely lists all cards on a dashboard without tab filtering.
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 when to use this tool by specifying the tab_id should come from 'list_dashboard_tabs', providing a clear context. However, it does not explicitly mention when not to use it or directly compare with alternatives like 'get_dashboard_cards'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboard_tabsA
List all tabs configured on a dashboard.
Args: dashboard_id: The ID of the dashboard.
Returns: A list of tab objects with id, name, and position. Empty list if the dashboard has no tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description explains the return value (list of tab objects with id, name, position) and edge cases (empty list). It lacks information on error handling or permissions.
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 with two sentences and a structured Args/Returns section, front-loaded with the main purpose. 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 (one parameter, no nested objects) and the presence of an output schema, the description covers input, output format, and edge cases completely.
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 meaning for the single parameter dashboard_id, explaining its role. This compensates for the 0% schema description coverage.
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 lists all tabs on a dashboard, with a specific verb and resource. It distinguishes itself from siblings like list_dashboards and list_dashboard_tab_cards.
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 when needing to retrieve tab information, but does not explicitly state when to use it versus alternatives or provide prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesA
List all databases configured in Metabase.
Returns: A dictionary containing all available databases with their metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description indicates a read-only operation (listing) and mentions the return format (a dictionary with metadata). However, it does not disclose any additional behavioral traits such as authentication requirements or rate limits. The description is adequate but minimal.
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 that front-load the purpose and briefly describe the return value. Every sentence serves a purpose 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?
Despite the tool's simplicity, the description is complete. It states the action (list all databases), and with an output schema provided, the return format is already documented. No additional details are necessary for this 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?
There are no parameters (0 params, 100% schema coverage). With zero parameters, the baseline score is 4. The description does not need to add parameter information since the schema already documents the absence of 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 'List all databases configured in Metabase.' The verb 'List' and resource 'databases' are specific, and it distinguishes from sibling tools like 'list_cards' or 'list_tables' which list different entities.
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. The purpose is straightforward (listing all databases), but there is no mention of prerequisites or conditions. The usage is implied by the tool's function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesA
List all tables in a specific database.
Args: database_id: The ID of the database to query.
Returns: Formatted markdown table showing table details.
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation ('list') and specifies the return format (markdown table), but does not explicitly state side effects, authentication needs, or permissions. With no annotations, more behavioral details would be beneficial.
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?
Extremely concise with no wasted words. The key purpose is front-loaded, followed by structured Args/Returns sections.
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 (one parameter) and the existence of an output schema (which covers return details), the description is sufficiently complete. It covers purpose, parameter explanation, and return format.
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 meaning to the lone parameter 'database_id' ('The ID of the database to query') beyond the schema's type-only specification. This compensates for the 0% schema description coverage.
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 action ('list'), resource ('tables'), and constraint ('in a specific database'), distinguishing it from siblings like 'list_databases' and 'get_table_fields'.
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. The description does not mention prerequisites, exclusions, or compare with similar tools like 'list_databases' or 'get_table_fields'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reposition_dashboard_cardsA
Reposition and/or resize multiple cards on a dashboard in a single update.
Use this to rearrange a dashboard layout atomically. Any dashcards not
included in positions keep their current layout.
Args:
dashboard_id: The ID of the dashboard.
positions: A list of layout updates. Each entry must include dashcard_id
and may include any of col, row, size_x, size_y. Omitted
fields on an entry keep their current values.
Returns: The updated dashboard object.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| positions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, description fully discloses atomic update behavior, that omitted fields retain current values, and return value (updated dashboard object). No conflict or missing behavioral traits.
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 brief yet comprehensive, with clear sections (overview, Args, Returns). Every sentence adds value, and critical info is front-loaded in the first two sentences.
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 only two parameters, presence of output schema, and detailed description covering purpose, usage, parameters, and returns, the description is fully complete for this tool's complexity.
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?
Input schema has 0% description coverage, but description explains both parameters in detail, including sub-fields of positions (dashcard_id, col, row, size_x, size_y) and their optionality, far exceeding schema's minimal info.
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?
Description clearly states 'Reposition and/or resize multiple cards on a dashboard in a single update', uses specific verb-resource pairing, and distinguishes from sibling tools like update_dashboard_card_position by emphasizing bulk atomic update.
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 says 'Use this to rearrange a dashboard layout atomically' and describes behavior for omitted cards. Lacks direct comparison to alternative single-card tool, but context signals sibling list includes update_dashboard_card_position, aiding inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_card_template_tagsA
Set or update the template tags on a card's native SQL query.
Metabase auto-creates template tags for each {{variable}} in SQL, but they
default to type "text". Use this tool to change a tag's type (e.g. to "date"
or "number"), set a display name, default value, required flag, or
convert to a field filter ("dimension").
Each entry in template_tags is keyed by tag name and may include:
type: "text" | "number" | "date" | "dimension" | "card" | "snippet"
display-name: human-readable label
default: default value
required: bool
dimension: [field-id, ] # only for type "dimension"
widget-type: e.g. "date/single", "date/range", "category" # for dimension
Existing fields (including the auto-generated id UUID and name) are
preserved when merge=True.
Args: card_id: The ID of the card whose native query tags should be updated. template_tags: Map of tag-name -> tag-config. merge: If True (default), merge with existing tags. If False, replace entirely.
Returns: The updated card object.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| template_tags | Yes | ||
| merge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains behavior: it details merging vs replacing via the 'merge' parameter, notes that existing fields are preserved when merge=True, and states it returns the updated card object. No destructive effects are hidden.
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 informative and well-structured with clear sections ('Args:', 'Returns:'), but it is somewhat lengthy. However, every sentence adds value and it avoids 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 tool's complexity (nested objects, 3 parameters, merge behavior, output schema exists), the description is complete: it covers all parameters, behavior, and return values, leaving no gaps.
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?
Despite 0% schema description coverage, the description thoroughly explains each parameter: card_id, template_tags (including nested structure with allowed keys), and merge (default/behavior). This adds significant meaning beyond the schema, compensating fully.
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 identifies the tool's purpose: 'Set or update the template tags on a card's native SQL query.' It specifies the resource (card's native SQL query) and action (set/update), effectively distinguishing it from sibling tools like update_card or create_card.
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 explains when to use the tool, such as changing a tag's type or setting display name/default/required. It provides clear context but does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_dashcard_inline_parametersA
Attach dashboard filters inline to specific dashcards.
By default, dashboard parameters render as filter widgets at the top of the
dashboard. Setting inline_parameters on a dashcard moves those filter
widgets to appear attached to that specific card instead of the header.
Each entry in inline_parameters must include:
dashcard_id: the dashcard to target (from get_dashboard_cards)
parameter_ids: list of dashboard parameter ids (strings) to render inline on this dashcard. The parameters must already exist on the dashboard (see update_dashboard).
Existing inline_parameters on each touched dashcard are preserved and
extended, unless replace=True (in which case the list on each touched
dashcard is fully replaced by the ids provided here). Dashcards not
referenced in inline_parameters are left untouched.
Note: the dashboard parameter should still be mapped to the card's
template tag via set_dashcard_parameter_mappings — inline placement
only affects where the widget renders, not how values are wired into the
card's query.
Args: dashboard_id: The ID of the dashboard. inline_parameters: List of entries as described above. replace: If True, replace inline_parameters on touched dashcards instead of appending.
Returns: The updated dashboard object.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| inline_parameters | Yes | ||
| replace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description fully covers behavior. States preservation of existing inline_parameters unless replace=True, unaffected dashcards, and no effect on value mappings. Clearly non-destructive and scoped.
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?
Well-structured with bullet points and clear sections. Slightly verbose but each sentence adds necessary detail. Could be trimmed slightly but remains efficient for the complexity.
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 output schema exists (not shown but referenced), description handles return value expectation. References sibling tools for related operations, ensuring agent understands full workflow. Complete for effective use.
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, but description fully explains all three parameters: dashboard_id, inline_parameters structure (dashcard_id, parameter_ids), and replace default/replacement behavior. Adds meaning beyond schema types.
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?
Description clearly states action: 'Attach dashboard filters inline to specific dashcards.' It distinguishes from sibling tools like set_dashcard_parameter_mappings by explaining that inline placement only affects widget rendering, not value wiring.
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 explicit when-to-use context: moving filter widgets from header to specific cards. References prerequisites (get_dashboard_cards, update_dashboard) and complementary tool (set_dashcard_parameter_mappings). Explains behavior with replace flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_dashcard_parameter_mappingsA
Wire dashboard parameters to card template tags on specific dashcards.
Each mapping entry must include:
dashcard_id: the dashcard to target (from get_dashboard_cards)
parameter_id: the dashboard parameter's
id(set via update_dashboard)template_tag: the tag name used in the card's SQL (e.g. "start_date")
Optional per-entry fields:
kind: "variable" (default) for plain
{{tag}}vars, or "dimension" for field-filter tags. Produces the correcttargetshape.card_id: overrides the dashcard's own card_id in the mapping (rare — needed for series cards).
target: raw Metabase
targetarray; if provided, used verbatim and overrideskind/template_tag.
Existing parameter_mappings on each touched dashcard are preserved and
extended, unless replace=True (in which case the mappings for each
touched dashcard are fully replaced by the entries provided here).
Dashcards not referenced in mappings are left untouched.
Args: dashboard_id: The ID of the dashboard. mappings: List of mapping entries as described above. replace: If True, replace parameter_mappings on touched dashcards instead of appending.
Returns: The updated dashboard object.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| mappings | Yes | ||
| replace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It discloses key behavioral traits: preservation vs. replacement of mappings, handling of optional fields like `kind` and `target`, and the effect on dashcards. It could add note on permissions or idempotency, but overall is transparent.
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 fairly long but well-structured with sections for parameter details and Args/Returns. It is front-loaded with the main action and uses bullet points for clarity. A slightly more concise phrasing could be used, but it's efficient and scannable.
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 complexity (3 parameters, nested objects in mappings) and the presence of an output schema, the description covers all necessary aspects. It explains parameter relationships, optional fields, and behavioral nuances like `replace` and `target` override. No gaps are apparent.
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 0%, yet the description thoroughly explains each parameter. For `mappings`, it details required fields (dashcard_id, parameter_id, template_tag) and optional fields (kind, card_id, target) with their semantics and effects. This adds significant meaning beyond the minimal schema.
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: 'Wire dashboard parameters to card template tags on specific dashcards.' It uses a specific verb-wire-and specifies the resource-dashboard parameters and card template tags. The action is distinct from siblings like set_dashcard_inline_parameters and update_dashboard.
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 explains when to use the tool, including the effect of the `replace` parameter and that untouched dashcards are left as-is. It provides clear context for usage but does not explicitly mention alternative tools for cases where inline parameters or other mappings are needed, though siblings are listed separately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cardA
Update properties of a saved question/card in Metabase.
When query is updated, existing template-tags on the card are preserved
by default (re-sent alongside the new SQL) so filters wired to the card
aren't silently wiped. Pass template_tags to set/replace them atomically
with the SQL update.
Args:
card_id: The ID of the card to update.
name: New name for the card.
description: New description for the card.
query: New SQL query for the card.
database_id: New database ID (required if changing query).
display: Display type (e.g. "table", "bar", "line", "pie", "scalar", "row", "area", "combo", "pivot", "smartscalar", "funnel", "waterfall", "map").
collection_id: Move the card to a different collection.
visualization_settings: Visualization settings to apply.
archived: Set to true to archive the card, false to unarchive.
template_tags: Replacement template-tags map (tag-name -> config). If
provided, replaces the card's template-tags. If omitted while
query is set, existing template-tags are preserved unchanged.
Returns: The updated card object.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| name | No | ||
| description | No | ||
| query | No | ||
| database_id | No | ||
| display | No | ||
| collection_id | No | ||
| visualization_settings | No | ||
| archived | No | ||
| template_tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes important behavioral details about template tag preservation when updating the query. However, it omits other traits like side effects of archiving or update permissions, and there are no annotations to supplement.
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 a concise summary, a behavioral note, a clear arg list, and a return statement. Every sentence adds value 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?
The description covers key parameter semantics and critical behavior (template tag preservation). With an existing output schema, return details are sufficient. Missing minor context like partial update semantics or error conditions.
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 description coverage, the description adds full meaning for all 10 parameters, e.g., 'database_id: New database ID (required if changing query).' This compensates for the schema's lack of parameter documentation.
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 'Update properties of a saved question/card in Metabase,' specifying the verb (update) and resource (saved question/card). It distinguishes from sibling tools like create_card or list_cards.
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 does not provide explicit guidance on when to use this tool versus alternatives such as update_card_display or set_card_template_tags. It lacks context for when-not-to-use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_card_displayA
Update the display type of a saved question/card in Metabase.
Args: card_id: The ID of the card to update. display: The display type (e.g. "table", "bar", "line", "pie", "scalar", "row", "area", "combo", "pivot", "smartscalar", "funnel", "waterfall", "map"). visualization_settings: Optional visualization settings to apply with the display change.
Returns: The updated card object.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| display | Yes | ||
| visualization_settings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fails to disclose important behavioral traits such as required permissions, side effects, or reversibility. It only states the update and return value, leaving the agent uninformed about potential impacts.
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 well-structured docstring with Args and Returns sections. It is concise, with every sentence adding value and no extraneous 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?
The description covers the tool's purpose and parameters adequately. It lacks error handling or prerequisite information, but given the simple nature of the tool and presence of an output schema, it is mostly 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?
Given 0% schema coverage, the description compensates well by explaining card_id as the card ID, display with a list of examples, and visualization_settings as optional settings. It adds meaning beyond the bare schema, though the format of visualization_settings remains vague.
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 that it updates the display type of a saved question/card, which is a specific verb+resource. It lists example display types, distinguishing it from sibling tools like update_card that handle broader modifications.
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 when to use (changing display type) but does not explicitly differentiate from update_card or mention when not to use. The presence of a sibling tool with overlapping purpose would benefit from clearer usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_card_parametersA
Set the card-level parameters list on a saved question.
Card parameters drive the filter widgets shown on a card's own page AND are what Metabase uses to wire dashboard parameters into the card. For a date filter to render as a date picker (instead of a plain text box), the card must have a matching parameter entry — the template-tag type alone is not enough.
Each parameter is a dict. Common keys:
id: the template-tag's UUID (must match
dataset_query.native.template-tags[name].id)name: display name, e.g. "Start date"
slug: URL slug, e.g. "start_date"
type: widget type, e.g. "date/single", "date/range", "date/all-options", "category", "string/=", "number/="
target: link back to the template tag, e.g. ["variable", ["template-tag", "start_date"]] (for text/number/date vars) ["dimension", ["template-tag", "start_date"]] (for field filters)
default: default value (optional)
values_source_type / values_source_config: dropdown data source (optional)
values_query_type: "list" | "search" | "none" (optional)
Args:
card_id: The ID of the card whose parameters should be updated.
parameters: List of parameter configs. When merge=False (default)
this replaces the card's entire parameters list. When merge=True,
entries are matched by id (or by slug if id is missing) and
merged into existing parameters; new entries are appended.
Returns: The updated card object.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| parameters | Yes | ||
| merge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description details the merge behavior (replace vs. merge by id/slug) and explains the role of parameters in dashboard wiring. It does not cover auth or error conditions, but the key behavioral traits are disclosed.
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 a clear purpose statement, explanatory context, and an Args section. It is slightly lengthy but every sentence adds value. Front-loading ensures the agent grasps the core quickly.
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?
The description covers the tool's operation, merge modes, and parameter structure. Given the complexity of the parameters array and the absence of an output schema, it provides sufficient information for an agent to use the tool correctly, though error handling and permissions are omitted.
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 description coverage, the description fully compensates by detailing card_id, parameters (including common keys like id, name, slug, type, target), and merge with its default behavior. This adds meaning far beyond the raw JSON schema.
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 begins with a specific verb+resource: 'Set the card-level `parameters` list on a saved question.' This clearly identifies the primary action and object, distinguishing it from sibling tools like update_card, which handles broader card updates.
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 explains when to use the tool (to set parameters for filter widgets) and provides insight into why it's necessary (e.g., for date pickers). However, it does not explicitly mention when not to use it or compare with alternatives like set_card_template_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dashboardA
Update properties of a dashboard, including its parameter/filter list.
Use parameters to define dashboard-level filters. Each parameter is a dict
with keys like id (string, required — a stable identifier), name,
slug, type (e.g. "date/all-options", "date/single", "date/range",
"category", "string/=", "number/="), and optional default, sectionId,
values_source_type, values_source_config.
Args: dashboard_id: The ID of the dashboard to update. name: New name for the dashboard. description: New description for the dashboard. collection_id: Move the dashboard to a different collection. parameters: Full replacement list of dashboard parameters. archived: Set true to archive, false to unarchive.
Returns: The updated dashboard object.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| name | No | ||
| description | No | ||
| collection_id | No | ||
| parameters | No | ||
| archived | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that parameters undergo a full replacement ('Full replacement list') and for archived: 'Set true to archive, false to unarchive.' It also specifies the return value. However, it does not mention authorization needs or whether other fields are partially updated.
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 a summary sentence, a detailed block about parameters, an Args list, and a Returns line. It is front-loaded with the main purpose, though the parameter explanation is somewhat lengthy but justified by complexity.
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?
The description covers all six parameters and the return value. Given the complexity and presence of an output schema, it provides sufficient detail. It does not cover error cases or permissions, but that is acceptable for this context.
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%, so the description adds crucial meaning. It explains each parameter in the Args block, including the detailed structure of the parameters dict with allowed types and optional keys. This goes well beyond the bare schema types.
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 'Update properties of a dashboard', listing specific properties such as name, description, collection_id, parameters, and archived. This distinguishes it from sibling tools like create_dashboard (create) and list_dashboards (list).
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 explains how to use the parameters field in detail, but does not explicitly state when to use this tool versus alternatives like add_card_to_dashboard or create_dashboard. It lacks explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dashboard_card_positionA
Reposition or resize a single card on a dashboard.
Only the provided fields are updated; omitted fields keep their current values.
Args: dashboard_id: The ID of the dashboard. dashcard_id: The ID of the dashcard (from get_dashboard_cards) to move or resize. col: New column position on the dashboard grid. row: New row position on the dashboard grid. size_x: New width in grid units. size_y: New height in grid units.
Returns: The updated dashboard object.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| dashcard_id | Yes | ||
| col | No | ||
| row | No | ||
| size_x | No | ||
| size_y | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description explains that omitted fields retain current values, which is a behavioral trait. However, it does not disclose permissions, rate limits, or potential side effects. For a mutation tool, more transparency would be beneficial.
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 structured with a clear purpose, then Args and Returns sections. It is somewhat lengthy but not overly verbose. It could be more concise, e.g., by omitting obvious parameter names that match the schema.
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 (as per context signals), the description mentions returning the updated dashboard object, which is sufficient. It covers all parameters and behavior for a single card update operation. No gaps identified.
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 0%, but the description includes an Args section that explains all six parameters (dashboard_id, dashcard_id, col, row, size_x, size_y). This adds meaning beyond the schema types and defaults, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Reposition or resize a single card on a dashboard.' It uses specific verbs (reposition, resize) and resource (single card, dashboard). This distinguishes from siblings like 'reposition_dashboard_cards' (bulk) and 'add_card_to_dashboard'.
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 notes that only provided fields are updated, implying partial updates. However, it does not explicitly state when to use this tool over alternatives like 'reposition_dashboard_cards' for bulk operations. No exclusion or prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_modelA
Update an existing model in Metabase.
Args: card_id: The ID of the model to update. name: New name for the model. description: New description for the model. query: New SQL query for the model. database_id: New database ID (required if changing query). collection_id: Move the model to a different collection. result_metadata: Updated column metadata list. Each dict can include keys like "name", "display_name", "base_type", "semantic_type", "description", and "field_ref". visualization_settings: Visualization settings to apply. archived: Set to true to archive the model, false to unarchive.
Returns: The updated model object.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| name | No | ||
| description | No | ||
| query | No | ||
| database_id | No | ||
| collection_id | No | ||
| result_metadata | No | ||
| visualization_settings | No | ||
| archived | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as side effects, permission requirements, rate limits, or whether updates are destructive. It only lists parameters without explaining the behavior beyond that.
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 well-structured: a one-line summary, an Args list with each parameter explained, and a Returns statement. No extraneous 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?
The description covers the tool's purpose, parameters, and return value. However, it lacks usage guidelines and behavioral transparency. Given the complexity (9 parameters, mutation) and no annotations, it is adequate but has gaps.
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%, so the description must compensate. It provides detailed explanations for each parameter, including constraints like 'database_id' being required if changing query, and notes on result_metadata keys. This adds significant meaning beyond the raw schema.
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 'Update an existing model in Metabase,' which is a specific verb+resource combination. It distinguishes itself from sibling tools like create_model, update_card, etc., by being specific to 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?
Usage is implied by the tool's purpose and parameters, but there is no explicit guidance on when to use this tool versus alternatives like update_card. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Many tools have distinct purposes, but there is overlap between similar tools like create_card vs create_model, update_card vs update_card_display vs update_card_parameters, and reposition_dashboard_cards vs update_dashboard_card_position, which could cause confusion.
Most tools follow a consistent verb_noun snake_case pattern, but there are exceptions like get_dashboard_cards (uses get instead of list), set_dashcard_inline_parameters (set instead of update), and inconsistent use of 'set' vs 'update' across tools.
28 tools is on the high side for a Metabase MCP server. While it covers many features, some tools feel redundant (e.g., multiple dashboard layout tools) and could be consolidated.
The tool set covers core CRUD for cards and dashboards, but lacks delete operations for cards, dashboards, collections, and models. Missing get single card/dashboard endpoints. This creates dead ends for common workflows.
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
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
AI access to Quadratic spreadsheets: open files, run Python/SQL, query connected databases.
Connect your AI assistants to Keboola and expose your data, transformations, SQL queries, ...
Connects AI assistants to CloudQuell multi-cloud and AI cost, savings, anomaly, and budget data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing them to query databases, manage dashboards and cards, execute SQL queries, and access analytics data through natural language.47MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing them to query databases, manage dashboards, execute SQL queries, and organize collections through natural language.47MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing users to query databases, manage dashboards and cards, execute SQL queries, and access analytics data through natural language.471MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing them to query databases, execute SQL, manage dashboards and cards, and access analytics data through natural language.47MIT
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/voducdan/matebase-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server