execute_card_query
Execute saved Metabase card queries to retrieve data results using specified parameters like date filters and IDs for analysis and reporting.
Instructions
▶️ [MODERATE RISK] Execute a saved card query and return results. Use this to get actual data from a card. May take time for complex queries. Risk: Moderate - executes queries that may be slow or resource-intensive. Does not modify data.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cardId | Yes | The ID of the card to execute | |
| parameters | No | Query parameters (e.g., date filters, IDs) |
Implementation Reference
- The main handler function that executes the card query by POSTing to Metabase API /api/card/{cardId}/query with query parameters and returns the JSON results.async executeCardQuery(cardId, parameters = {}) { Validators.validateCardId(cardId); this.logger.debug('Executing card query', { cardId, parameters }); const queryParams = new URLSearchParams(); Object.entries(parameters).forEach(([key, value]) => { queryParams.append(key, value); }); const results = await this.apiClient.makeRequest(`/api/card/${cardId}/query?${queryParams}`, { method: 'POST', }); return { content: [ { type: 'text', text: `Query Results for Card ${cardId}: ${JSON.stringify(results, null, 2)}`, }, ], }; }
- Tool definition including input schema requiring cardId (integer) and optional parameters object.{ name: 'execute_card_query', description: '▶️ [MODERATE RISK] Execute a saved card query and return results. Use this to get actual data from a card. May take time for complex queries. Risk: Moderate - executes queries that may be slow or resource-intensive. Does not modify data.', inputSchema: { type: 'object', properties: { cardId: { type: 'integer', description: 'The ID of the card to execute', minimum: 1, }, parameters: { type: 'object', description: 'Query parameters (e.g., date filters, IDs)', additionalProperties: true, }, }, required: ['cardId'], }, },
- src/server/MetabaseMCPServer.js:172-173 (registration)Registers the tool in the MCP server's executeTool switch statement, delegating to cardHandlers.executeCardQuery.case 'execute_card_query': return await this.cardHandlers.executeCardQuery(args.cardId, args.parameters);