Metabase MCP Server
The Metabase MCP Server connects your Metabase instance to AI assistants via the Model Context Protocol (MCP), enabling natural language interaction with business intelligence assets without manual navigation.
Collection Management: Get, create, update, and delete collections (with optional color and parent hierarchy).
Chart (Card) Management: List all saved charts/questions, get query results, and create (bar, line, pie, scatter, pivot-table, KPI metrics, etc.), update, or delete charts using SQL or MBQL queries.
Dashboard Management: List, get, create, update, copy, and delete dashboards; retrieve cards/items within a dashboard; support for tabs, filters, layout, and embedding settings.
Database Management: List connected databases and create, update, or delete database connections (any supported engine).
User Management: List all users, get the current authenticated user, and create, update, or delete user accounts (with group assignments and superuser flag).
Group Management: List, create (with optional LDAP DN), and delete user groups.
SQL Execution: Run native SQL queries directly against any connected database and retrieve results.
Enables natural language interaction with Metabase business intelligence assets, including creating and managing dashboards, charts, collections, executing SQL queries, administering databases, users, and groups.
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 MCP Servershow me last month's sales by region"
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
π Table of Contents
Related MCP server: Metabase MCP Server
π What is this tool about?
Metabase MCP Server is a backend integration layer that connects your Metabase instance with AI assistants using the Model Context Protocol (MCP). This allows business leaders, product managers and analysts to interact with business intelligence assets like dashboards and charts using natural languageβthrough any MCP client (e.g., Claude Desktop).
Instead of navigating through menus or constructing SQL queries manually, you can:
You can ask a question and get an instant insight.
Generate dashboards and charts by describing what you want.
Manage user access and database connections through simple instructions.
This project makes Metabase not just a dashboarding toolβbut a conversational, intelligent business assistant.
π₯ Video Walkthrough
Watch this video to see the Metabase MCP Server in action:
π Architecture Diagram

π Getting Started
1. Set Up Metabase (If you haven't already)
Follow the official Metabase installation guide: Metabase Docs
2. Install uv Package Manager
Install uv which includes Python and package management:
Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | shOr install via package managers:
# macOS
brew install uv
# Windows (via Scoop)
scoop install uv
# Windows (via Chocolatey)
choco install uvFor more information about uv installation and usage, please visit the official documentation: https://docs.astral.sh/uv/getting-started/installation/
3. Clone or Download the Repository
You need to get this tool onto your computer. You can either download it manually or use Git. Open your computer's Terminal (Mac) or Command Prompt (Windows). Navigate to the folder where you unzipped the files or want to clone the project:
# Example (replace with your actual path):
cd ~/Downloads/metabase-mcp-server-devOption 1: Download ZIP
Go to the GitHub repository
Click the green "Code" button
Select "Download ZIP"
Unzip the downloaded file to a location like your Documents folder
Option 2: Use Git If you're familiar with Git, run this in your terminal:
git clone https://github.com/CW-Codewalnut/Metabase-MCP-Server.git
cd Metabase-MCP-Server
4. Install dependencies
This command will automatically:
Install the required Python version (if not already available)
Create a virtual environment for the project
Install all necessary packages and dependencies
uv sync5. Configure Your Credentials
You have three options to configure your Metabase credentials for the MCP Server:
Option 1: Using a .env file (Recommended)
Create a .env file in the project root:
METABASE_URL=http://localhost:3000
METABASE_API_KEY=mb_xxx_your_key
PORT=3200
HOST=localhost
TRANSPORT=streamable-http
LOG_LEVEL=INFOOption 2: Using command-line arguments Pass configuration directly via command line:
uv run src/metabase_mcp_server.py --metabase-url http://localhost:3000 --metabase-api-key "YOUR_API_KEY" --port 3200 --host localhost --transport streamable-http --log-level INFOOption 3: Using environment variables in MCP client config
Configure directly in your MCP client without a .env file (see examples below).
{
"mcpServers": {
"metabase": {
"type": "stdio",
"command": "C:\\Users\\YourName\\Projects\\metabase-mcp-server\\.venv\\Scripts\\python.exe",
"args": [
"C:\\Users\\YourName\\Projects\\metabase-mcp-server\\src\\metabase_mcp_server.py"
],
"env": {
"METABASE_URL": "http://localhost:3000",
"METABASE_API_KEY": "mb_xxx_your_key",
"PORT": 3200,
"HOST": "localhost",
"TRANSPORT": "streamable-http",
"LOG_LEVEL": "INFO"
}
}
}
}6. Connect to Your MCP client
Choose your preferred MCP clients like Claude Desktop app, Claude Code, Cursor, Windsurf etc., and add the Metabase MCP server in their respective configuration files. All MCP clients follow a similar configuration pattern.
Configuration Examples
For stdio transport (recommended for local MCP server):
Windows:
{
"mcpServers": {
"metabase": {
"type": "stdio",
"command": "C:\\Users\\YourName\\Projects\\metabase-mcp-server\\.venv\\Scripts\\python.exe",
"args": [
"C:\\Users\\YourName\\Projects\\metabase-mcp-server\\src\\metabase_mcp_server.py"
]
}
}
}Mac:
{
"mcpServers": {
"metabase": {
"type": "stdio",
"command": "/Users/YourName/Projects/metabase-mcp-server/.venv/bin/python",
"args": [
"/Users/YourName/Projects/metabase-mcp-server/src/metabase_mcp_server.py"
]
}
}
}Key Differences:
Windows uses backslashes
\\in pathsmacOS/Linux uses forward slashes
/in pathsMake sure to match the correct format based on your OS to avoid errors
Important Notes:
Replace
FULL_PATHwith the actual absolute path to your project directoryAfter saving configuration changes, restart your MCP client to apply the new settings
For project-specific tools in Cursor, create a
.cursor/mcp.jsonfile in your project directoryFor global tools in Cursor, create a
~/.cursor/mcp.jsonfile in your home directory
For streamable-http transport (recommended for remote MCP server):
{
"mcpServers": {
"metabase": {
"type": "streamable-http",
"url": "http://localhost:3200/mcp/"
}
}
}Compatible MCP clients
Click on any client to visit their official MCP setup documentation:
Client | Official MCP Documentation |
Anthropic's official MCP guide for Claude Desktop | |
Official Claude Code MCP setup documentation | |
Cursor's official MCP configuration guide | |
Windsurf official MCP setup documentation | |
Cline's official MCP quickstart guide | |
VS Code Copilot MCP server configuration |
Once you have added the configuration, the MCP server should be visible in your MCP client.
π§ Configuration Options
The Metabase MCP Server supports flexible configuration through environment variables, command-line arguments, or a combination of both.
Environment Variables
Variable | Description | Default Value | Example |
| Your Metabase instance URL | Required |
|
| Your Metabase API key | Required |
|
| Transport protocol |
|
|
| Host for HTTP transports |
|
|
| Port for HTTP transports |
|
|
| Logging level |
|
|
Command-line Arguments
Argument | Description | Options | Default Value |
| Metabase instance URL | Any Metabase URL | Required |
| Metabase API key |
| Required |
| Transport protocol |
|
|
| Host for HTTP transports | Any host or IP |
|
| Port for HTTP transports | Any port number |
|
| Logging verbosity level |
|
|
Transport Protocols
Protocol | Description | Use Case |
stdio | Standard input/output communication | Best for local integrations (Claude Desktop, Cursor, etc.) |
streamable-http | HTTP-based streaming protocol | Ideal for remote deployments and web-based integrations |
sse | Server-Sent Events over HTTP | β οΈ Deprecated - Not recommended for new setups |
Configuration Priority
Configuration values are applied in the following priority order (highest to lowest):
Command-line arguments (overrides everything)
Environment variables (overrides defaults)
Default values
Complete Command Examples
uv run src/metabase_mcp_server.py --transport streamable-http --host localhost --port 3200 --metabase-url http://127.0.0.1:3000 --metabase-api-key mb_xxx_your_key
Note: You don't need to pass every parameter when running the server. However, you must provide the Metabase URL and API key. Any parameters not specified will use their default values as shown above.
π Getting Your Metabase API Key
To get your Metabase API key:
Log into your Metabase instance
Click on your profile picture (top-right corner)
Select "Account settings"
Navigate to the "API Keys" tab
Click "Create API Key"
Give your key a descriptive name (e.g., "MCP Server Key")
Copy the generated key (starts with
mb_)
β οΈ Important: Store your API key securely and never commit it to version control. The key provides full access to your Metabase instance.
π DXT File Support
You no longer need to go through the steps of cloning the repository and setting up the environment. Simply follow the steps below to install the Metabase MCP Server in your Claude Desktop App:
Download the DXT File
Check the link below to download the latest DXT file directly:
Download DXT FileOpen the Claude Desktop App
Once you have the file, open the Claude Desktop App on your system.Navigate to Extensions Settings
In the Claude Desktop App:Go to Files β Settings β Extensions
Then click on Advanced Settings.
Select the DXT File
In the Advanced Settings section, click on Choose File, select the downloaded DXT file.Enter the Required Details
After selecting the DXT file, a prompt will appear asking you to fill in the required details:Metabase URL: Enter your Metabase server URL.
API Key: Add the relevant API key for authentication.
Complete the Setup
After entering the necessary details, click Save to apply the configuration.
That's it! The Metabase MCP Server is now installed and ready to use in your Claude Desktop App.
How to Create Your Own DXT File
If you want to create your own DXT file, please visit the Official Guide:
Creating Your Own DXT File
π Remote Deployment
For production use or team collaboration, you can deploy the Metabase MCP Server remotely. We use this approach internally at Codewalnut.
Docker Deployment
We've included Docker configuration files to make remote deployment straightforward.
Quick Start with Docker
# Build the Docker image
docker build -t metabase-mcp-server .
# Run with environment variables
docker run -d \
-p 3200:3200 \
-e METABASE_URL="http://your-metabase-instance.com" \
-e METABASE_API_KEY="mb_xxx_your_api_key" \
metabase-mcp-serverDocker Compose (Recommended)
version: "3.8"
services:
metabase-mcp:
build: .
ports:
- "3200:3200"
environment:
- METABASE_URL=http://your-metabase-instance.com
- METABASE_API_KEY=mb_xxx_your_api_key
##- PORT=3200
##- HOST=localhost
##- TRANSPORT=streamable-http
##- LOG_LEVEL=INFO
restart: unless-stoppedRemote HTTP/SSE transports are read-only by default. Set the matching ALLOW_*
environment variable to true only when the server is behind trusted access
controls and the configured Metabase API key is allowed to make those changes:
ALLOW_WRITE_TOOLS, ALLOW_ADMIN_TOOLS, and ALLOW_SQL_TOOL.
Connecting to Remote MCP Server
Once deployed, configure your MCP clients to connect to the remote server:
{
"mcpServers": {
"metabase": {
"type": "streamable-http",
"url": "http://server-ip:3200/mcp/"
}
}
}Deployment Options
Cloud Providers: AWS ECS, Google Cloud Run, Azure Container Instances
VPS/Dedicated Servers: DigitalOcean, Linode, Vultr
Container Platforms: Kubernetes, Docker Swarm
Platform-as-a-Service: Railway, Render, Fly.io
Security Considerations
Use HTTPS in production environments
Implement proper firewall rules
Consider VPN access for sensitive business data
Regularly rotate API keys
Monitor access logs
Need Help with Deployment?
Our team at CodeWalnut offers deployment and consulting services. Contact us for enterprise-grade setup and support.
π Debugging with MCP Inspector
To debug and test your Metabase MCP Server setup, you can use the official MCP Inspector tool.
Prerequisites
First, install Node.js if you haven't already:
Download from: nodejs.org
Or install via package manager:
# macOS brew install node # Windows (via Chocolatey) choco install nodejs # Windows (via Scoop) scoop install nodejs
Install and Run MCP Inspector
# Install MCP Inspector globally
npm install -g @modelcontextprotocol/inspector
# Run the inspector with your Metabase MCP Server
npx @modelcontextprotocol/inspector uv run FULL_PATH/metabase-mcp-server/src/metabase_mcp_server.pyUsing MCP Inspector
The MCP Inspector provides:
Real-time tool testing - Execute MCP tools directly from the web interface
Request/Response monitoring - See exactly what data is being sent and received
Error debugging - Identify configuration or API issues quickly
Schema validation - Verify that your tools are properly defined
Once running, open your browser to http://localhost:5173 to access the inspector interface.
Common Debugging Scenarios
Connection issues - Verify your Metabase URL and API key
Permission errors - Check if your API key has the required permissions
π§ Available Tools
Function | Description |
Collection Operations | |
| Get a collection by ID |
| Create a new collection |
| Update collection metadata |
| Delete a collection |
Chart (Card) Operations | |
| List all charts |
| Get results from a chart query |
| Create a new chart |
| Update an existing chart |
| Delete a chart |
Dashboard Operations | |
| List all dashboards |
| Get a dashboard by ID |
| Get cards in a dashboard |
| Get all dashboard items |
| Create a dashboard |
| Update a dashboard |
| Delete a dashboard |
| Create a copy of an existing dashboard |
Database Operations | |
| List databases |
| Create a new database connection |
| Update a database connection |
| Delete a database connection |
User Operations | |
| List all users |
| Get current user details |
| Create a new user |
| Update user info |
| Delete a user |
Group Operations | |
| List user groups |
| Create a user group |
| Delete a user group |
SQL Operations | |
| Execute a native SQL query |
π§ͺ Example Prompts to Try
Create a dashboard called 'Flight Overview' with a bar chart showing flights by destination city.
Run SQL:
SELECT origin, destination, COUNT(*) FROM flights GROUP BY origin, destination LIMIT 10.Create a card displaying total bookings last month grouped by region.
Delete the chart named 'Abandoned Queries'.
Update the dashboard 'Sales KPIs' to include a new revenue card.
Show all users in the 'Admin' group.
Create a new group called 'Finance Analysts'.
Connect to a Supabase database and list all tables.
π Connect with Us
Stay connected and get support through our community channels:
π’ Official Links
π Website: codewalnut.com
π§ Email: nattu@codewalnut.com
π Blogs:
insights: codewalnut.com/insights
learn: codewalnut.com/learn
π± Social Media
πΌ LinkedIn: CodeWalnut
πΊ YouTube: CodeWalnut Channel
π¦ Twitter/X: @codewalnut
π· Instagram: @codewalnut
π¬ Community Support
π§ Newsletter: Subscribe to CodeWalnut Newsletter (scroll down to find the email subscription option)
π GitHub: codewalnut
π€ Professional Services
Consulting: Custom Metabase integrations and AI solutions
Training: MCP and business intelligence workshops
Support: Enterprise-grade support and maintenance
π’ Follow us for updates on new MCP servers, AI integrations, and business intelligence tools!
π License
This project is licensed under the Apache License 2.0.
You can find the full license text in the LICENSE file.
Available Tools
30 toolscopy_metabase_dashboardB
Copy a dashboard.
Args: from_dashboard_id (int): ID of the source dashboard to copy. name (str): Name for the new dashboard. description (str, optional): Description for the new dashboard. collection_id (int, optional): Collection ID for the new dashboard. is_deep_copy (bool, optional): Whether to perform a deep copy (copy linked cards too). collection_position (int, optional): Position in the collection.
Returns: Dict[str, Any]: New dashboard metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| from_dashboard_id | Yes | ||
| name | Yes | ||
| description | No | ||
| collection_id | No | ||
| is_deep_copy | No | ||
| collection_position | 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 full burden. While it mentions the tool copies a dashboard and describes parameters, it doesn't disclose important behavioral traits: whether this requires specific permissions, whether the copy is immediate or asynchronous, what happens if the source dashboard doesn't exist, or whether there are rate limits. The 'is_deep_copy' parameter hint is useful but insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and well-structured with clear sections (Args, Returns). The opening sentence states the core purpose concisely. The parameter explanations are efficient, though the 'Returns' section could be more specific about what 'new dashboard metadata' includes. Overall, it's front-loaded and wastes little space.
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 mutation tool with 6 parameters and no annotations, the description is adequate but has gaps. The output schema exists, so return values don't need explanation. However, it lacks context about permissions, error conditions, and how this tool relates to siblings. Given the complexity of dashboard copying operations, more behavioral context would be helpful despite the parameter documentation.
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 compensates well by explaining all 6 parameters in the Args section, adding meaning beyond the bare schema. It clarifies optional vs required parameters and provides semantic context for each (e.g., 'is_deep_copy' copies linked cards). However, it doesn't explain parameter constraints like valid ID ranges or name length limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'copy' and resource 'dashboard', making the purpose evident. It distinguishes from siblings like 'create_metabase_dashboard' by specifying it's a copy operation rather than creating from scratch. However, it doesn't explicitly contrast with other dashboard-related tools like 'update_metabase_dashboard' or 'get_dashboard_by_id'.
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. With siblings like 'create_metabase_dashboard' and 'update_metabase_dashboard', there's no indication whether this should be used for duplicating existing dashboards versus creating new ones from templates or modifying existing ones. The description is purely functional without contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metabase_cardA
Create a new card (chart or table) in Metabase via the /api/card endpoint.
This function creates a visual card using either SQL or MBQL queries and supports all chart types including pie, donut, bar, table, and KPI-style metrics.
Args: name (str): Display name of the card in Metabase.
dataset_query (dict):
Defines the query behind the chart.
Required structure:
- "type": "native" or "query"
- "native": { "query": "..." }, for SQL
- "query": {...}, for MBQL
- "database": database ID
display (str):
Visualization type. Common values:
- "table", "bar", "line", "pie", "area", "scatter", "funnel", "pivot-table", "map"
type (str, optional):
Card type, defaults to "question".
- "question": general chart or table
- "metric": for KPI display
- "model": reserved/legacy
visualization_settings (dict, optional):
Controls chart appearance and formatting. Structure varies by chart type.
ββ π Bar / Line / Area ββ
{
"graph": {
"x_axis": "destination",
"y_axis": ["seatsSold"],
"series": "flightType",
"metrics": ["seatsSold"],
"x_axis_label": "Destination",
"y_axis_label": "Seats Sold",
"x_axis_formatting": {
"scale": "ordinal",
"label_rotation": 45
},
"y_axis_formatting": {
"number_style": "decimal",
"suffix": " pax"
}
},
"show_legend": true,
"legend_position": "bottom"
}
ββ π₯§ Pie / Donut Charts ββ
{
"pie": {
"category": "destination", # Label or group for slices
"metric": "seatsSold", # Size of each slice
"labels": true, # Show category names
"show_values": true, # Show numeric values inside slices
"inner_radius": 0.6, # Enables donut (0 = full pie)
"outer_radius": 0.95, # Size scaling (0.0 to 1.0)
"outer_ring": true # Enables dual-ring charts
},
"show_legend": true,
"legend_position": "right"
}
Notes on ring options:
- `inner_radius` creates a donut shape. Recommended: 0.5β0.8.
- `outer_radius` controls the size of the entire chart area.
- `outer_ring` enables comparison across rings, useful when the query returns multiple groupings/metrics.
ββ π Table ββ
{
"table.pivot_column": "flightType",
"column_settings": {
"seatsSold": {
"number_style": "decimal",
"suffix": " pax"
}
}
}
collection_id (int, optional):
Save card into a specific Metabase collection (folder).
description (str, optional):
Description or help text for the card.
parameter_mappings (list, optional):
Used when linking dashboard filters to this card.
Example:
[
{
"parameter_id": "flightType",
"card_id": 123,
"target": ["dimension", ["template-tag", "flightType"]]
}
]
collection_position (int, optional):
Optional order in the collection.
result_metadata (list, optional):
Optional field metadata describing result set.
cache_ttl (int, optional):
Cache duration (in seconds). 0 disables caching.
parameters (list, optional):
List of query parameters for SQL or MBQL filters.
Example: [{"name": "region", "type": "category", "slug": "region"}]
dashboard_id (int, optional):
Adds this card to an existing dashboard.
dashboard_tab_id (int, optional):
If the dashboard has tabs, specify the tab ID to attach the card to.
entity_id (str, optional):
External or custom ID for embedding/syncing cards.Returns: Dict[str, Any]: A dictionary representing the created card including: - id (int) - name (str) - dataset_query (dict) - visualization_settings (dict) - created_at, updated_at, etc.
Example: >>> await create_metabase_card( name="Seats Sold by Destination (Donut with Outer Ring)", display="pie", dataset_query={ "type": "native", "native": { "query": "SELECT destination, SUM("seatsSold") AS total_seats_sold FROM "Flight" GROUP BY destination" }, "database": 2 }, visualization_settings={ "pie": { "category": "destination", "metric": "total_seats_sold", "labels": true, "inner_radius": 0.6, "outer_radius": 0.95, "show_values": true, "outer_ring": true }, "show_legend": true, "legend_position": "right" }, collection_id=3 )
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| dataset_query | Yes | ||
| display | Yes | ||
| type | No | question | |
| visualization_settings | No | ||
| collection_id | No | ||
| description | No | ||
| parameter_mappings | No | ||
| collection_position | No | ||
| result_metadata | No | ||
| cache_ttl | No | ||
| parameters | No | ||
| dashboard_id | No | ||
| dashboard_tab_id | No | ||
| entity_id | 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 of behavioral disclosure. It effectively describes that this is a creation operation (implying mutation), specifies it uses the /api/card endpoint, and provides detailed examples of visualization settings. However, it doesn't mention authentication requirements, rate limits, or error handling, which are important for a tool with 15 parameters.
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?
While the description is comprehensive, it's quite lengthy with detailed formatting examples and notes that could be condensed. The front-loaded purpose is clear, but the extensive parameter documentation and examples make it less concise than ideal, though all content appears relevant.
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 (15 parameters, nested objects, no annotations), the description provides complete coverage: clear purpose, detailed parameter explanations, return value documentation, and a comprehensive example. With an output schema present, the description appropriately focuses on usage rather than return structure, making it fully adequate for this complex 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?
Given 0% schema description coverage and 15 parameters, the description compensates excellently by providing detailed explanations for all parameters, including required structures, common values, optional defaults, and extensive examples for visualization_settings. It adds substantial meaning beyond what the bare schema provides, making parameter usage clear.
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 creates a new card (chart or table) in Metabase via a specific API endpoint, specifying it supports SQL or MBQL queries and all chart types. This distinguishes it from sibling tools like create_metabase_dashboard or create_metabase_collection by focusing on visual cards rather than other Metabase 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?
The description provides clear context for when to use this tool (creating visual cards with queries) and implies alternatives through sibling tools like update_metabase_card for modifications or get_metabase_cards for retrieval. However, it lacks explicit guidance on when NOT to use it or direct comparisons to alternatives like create_metabase_dashboard for dashboard creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metabase_collectionB
Create a new Metabase collection.
Args: name (str): Name of the collection. color (str, optional): Hex color code. parent_id (int, optional): ID of the parent collection.
Returns: Dict[str, Any]: Newly created collection metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| 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?
With no annotations provided, the description carries full burden but only states it 'creates' without detailing behavioral aspects. It doesn't mention whether this requires admin permissions, if collections are permanent or deletable, rate limits, or error conditions. The return type is mentioned but not elaborated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for Args and Returns. It's front-loaded with the core purpose, and each sentence adds value. Slightly verbose with 'Dict[str, Any]' but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 3 parameters with 0% schema coverage, and an output schema exists (though not shown), the description covers basics but lacks depth. It explains parameters and return type but misses behavioral context like permissions, side effects, or error handling that would be crucial for a creation 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?
Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all three parameters: name (required), color (optional hex code), and parent_id (optional parent collection ID). This adds meaningful context beyond the bare schema, though it doesn't explain format constraints like color validation.
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 creates a new Metabase collection, specifying the verb 'create' and resource 'Metabase collection'. It distinguishes from siblings like 'create_metabase_card' or 'create_metabase_dashboard' by focusing on collections, but doesn't explicitly contrast with similar creation tools beyond naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'update_metabase_collection' or 'get_metabase_collection'. The description lacks context about prerequisites, permissions needed, or typical workflows involving collection creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metabase_dashboardB
Create a new dashboard in Metabase.
Args: name (str): Name of the dashboard. description (str, optional): Dashboard description. collection_id (int, optional): Collection ID. parameters (list, optional): Parameters for the dashboard. tabs (list, optional): Tabs for the dashboard (list of {"name": "Tab Name"}). cache_ttl (int, optional): Cache time to live in seconds. collection_position (int, optional): Position in the collection.
Returns: Dict[str, Any]: Created dashboard metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| collection_id | No | ||
| parameters | No | ||
| tabs | No | ||
| cache_ttl | No | ||
| collection_position | 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 full burden but provides minimal behavioral context. It mentions the tool creates something and returns metadata, but doesn't disclose permission requirements, whether this is a write operation (implied but not stated), error conditions, rate limits, or what happens if a dashboard with the same name exists. The 'Returns' section adds some value but is basic.
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 clear sections (Args, Returns). The main description is a single clear sentence, and parameter explanations are efficient. Some minor verbosity in repeating 'optional' for each optional parameter, but overall very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 7 parameters and no annotations, the description provides good parameter documentation and mentions the return type. However, it lacks important context about permissions, error handling, and behavioral constraints. The existence of an output schema helps, but the description should do more for a mutation tool with no safety annotations.
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 and 7 parameters, the description provides excellent parameter semantics. It clearly explains what each parameter represents (e.g., 'Name of the dashboard', 'Dashboard description', 'Collection ID', etc.) and indicates which are optional. This significantly compensates for the schema's lack of 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 'Create a new dashboard in Metabase' which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'copy_metabase_dashboard' or 'update_metabase_dashboard' - the agent must infer that 'create' means new vs 'copy' or '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?
No guidance on when to use this tool versus alternatives like 'copy_metabase_dashboard' or 'update_metabase_dashboard'. The description provides no context about prerequisites, permissions needed, or when this creation operation is appropriate versus other dashboard-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metabase_databaseA
Create a new database connection in Metabase.
Args: name (str): Name of the database. engine (str): Database engine. details (Dict[str, Any]): Connection details. auto_run_queries (bool, optional): Enable auto run. cache_ttl (int, optional): Cache time-to-live. is_full_sync (bool, optional): Whether to perform full sync. schedule (Dict[str, Any], optional): Sync schedule. timezone (str, optional): Timezone for the database. metadata_sync (bool, optional): Enable metadata sync.
Returns: Dict[str, Any]: Created database metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| engine | Yes | ||
| details | Yes | ||
| auto_run_queries | No | ||
| cache_ttl | No | ||
| is_full_sync | No | ||
| schedule | No | ||
| timezone | No | ||
| metadata_sync | 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 full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't mention required permissions, whether this operation is idempotent, potential side effects, rate limits, or error conditions. The return format is mentioned but without behavioral context about what happens during creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns) and uses bullet-like formatting. The opening sentence is front-loaded with the core purpose. Some parameter descriptions could be more detailed (e.g., 'Connection details' is vague), but overall the structure is efficient with minimal wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 parameters, mutation operation, no annotations) but with output schema present, the description is moderately complete. It covers parameters well and mentions the return type, but lacks behavioral context about the creation process, permissions, or error handling. For a mutation tool with this many parameters, more operational guidance would be beneficial.
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 and 9 parameters (3 required), the description provides excellent parameter semantics. Each parameter is listed with name, type, and brief explanation of purpose (e.g., 'Connection details' for details, 'Enable auto run' for auto_run_queries). This fully compensates for the lack of schema descriptions and helps the agent understand what each parameter controls.
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 specific action ('Create a new database connection') and resource ('in Metabase'), distinguishing it from sibling tools like create_metabase_card or create_metabase_dashboard which create different Metabase resources. The verb 'create' paired with 'database connection' provides unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There are sibling tools like update_metabase_database and delete_metabase_database, but no indication of when to create versus update, or what prerequisites might be needed. No exclusions or contextual recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metabase_groupB
Create a new group (role) in Metabase.
Args: name (str): Name of the group to create. ldap_dn (str, optional): LDAP Distinguished Name if applicable.
Returns: Dict[str, Any]: Created group metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| ldap_dn | 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 of behavioral disclosure. While it correctly indicates this is a creation operation, it doesn't describe what happens after creation (e.g., whether the group becomes immediately active, default permissions, or if there are limitations on group names). It mentions LDAP integration but doesn't explain the implications. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.
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 and appropriately sized. It begins with a clear purpose statement, then provides organized sections for Args and Returns with bullet-like formatting. Every sentence earns its place, with no redundant or unnecessary information. The formatting helps with readability despite being a single paragraph.
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 that this is a creation tool with no annotations, 2 parameters (one optional), and an output schema exists (so return values are documented elsewhere), the description is moderately complete. It covers the basic purpose and parameters but lacks important context about permissions, error conditions, relationship to other tools, and behavioral details that would help an agent use it correctly in complex scenarios.
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 meaningful semantic context beyond the 0% schema description coverage. It explains that 'name' is for the group name and 'ldap_dn' is an optional LDAP Distinguished Name, clarifying what these parameters represent. However, it doesn't provide format requirements, length limits, or examples for either parameter, leaving some practical usage questions unanswered.
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: 'Create a new group (role) in Metabase.' It specifies the verb ('Create') and resource ('group/role'), but doesn't explicitly differentiate it from sibling tools like 'create_metabase_user' or 'create_metabase_collection' beyond the resource type. The parenthetical '(role)' adds helpful clarification about what a 'group' represents in Metabase context.
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. It doesn't mention sibling tools like 'get_metabase_groups' (for listing existing groups) or 'delete_metabase_group' (for removal), nor does it specify prerequisites, permissions needed, or typical use cases for creating groups versus users or other resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metabase_userB
Create a new user in Metabase.
Args: first_name (str): User's first name. last_name (str): User's last name. email (str): Email address. password (str): Account password. login_attributes (dict, optional): Additional login metadata. group_ids (list, optional): List of group IDs to assign the user. is_superuser (bool, optional): Whether the user is a superuser.
Returns: Dict[str, Any]: Created user metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| first_name | Yes | ||
| last_name | Yes | ||
| Yes | |||
| password | Yes | ||
| login_attributes | No | ||
| group_ids | No | ||
| is_superuser | 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 full burden but only states it 'creates' a user without disclosing behavioral traits like required permissions, whether it sends email notifications, rate limits, or error conditions. It mentions the return type but doesn't explain what 'Created user metadata' includes or potential side effects.
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 followed by Args and Returns sections, making it easy to parse. It's appropriately sized, though the parameter explanations could be more detailed without sacrificing 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?
Given the tool's complexity (7 parameters, mutation operation) and no annotations, the description is moderately complete but has gaps: it doesn't cover error handling, authentication needs, or how it differs from sibling tools. The output schema exists, so describing return values isn't necessary, but more behavioral context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensateβit does by listing all 7 parameters with types and brief explanations, adding meaning beyond the schema's titles. However, it lacks details on format constraints (e.g., email validation, password complexity) or examples for optional parameters like 'login_attributes'.
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 user in Metabase' with specific verb ('Create') and resource ('user'), distinguishing it from sibling tools like 'update_metabase_user' or 'delete_metabase_user'. It precisely defines what the tool does without ambiguity.
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 'update_metabase_user' or 'get_metabase_users' is provided. The description lacks context about prerequisites, permissions needed, or typical use cases, offering only basic functional information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metabase_cardC
Delete a card from Metabase.
Args: card_id (int): ID of the card to delete.
Returns: Dict[str, Any]: Deletion confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes |
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. While 'Delete' implies a destructive mutation, the description doesn't disclose critical behavioral traits: whether deletion is permanent or reversible, what permissions are required, whether it affects dependent resources, or any rate limits. The 'Returns' section mentions a confirmation but doesn't describe its structure or meaning.
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 appropriately sized with three sentences: purpose, args, and returns. It's front-loaded with the main action. The structure is clear but could be more efficient by integrating the parameter explanation into a single cohesive paragraph.
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 that this is a destructive mutation tool with no annotations and an output schema exists (though not shown), the description is minimally complete. It covers the basic purpose and parameter, but lacks important context about behavioral implications, error conditions, and usage guidelines that would be crucial for safe operation.
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 the parameter 'card_id' with type 'int' and explanation 'ID of the card to delete', which provides basic semantics. However, with 0% schema description coverage and only 1 parameter, this is adequate but minimal. It doesn't explain where to find the card ID, format constraints, or validation rules.
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 'Delete a card from Metabase' which is a specific verb+resource combination. It distinguishes this from sibling tools like 'create_metabase_card' or 'update_metabase_card' by specifying the destructive delete operation. However, it doesn't explicitly differentiate from other delete operations like 'delete_metabase_dashboard' beyond the resource type.
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. There's no mention of prerequisites (e.g., needing the card ID), when not to use it (e.g., for soft deletion), or what happens after deletion. With multiple sibling delete tools, explicit differentiation would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metabase_collectionC
Delete a Metabase collection.
Args: collection_id (int): ID of the collection to delete.
Returns: Dict[str, Any]: Confirmation of the collection deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes |
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 tool deletes a collection and returns a confirmation, but lacks critical behavioral details: whether deletion is irreversible, permission requirements, effects on nested items, or error handling. For a destructive operation with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose. The Args and Returns sections are structured but slightly verbose for a single parameter; every sentence earns its place by clarifying inputs and outputs efficiently.
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 (destructive operation), lack of annotations, and presence of an output schema (which handles return values), the description is partially complete. It covers the basic action and parameter but misses critical context like safety warnings or usage prerequisites, making it adequate with clear 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%, but the description compensates by documenting the single parameter 'collection_id' with its type and purpose. However, it doesn't add meaning beyond the schema (e.g., valid ID ranges or sourcing methods). With one parameter and partial compensation, this meets the baseline for minimal viability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('a Metabase collection'), making the purpose unambiguous. It distinguishes from siblings like 'get_metabase_collection' or 'update_metabase_collection' by specifying deletion. However, it doesn't explicitly differentiate from other delete tools (e.g., 'delete_metabase_card'), which slightly limits sibling 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. It doesn't mention prerequisites (e.g., needing collection ID from 'get_metabase_collection'), exclusions (e.g., not for non-existent collections), or comparisons with other deletion tools in the sibling list. This leaves the agent without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metabase_dashboardB
Delete a dashboard from Metabase.
Args: dashboard_id (int): ID of the dashboard to delete.
Returns: Dict[str, Any]: Deletion confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes |
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. While it mentions 'Delete' (implying a destructive operation) and 'Deletion confirmation' (hinting at a response), it lacks critical behavioral details such as whether deletion is permanent/irreversible, if it requires admin permissions, or if it affects dependent resources (e.g., cards on the dashboard).
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 appropriately sized and front-loaded with the core purpose in the first sentence. The Args/Returns sections are structured but slightly verbose for a single parameter; however, 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's destructive nature, no annotations, and an output schema (which covers return values), the description is minimally adequate. It explains the action and parameter but lacks context on safety, permissions, or side effects, which is a significant gap for a deletion 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?
With only 1 parameter and 0% schema description coverage, the description compensates well by clearly explaining 'dashboard_id (int): ID of the dashboard to delete.' This adds essential meaning beyond the schema's basic type information, though it doesn't specify format constraints (e.g., valid ID ranges).
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 specific action ('Delete') and resource ('a dashboard from Metabase'), making the purpose immediately apparent. It distinguishes itself from sibling tools like 'get_dashboard_by_id' (read) and 'update_metabase_dashboard' (modify) by focusing on permanent removal.
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. It doesn't mention prerequisites (e.g., needing the dashboard ID from a previous operation), exclusions (e.g., not for cards or collections), or related tools like 'delete_metabase_card' for similar operations on different resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metabase_databaseB
Delete a database connection from Metabase.
Args: database_id (int): ID of the database to delete.
Returns: Dict[str, Any]: Deletion confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes |
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 of behavioral disclosure. It states the tool deletes a database connection and returns a confirmation, but lacks critical details: whether deletion is permanent/reversible, required permissions, side effects (e.g., impact on dependent dashboards/cards), or error handling. For a destructive operation with zero annotation coverage, this is a significant gap.
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 and appropriately sized, with a clear purpose statement followed by Args and Returns sections. Every sentence adds value: the first defines the action, and the others document parameters and return type. It could be slightly more concise by integrating the Args/Returns into a single sentence, but it's efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive operation), lack of annotations, and presence of an output schema (which covers return values), the description is partially complete. It covers the basic purpose and parameters but misses behavioral context like safety warnings or dependencies. For a delete tool, more detail on consequences would improve completeness, but the output schema helps mitigate 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?
The description adds meaningful context beyond the input schema. The schema only indicates 'database_id' is an integer, but the description clarifies it's 'ID of the database to delete', specifying its purpose. With 0% schema description coverage and only 1 parameter, this adequately compensates, though it could note format constraints (e.g., where to find the ID).
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 specific action ('Delete') and resource ('a database connection from Metabase'), distinguishing it from sibling tools like 'delete_metabase_card' or 'delete_metabase_dashboard' which target different resources. It precisely identifies what the tool does without being vague or tautological.
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. It doesn't mention prerequisites (e.g., needing an existing database), exclusions (e.g., not for read-only operations), or comparisons to siblings like 'get_metabase_databases' for listing databases. Usage is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metabase_groupA
Delete a group (role) from Metabase.
Args: group_id (int): ID of the group to delete.
Returns: Dict[str, Any]: Deletion confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes |
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 full burden for behavioral disclosure. While it mentions 'Deletion confirmation' in returns, it doesn't specify whether this operation is reversible, requires specific permissions, has side effects (e.g., removing users from the group), or any rate limits. For a destructive operation with zero annotation coverage, this leaves significant behavioral gaps.
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 perfectly structured and front-loaded: the first sentence states the purpose, followed by clear Arg/Return sections. Every sentence earns its place with no redundant information. The formatting with headings makes it easy to parse 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?
Given this is a destructive operation with no annotations and 0% schema coverage, the description does the minimum viable job. The output schema exists (Returns: Dict[str, Any]), so the description doesn't need to detail return values. However, for a delete operation, it should ideally mention permissions, irreversibility, or side effects to be fully 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?
With only 1 parameter and 0% schema description coverage, the description compensates well by clearly explaining that 'group_id' is the 'ID of the group to delete.' This adds essential meaning beyond the bare schema, though it doesn't specify format constraints (e.g., positive integers) or where to find valid group IDs.
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 specific action ('Delete') and resource ('a group (role) from Metabase'), distinguishing it from sibling tools like delete_metabase_user or delete_metabase_card by specifying the target resource type. It uses precise terminology that leaves no ambiguity about what the tool does.
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. It doesn't mention prerequisites (e.g., needing admin permissions), consequences (e.g., what happens to users in the deleted group), or when to choose other deletion tools like delete_metabase_user. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metabase_userB
Delete a user from Metabase.
Args: user_id (int): ID of the user to delete.
Returns: Dict[str, Any]: Deletion confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
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 states this is a deletion operation, implying it's destructive, but doesn't disclose critical behavioral traits: whether deletion is permanent/reversible, what permissions are required, if there are side effects (e.g., orphaned resources), rate limits, or error conditions. The return value is mentioned but not elaborated beyond type.
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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured Args and Returns sections. Every sentence earns its place, though the Returns section could be more informative given the output schema exists. No wasted words, but slightly sparse for a destructive operation.
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 this is a destructive tool with no annotations, 0% schema coverage, but an output schema exists, the description is minimally adequate. It covers the basic purpose and parameter, but lacks behavioral context (safety, permissions, side effects) and usage guidance. The output schema mitigates the need to explain return values, but overall completeness is limited for a high-stakes operation.
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 and only 1 parameter, the description compensates well by explicitly documenting the parameter in the Args section: 'user_id (int): ID of the user to delete.' This adds essential meaning beyond the bare schema, clarifying the parameter's purpose and type. However, it doesn't specify format constraints (e.g., valid ID range) or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('a user from Metabase'), making the purpose immediately understandable. However, it doesn't differentiate from sibling delete tools (like delete_metabase_card, delete_metabase_collection, etc.) beyond specifying the resource type, which is somewhat implied by the tool name itself.
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 about when to use this tool versus alternatives. While sibling tools include create_metabase_user and get_metabase_users, the description doesn't mention prerequisites (e.g., user must exist), exclusions (e.g., cannot delete active users), or related operations. The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_sql_queryA
Execute a native SQL query through Metabase.
Args: database_id (int): ID of the database to execute the query on. native_query (str): The SQL query to execute. parameters (list, optional): Query parameters.
Returns: Dict[str, Any]: Query execution result.
Notes: - For PostgreSQL databases, column names are be case-sensitive - Use double quotes around column names with mixed case (e.g., "columnName") - Example with quoted column names: SELECT "userId", "orderDate", COUNT(*) FROM "Orders" GROUP BY "userId", "orderDate"
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes | ||
| query | 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 provided, the description carries full burden. It discloses important behavioral traits like PostgreSQL case-sensitivity requirements and quoting conventions, but doesn't mention authentication needs, rate limits, transaction behavior, or what happens with invalid queries. The description adds meaningful context but leaves gaps for a mutation 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 well-structured with clear sections (Args, Returns, Notes) and front-loaded purpose. Every sentence adds value, though the PostgreSQL-specific notes might be overly detailed for a general SQL execution tool. The example query is helpful but slightly lengthens the description.
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 this is a mutation tool with no annotations, 0% schema coverage, but with output schema present, the description does well. It covers purpose, parameters, return type, and important behavioral notes. The main gap is lack of guidance on error handling or security implications for a raw SQL execution 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?
Schema description coverage is 0%, so the description must compensate. It clearly explains all three parameters: database_id identifies the target, native_query contains the SQL, and parameters are optional query parameters. The description adds crucial meaning beyond the bare schema, though it could specify parameter format or types more explicitly.
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 specific action ('Execute a native SQL query') and resource ('through Metabase'), distinguishing it from all sibling tools which focus on CRUD operations for Metabase objects rather than direct SQL execution. The verb+resource combination is precise and 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 clear context for when to use this tool (executing SQL queries on Metabase databases) and includes specific notes about PostgreSQL case-sensitivity. However, it doesn't explicitly state when NOT to use it or mention alternatives like the 'get_card_query_results' sibling tool for pre-defined queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_card_query_resultsB
Get the results of a card's query.
Args: card_id (int): ID of the card.
Returns: Dict[str, Any]: Query result data.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes |
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 this is a 'Get' operation, implying read-only behavior, but doesn't disclose any behavioral traits such as authentication requirements, rate limits, error conditions, or what 'Query result data' entails (e.g., format, size, or pagination). The description is minimal and lacks critical operational context for a tool that likely interacts with a database system.
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 appropriately sized and front-loaded, with the core purpose stated first. The 'Args' and 'Returns' sections are structured but slightly redundant since an output schema exists. Every sentence earns its place, though the 'Returns' line could be omitted given the output schema. It's efficient without being overly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a query tool with no annotations), 0% schema coverage, but an output schema exists, the description is minimally complete. The output schema handles return values, so the description doesn't need to explain them. However, it lacks context on behavioral aspects (e.g., permissions, errors) and usage guidelines, making it adequate but with clear gaps for effective tool 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?
With 0% schema description coverage, the description must compensate. It adds meaning by explaining that 'card_id' is an 'ID of the card', which clarifies the parameter's role beyond the schema's generic 'integer' type. However, it doesn't provide details like valid ranges, where to find card IDs, or examples. Since there's only one parameter, the description adequately covers its semantics, but more context would be beneficial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'results of a card's query', making the purpose understandable. It distinguishes from siblings like 'execute_sql_query' (which runs raw SQL) and 'get_metabase_cards' (which lists cards), but doesn't explicitly contrast with 'get_dashboard_cards' or 'get_dashboard_items' which might retrieve related metadata. The purpose is specific but sibling differentiation could be more explicit.
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. It doesn't mention prerequisites (e.g., needing an existing card), exclusions (e.g., not for dashboard queries), or direct comparisons to siblings like 'execute_sql_query' or 'get_dashboard_cards'. Usage is implied from the name and purpose alone, with no explicit context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboard_by_idB
Get a dashboard by ID.
Args: dashboard_id (int): ID of the dashboard.
Returns: Dict[str, Any]: Dashboard metadata including id, name, cards, and tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes |
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 states this is a 'Get' operation, implying read-only behavior, but doesn't disclose important traits like whether it requires authentication, what happens with invalid IDs (e.g., errors vs. null returns), rate limits, or pagination. The description adds minimal behavioral context beyond the basic operation.
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 perfectly structured and concise: a clear purpose statement followed by well-formatted Args and Returns sections. Every sentence earns its place, with no redundant information. The front-loaded purpose makes it immediately 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's low complexity (single parameter, read operation) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the parameter semantics adequately. However, it lacks context about authentication requirements and error handling, which would be helpful despite the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly documents the single parameter 'dashboard_id' with its type (int) and meaning ('ID of the dashboard'), adding semantic value beyond the schema which has 0% description coverage. This fully compensates for the schema gap. However, it doesn't provide examples or constraints (e.g., valid ID ranges).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a dashboard by ID'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'get_metabase_dashboards' (plural) by specifying retrieval of a single dashboard via ID. However, it doesn't explicitly contrast with other get_* tools like 'get_dashboard_cards' or 'get_dashboard_items'.
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. It doesn't mention when to choose this over 'get_metabase_dashboards' for listing dashboards, or how it relates to 'get_dashboard_cards'/'get_dashboard_items'. There's also no information about prerequisites like authentication or permissions needed to access dashboards.
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 cards in a dashboard.
Args: dashboard_id (int): ID of the dashboard.
Returns: Dict[str, Any]: Cards in the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes |
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 of behavioral disclosure. It states the tool 'Get cards in a dashboard,' which implies a read-only operation, but doesn't clarify aspects like authentication requirements, rate limits, error handling, or what 'cards' entail (e.g., metadata, content, or both). This leaves significant gaps for safe and effective use.
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 and concise, with a clear purpose statement followed by separate 'Args' and 'Returns' sections. Every sentence serves a purpose without redundancy, making it easy to parse and understand 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?
Given the tool's low complexity (1 parameter) and the presence of an output schema (implied by 'Returns: Dict[str, Any]'), the description is somewhat complete. However, with no annotations and minimal behavioral details, it falls short of providing full context for reliable use, especially compared to sibling tools that might offer similar functionality.
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 includes an 'Args' section that explains the 'dashboard_id' parameter as 'ID of the dashboard,' adding semantic meaning beyond the schema's title 'Dashboard Id' and type 'integer.' Since schema description coverage is 0%, this compensates partially, but it's minimal and doesn't elaborate on format or constraints (e.g., valid ranges).
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: 'Get cards in a dashboard.' This specifies the verb ('Get') and resource ('cards in a dashboard'), making it easy to understand what the tool does. However, it doesn't explicitly distinguish this from sibling tools like 'get_dashboard_items' or 'get_metabase_cards', which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools such as 'get_dashboard_items' and 'get_metabase_cards' available, there's no indication of how this tool differs in context, scope, or use cases, leaving the agent to guess based on names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboard_itemsC
Get all items in a dashboard.
Args: dashboard_id (int): ID of the dashboard.
Returns: Dict[str, Any]: All items in the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes |
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 of behavioral disclosure. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, has rate limits, returns paginated results, or what happens with invalid dashboard IDs. The description mentions the return type but doesn't explain the structure or content of the returned items.
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 clear purpose statement followed by Args and Returns sections. Every sentence serves a purpose, though the 'Returns' section could be slightly more informative about what 'All items' encompasses.
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 read operation with one parameter and an output schema, the description is minimally adequate. However, with no annotations and multiple similar sibling tools, it should provide more context about differentiation, authentication requirements, and error handling to be truly 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?
The description explicitly documents the single parameter 'dashboard_id' and its purpose ('ID of the dashboard'), which adds meaningful context beyond the schema's 0% description coverage. However, it doesn't provide format details (e.g., where to find this ID, valid ranges) or examples, leaving some gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all items in a dashboard'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'get_dashboard_by_id' or 'get_dashboard_cards', which appear to have overlapping functionality in the same domain.
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_by_id' or 'get_dashboard_cards'. It doesn't mention prerequisites, exclusions, or specific contexts where this tool is preferred over similar sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metabase_cardsB
Get a list of all saved questions (cards).
Returns: Dict[str, Any]: Cards metadata including names, ids, collections.
| 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 states the action ('Get a list') and return type, but lacks details on permissions, rate limits, pagination, or error handling. For a tool with no annotations, this leaves significant behavioral gaps, though it doesn't contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose in the first sentence. The second sentence adds return value details, which is useful given the output schema. There's no wasted text, though it could be slightly more structured for 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 the tool's simplicity (0 parameters, output schema exists), the description is adequate but minimal. It covers the basic purpose and return type, but lacks context on usage, behavior, or sibling differentiation. With no annotations and an output schema, it meets minimum viability but has clear gaps in guidance and transparency.
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 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add param info, which is appropriate here. A baseline of 4 is applied as per rules for 0 parameters, since it doesn't need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('list of all saved questions (cards)'), making the purpose evident. It distinguishes from siblings like 'get_card_query_results' by focusing on metadata retrieval rather than query execution. However, it doesn't explicitly differentiate from other 'get' tools like 'get_metabase_collection' or 'get_metabase_dashboards' beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With siblings like 'get_metabase_collection' and 'get_metabase_dashboards', the description lacks context on whether this is for general listing, filtering, or specific use cases. It mentions returning metadata but doesn't specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metabase_collectionB
Retrieve a single Metabase collection by ID.
Args: collection_id (int): ID of the collection.
Returns: Dict[str, Any]: Collection metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes |
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 full burden but only states it's a retrieval operation. It doesn't disclose behavioral traits like authentication requirements, rate limits, error handling, or whether it's idempotent. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear purpose statement followed by structured Args and Returns sections. It's front-loaded and wastes no words, though the 'Dict[str, Any]' return type could be slightly more descriptive for non-technical contexts.
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 low complexity (single parameter) and the presence of an output schema (which covers return values), the description is moderately complete. However, it lacks context on permissions, errors, or relationships to sibling tools, leaving room for improvement in guiding the 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?
The description adds meaningful context for the single parameter by specifying it's an 'ID of the collection', which clarifies its purpose beyond the schema's generic 'Collection Id' title. Since schema description coverage is 0%, this compensation is valuable, though it doesn't detail format constraints (e.g., valid ID ranges).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and resource 'a single Metabase collection by ID', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_metabase_cards' or 'get_metabase_dashboards' which retrieve other resources, so it doesn't reach the highest score.
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. It doesn't mention sibling tools like 'get_metabase_collections' (if it existed) for listing collections or 'update_metabase_collection' for modifications, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metabase_current_userA
Get current logged-in user info from Metabase.
Returns: Dict[str, Any]: User details like id, email, groups, etc.
| 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?
With no annotations provided, the description carries the full burden. It states the tool returns user details, which is helpful, but doesn't disclose behavioral traits like authentication requirements, rate limits, or error handling. It adds basic context about the return type but misses key operational details.
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 front-loaded with the core purpose in the first sentence, followed by a concise note on the return type. Both sentences add value without redundancy, making it efficiently structured and appropriately sized for the tool's simplicity.
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 low complexity (0 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool does and the return format, though it could benefit from more behavioral context. The output schema reduces the need to detail return values, so gaps are minor.
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 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on the return value. This meets expectations for a parameterless tool, earning a high score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('current logged-in user info from Metabase'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_metabase_users', which retrieves multiple users rather than the current one. This omission prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning 'current logged-in user', suggesting it's for retrieving the authenticated user's details. However, it lacks explicit guidance on when to use this versus alternatives like 'get_metabase_users' or prerequisites such as authentication context. This leaves room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metabase_dashboardsB
Get a list of dashboards in Metabase.
Returns: Dict[str, Any]: Dashboard metadata including id, name, and cards.
| 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 the full burden. It mentions the return type ('Dict[str, Any]') and some metadata fields ('id, name, and cards'), but lacks critical behavioral details like whether this lists all dashboards or requires permissions, if there's pagination or rate limits, or how 'cards' are structured. For a read operation with zero annotation coverage, this is insufficient.
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: one sentence states the purpose, and another describes the return value. Both sentences earn their place by providing essential information without redundancy. It could be slightly more front-loaded by integrating the return details, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters) and the presence of an output schema (which likely details the return structure), the description is somewhat complete. However, it lacks behavioral context (e.g., permissions, pagination) and usage guidelines relative to siblings, making it adequate but with clear gaps for an agent to operate effectively.
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 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate. A baseline of 4 is applied since there are no parameters to explain, and the schema fully covers this aspect.
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: 'Get a list of dashboards in Metabase.' It specifies the verb ('Get') and resource ('dashboards in Metabase'), making the intent unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_dashboard_by_id' or 'get_dashboard_cards', which are more specific retrieval operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With many sibling tools for retrieving Metabase data (e.g., 'get_dashboard_by_id', 'get_dashboard_cards', 'get_metabase_cards'), there's no indication of whether this tool is for bulk listing, filtering, or other contexts. Usage is 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.
get_metabase_databasesB
Get a list of connected databases in Metabase.
Returns: Dict[str, Any]: List of database 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 the full burden. It states the tool returns a list of database metadata, which is helpful, but doesn't disclose behavioral traits like whether it's a read-only operation, requires authentication, has rate limits, or pagination. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
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 and front-loaded: the first sentence clearly states the purpose, and the second provides return value information. There's no wasted text, and every sentence earns its place by adding necessary context beyond the tool name.
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 0 parameters, 100% schema coverage, and an output schema exists (implied by 'Has output schema: true'), the description is adequate for a simple list operation. However, with no annotations and sibling tools that are similar, it could benefit from more context about when to use it or what 'connected databases' entails. It's minimal but not incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter semantics, so it meets the baseline. No additional value is required, and it doesn't introduce confusion about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a list of connected databases in Metabase.' It specifies the verb ('Get') and resource ('connected databases'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'get_metabase_dashboards' or 'get_metabase_cards', which follow a similar pattern for other resources.
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. It doesn't mention prerequisites, context for usage, or exclusions. Given the sibling tools include other 'get_' operations for different Metabase resources, the agent must infer usage based on naming alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metabase_groupsB
Get a list of groups (roles) in Metabase.
Returns: Dict[str, Any]: Group metadata including id, name, etc.
| 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. While it mentions the return type ('Dict[str, Any]: Group metadata including id, name, etc.'), it doesn't disclose important behavioral traits like whether authentication is required, rate limits, pagination behavior, or what happens when no groups exist. The output schema exists, but the description doesn't add meaningful behavioral context beyond the return format hint.
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 appropriately concise with two sentences: one stating the purpose and one describing the return. Both sentences earn their place, and the structure is front-loaded with the core purpose first. It could be slightly more efficient by combining the two sentences, but it's not wasteful.
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 low complexity (0 parameters, simple read operation) and the existence of an output schema, the description is minimally adequate. However, it lacks important context for a tool with no annotations: it doesn't mention authentication requirements, error conditions, or how it differs from similar 'get' tools. The output schema helps, but the description should provide more operational 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?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description correctly indicates no parameters are needed by not mentioning any, which aligns perfectly with the empty input 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: 'Get a list of groups (roles) in Metabase.' It uses a specific verb ('Get') and resource ('groups/roles'), but doesn't explicitly distinguish it from sibling tools like 'get_metabase_users' or 'get_metabase_cards' that also retrieve lists of different resources.
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. It doesn't mention when this tool is appropriate, what prerequisites might exist, or how it differs from other 'get' tools in the sibling list like 'get_metabase_users' or 'get_metabase_dashboards'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metabase_usersB
Get a list of users in Metabase.
Returns: Dict[str, Any]: User metadata including id, email, groups, etc.
| 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?
With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions the return type ('Dict[str, Any]: User metadata including id, email, groups, etc.'), it doesn't address important behavioral aspects like whether this requires authentication, has rate limits, returns paginated results, or includes deactivated users. For a read operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.
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 clear purpose statement followed by return information. Both sentences add value: the first states what the tool does, the second clarifies the return format. No wasted words or redundant information, though it could be slightly more comprehensive given the behavioral gaps.
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 that this is a read operation with no parameters and an output schema exists, the description is adequate but has clear gaps. The presence of an output schema means the description doesn't need to detail return values, but it should provide more context about when to use this versus sibling tools and address authentication/behavioral concerns that aren't covered by annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage (empty schema). The description appropriately doesn't discuss parameters since none exist. A baseline of 4 is appropriate for zero-parameter tools where the schema fully documents the absence of inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('list of users in Metabase'), making the purpose immediately understandable. However, it doesn't distinguish this tool from similar sibling tools like 'get_metabase_current_user' or 'get_metabase_groups' - it just says 'users' without clarifying scope or relationship to other user/group retrieval tools.
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 about when to use this tool versus alternatives. With multiple sibling tools that retrieve user/group information (get_metabase_current_user, get_metabase_groups), the description offers no context about whether this retrieves all users, active users, or how it differs from the other user-related tools. 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.
update_metabase_cardB
Update an existing card in Metabase.
Args: card_id (int): ID of the card to update. name (str, optional): New name of the card. dataset_query (Dict[str, Any], optional): Dataset query definition. display (str, optional): Display type. type (str, optional): Card type. visualization_settings (Dict[str, Any], optional): Visualization settings. collection_id (int, optional): ID of the collection. description (str, optional): Description of the card. parameter_mappings (list, optional): Parameter mappings. collection_position (int, optional): Position in the collection. result_metadata (list, optional): Metadata for results. cache_ttl (int, optional): Cache TTL. parameters (list, optional): Query parameters. dashboard_id (int, optional): Dashboard ID. dashboard_tab_id (int, optional): Dashboard tab ID. entity_id (str, optional): Entity ID.
Returns: Dict[str, Any]: Updated card metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| name | No | ||
| dataset_query | No | ||
| display | No | ||
| type | No | ||
| visualization_settings | No | ||
| collection_id | No | ||
| description | No | ||
| parameter_mappings | No | ||
| collection_position | No | ||
| result_metadata | No | ||
| cache_ttl | No | ||
| parameters | No | ||
| dashboard_id | No | ||
| dashboard_tab_id | No | ||
| entity_id | 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 full burden for behavioral disclosure. It states this is an update operation but doesn't mention permission requirements, whether partial updates are allowed, what happens to unspecified fields, or any rate limits. The 'Returns' section describes output but doesn't cover error conditions or side effects. This is inadequate for a mutation tool with zero annotation coverage.
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 clear sections (Args, Returns) but is overly verbose due to listing all 16 parameters with brief descriptions. While this provides necessary information given the poor schema coverage, it makes the description lengthy. The core purpose statement is front-loaded, but the parameter list dominates the content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (16 parameters, mutation operation, no annotations) and the existence of an output schema, the description is partially complete. It covers parameters extensively but lacks behavioral context about permissions, partial updates, and error handling. The output schema handles return values, so the description appropriately focuses on inputs, but more behavioral guidance is needed for a mutation 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 provides a comprehensive parameter list with brief explanations for all 16 parameters, adding significant value beyond the input schema which has 0% description coverage. While the explanations are minimal (e.g., 'New name of the card'), they at least clarify what each parameter represents, which is essential given the schema's lack of descriptions. The required card_id is appropriately highlighted.
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 ('Update') and resource ('an existing card in Metabase'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling update tools like update_metabase_collection or update_metabase_dashboard, which follow the same pattern for different resources.
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 about when to use this tool versus alternatives. The description doesn't mention prerequisites (like needing an existing card_id), when not to use it, or how it differs from create_metabase_card or other sibling tools. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metabase_collectionB
Update an existing Metabase collection.
Args: collection_id (int): ID of the collection to update. name (str, optional): New name. color (str, optional): New color. parent_id (int, optional): New parent collection ID.
Returns: Dict[str, Any]: Updated collection metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes | ||
| name | 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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'update an existing collection' which implies mutation, but doesn't cover permissions needed, whether changes are reversible, error handling, or rate limits. This leaves significant gaps for a mutation 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 well-structured and front-loaded with the core purpose, followed by organized sections for Args and Returns. Every sentence adds value without redundancy, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutation with 4 parameters) and no annotations, the description is moderately complete. It covers parameters and return type, but lacks behavioral details like side effects or error cases. The presence of an output schema reduces the need to explain return values, but more context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by listing all parameters with brief explanations (e.g., 'ID of the collection to update', 'New name'). It clarifies that collection_id is required and others are optional, adding meaningful context beyond the bare 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 verb 'update' and resource 'Metabase collection', making the purpose evident. However, it doesn't differentiate from sibling tools like update_metabase_card or update_metabase_dashboard, which follow the same pattern for different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention prerequisites like needing an existing collection ID or how it differs from create_metabase_collection. The description only states what it does, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metabase_dashboardA
Update an existing dashboard in Metabase using structured inputs and auto-fallback behavior.
This function allows partial updates to a dashboard. If you don't pass optional fields like
dashcards or tabs, the current values from the existing dashboard will be fetched and reused.
Args: dashboard_id (int): The ID of the dashboard to update.
name (str, optional):
New name for the dashboard. If not provided, the current name will be retained.
description (str, optional):
Updated description for the dashboard.
collection_id (int, optional):
ID of the collection (folder) to move the dashboard into.
If not provided, the existing collection is kept. However,
if a new collection has been created,
it is mandatory to pass the collection ID.
Failure to do so will result in the dashboard being moved to the default collection,
where the chart details may not exist.
parameters (List[dict], optional):
List of dashboard-level filters (used for interactive filtering).
If omitted, existing parameters will be preserved.
tabs (List[DashboardTab], optional):
List of tabs to set on the dashboard.
If not passed, the current tab configuration is reused.
Each tab includes:
- `id`: Tab ID (optional if new)
- `name`: Display name of the tab
dashcards (List[DashboardCard], optional):
List of cards to place in the dashboard layout.
If omitted, the existing card layout is retained.
Each card requires:
- `id`: Use negative numbers to auto generate the ids
or use any unique value but,
it must be unique within the dashboard
- `card_id`: ID of the saved chart
- `row`, `col`: Grid position (top-left = 0,0)
- `size_x`, `size_y`: Width/height in grid cells
- `parameter_mappings`: List of filter mappings
points_of_interest (str, optional):
Free-text notes that appear in the dashboard as "Points of Interest".
caveats (str, optional):
Free-text notes that appear in the dashboard as "Caveats".
enable_embedding (bool, optional):
Whether to enable embedding for this dashboard.
If omitted, the existing setting is reused.
embedding_params (EmbeddingParams, optional):
Optional embedding configuration. Includes:
- `url`: Optional embed URL override
- `custom_css`: Optional custom styling
archived (bool, optional):
Whether to archive the dashboard. Defaults to existing value if omitted.
position (int, optional):
Optional global ordering value (affects dashboard listing).
collection_position (int, optional):
Sort order inside its collection folder.
cache_ttl (int, optional):
Result caching time in seconds (e.g., 3600 = 1 hour). 0 disables caching.
width (str, optional):
Dashboard layout mode: "fixed" (grid) or "full" (fluid width).
Defaults to existing setting if omitted.
show_in_getting_started (bool, optional):
Whether to show this dashboard in Metabaseβs βGetting Startedβ view.Returns:
Dict[str, Any]:
JSON object containing updated dashboard metadata from Metabase.
Includes fields like:
- id, name, description
- dashcards, tabs, parameters
- updated_at, created_at, etc.
Behavior:
- If dashcards is omitted, the existing layout will be preserved.
- If dashcards are passed without an id, id = -1 will be set automatically.
- If tabs are omitted, current dashboard tabs are reused.
- All unspecified fields fall back to the dashboard's current value.
Example: >>> await update_metabase_dashboard( dashboard_id=1, name="Updated Flight Dashboard", dashcards=[ DashboardCard(card_id=123, row=0, col=0, size_x=4, size_y=3), DashboardCard(card_id=124, row=0, col=4, size_x=4, size_y=3) ], tabs=[DashboardTab(name="Overview")], width="fixed" )
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | ||
| name | No | ||
| description | No | ||
| collection_id | No | ||
| parameters | No | ||
| tabs | No | ||
| dashcards | No | ||
| points_of_interest | No | ||
| caveats | No | ||
| enable_embedding | No | ||
| embedding_params | No | ||
| archived | No | ||
| position | No | ||
| collection_position | No | ||
| cache_ttl | No | ||
| width | No | ||
| show_in_getting_started | 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 of behavioral disclosure. It does an excellent job describing key behaviors: partial update capability, auto-fallback to existing values when fields are omitted, specific handling of dashcards without IDs (auto-assigns -1), and collection_id edge cases. It also includes a comprehensive 'Behavior' section detailing how unspecified fields are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Behavior, Example) but is quite lengthy due to the high parameter count. While most content is valuable, some redundancy exists (e.g., 'If omitted, existing values will be preserved' is repeated for multiple parameters). It could be more front-loaded with the most critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with 17 parameters, 0% schema description coverage, and no annotations, the description is remarkably complete. It covers purpose, usage, detailed parameter semantics, behavioral patterns, return values (though an output schema exists), and includes a practical example. The only minor gap is lack of authentication/authorization requirements.
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 description coverage, the description fully compensates by providing detailed semantic information for all 17 parameters. Each parameter includes: purpose explanation, optionality handling, default behaviors, and for complex parameters like dashcards and tabs, it details sub-fields and constraints (e.g., 'id must be unique within the dashboard'). This goes far beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Update an existing dashboard in Metabase using structured inputs and auto-fallback behavior.' It specifies the verb ('update'), resource ('dashboard in Metabase'), and distinguishes it from siblings like 'create_metabase_dashboard' by focusing on modifying existing resources rather than creating new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for updating existing dashboards with partial updates. It mentions the auto-fallback behavior for unspecified fields. However, it doesn't explicitly state when NOT to use it (e.g., vs. create_metabase_dashboard for new dashboards) or mention prerequisites like authentication requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metabase_databaseB
Update an existing database connection in Metabase.
Args: database_id (int): ID of the database to update. name (str, optional): Name of the database. details (Dict[str, Any], optional): Connection details. auto_run_queries (bool, optional): Enable auto run. cache_ttl (int, optional): Cache time-to-live. is_full_sync (bool, optional): Whether to perform full sync. schedule (Dict[str, Any], optional): Sync schedule. timezone (str, optional): Timezone for the database. metadata_sync (bool, optional): Enable metadata sync.
Returns: Dict[str, Any]: Updated database metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| database_id | Yes | ||
| name | No | ||
| details | No | ||
| auto_run_queries | No | ||
| cache_ttl | No | ||
| is_full_sync | No | ||
| schedule | No | ||
| timezone | No | ||
| metadata_sync | 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 full burden for behavioral disclosure. While 'Update' implies a mutation operation, the description doesn't specify what permissions are required, whether changes are reversible, what happens when optional parameters are omitted, or any rate limits/constraints. The return type is documented but not the content or structure of the metadata.
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 followed by organized Args and Returns sections. While somewhat lengthy due to listing 9 parameters, every sentence serves a purpose - no redundant or unnecessary information. The formatting helps readability.
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 mutation tool with 9 parameters and no annotations, the description does reasonably well by documenting all parameters and the return type. However, it lacks important context about authentication requirements, error handling, what constitutes valid 'details' or 'schedule' objects, and how this tool differs from other update operations in the sibling list.
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 for 9 parameters, the description provides excellent parameter semantics by listing all parameters with brief explanations of what each controls. It clarifies that 'database_id' identifies the target, 'details' are connection details, 'auto_run_queries' enables auto run, etc. This significantly compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('an existing database connection in Metabase'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from its sibling 'update_metabase_card', 'update_metabase_collection', etc., which all follow the same 'update_metabase_X' pattern.
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_metabase_database' or other update tools. There's no mention of prerequisites (e.g., needing an existing database_id), error conditions, or typical use cases for updating database connections versus creating new ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metabase_userB
Update an existing user in Metabase.
Args: user_id (int): ID of the user to update. first_name (str, optional): Updated first name. last_name (str, optional): Updated last name. email (str, optional): Updated email address. password (str, optional): Updated password. login_attributes (dict, optional): Updated login metadata. group_ids (list, optional): Updated group IDs. is_superuser (bool, optional): Updated superuser flag.
Returns: Dict[str, Any]: Updated user metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| first_name | No | ||
| last_name | No | ||
| No | |||
| password | No | ||
| login_attributes | No | ||
| group_ids | No | ||
| is_superuser | 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 full burden for behavioral disclosure. While 'Update' implies mutation, it doesn't specify whether this requires admin privileges, if changes are reversible, what validation occurs (e.g., email format), or potential side effects (e.g., password changes triggering notifications). The description lacks these critical behavioral details.
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 opening sentence followed by organized 'Args' and 'Returns' sections. Every sentence adds value, though the parameter explanations could be slightly more detailed given the lack of schema descriptions.
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 mutation tool with 8 parameters, 0% schema coverage, no annotations, but with an output schema, the description is minimally adequate. It covers the basic purpose and parameters but lacks behavioral context, usage guidelines, and detailed parameter constraints that would make it fully 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?
With 0% schema description coverage, the description compensates well by listing all 8 parameters with brief explanations of what each represents. It clarifies that 'user_id' identifies the target user and provides context for fields like 'login_attributes' and 'group_ids'. However, it doesn't explain format expectations (e.g., password complexity) or constraints (e.g., unique email).
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 ('Update') and resource ('an existing user in Metabase'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this from sibling tools like 'create_metabase_user' or other update tools, which would require a 5.
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_metabase_user' or 'delete_metabase_user'. It also doesn't mention prerequisites (e.g., needing admin permissions) or constraints (e.g., what happens if email is already in use).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools are distinct by resource and action, but there is notable overlap between get_dashboard_cards, get_dashboard_items, and get_dashboard_by_id, which could confuse agents about which to use for retrieving dashboard content. Additionally, execute_sql_query and get_card_query_results serve different purposes but might be conflated for query execution.
All tool names follow a consistent snake_case pattern with a clear verb_noun structure (e.g., create_metabase_card, delete_metabase_user, update_metabase_dashboard). The prefix 'metabase' is uniformly applied, and verbs like get, create, update, delete are used predictably across resources.
With 30 tools, this server is overly heavy for typical MCP usage, likely causing cognitive overload and inefficiency. While Metabase is a complex platform, the tool set could be more streamlined by consolidating overlapping getters or removing less critical operations to improve usability.
The tool set provides comprehensive CRUD coverage for all major Metabase entities (cards, dashboards, collections, databases, groups, users), plus auxiliary operations like copying dashboards and executing SQL queries. There are no obvious gaps; agents can perform full lifecycle management and query execution seamlessly.
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.
Connect your AI assistants to Keboola and expose your data, transformations, SQL queries, ...
Let AI agents query data and act across all your business apps via MCP.
Connects AI assistants to CloudQuell multi-cloud and AI cost, savings, anomaly, and budget data.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Metabase databases and dashboards, allowing users to list and execute queries, access data visualizations, and interact with database resources through natural language.409150
- 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 them to query databases, execute SQL, manage dashboards and cards, and access analytics data through natural language.47MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Metabase for database operations, SQL queries, dashboard management, and analytics automation.28MIT
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/CW-Codewalnut/metabase-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server