The Model Context Protocol tool catalog — discrete, reusable capabilities the agent can invoke.
MCP tools are the atomic building blocks of the Agentic BI system. Each tool performs a single, well-defined action and returns structured output. The orchestration layer composes these tools to fulfill user requests.
| Tool | Source | Action | Returns |
|---|---|---|---|
list-semantic-models | PBI | Enumerate datasets in a workspace | Model ID, name, workspace |
get-measures | PBI | Retrieve measures from a model | Measure name, expression, description |
generate-dax | PBI | Generate a DAX EVALUATE query | DAX query string |
generate-sql | SF | Generate a SQL SELECT query | SQL query string |
validate-query | Both | Check query against policy rules | Pass/fail + reasons |
execute-preview | Both | Run query with row limit | Result rows (capped) |
save-export | Both | Export results to file/report | Export URI or report URL |
{
"servers": {
"agentic-bi": {
"type": "stdio",
"command": "node",
"args": ["./mcp-server/index.js"],
"env": {
"PBI_TENANT_ID": "${env:PBI_TENANT_ID}",
"PBI_CLIENT_ID": "${env:PBI_CLIENT_ID}",
"SNOWFLAKE_ACCOUNT": "${env:SNOWFLAKE_ACCOUNT}"
}
}
}
}
list-semantic-modelsEnumerate all Power BI semantic models available to the authenticated user.
{
"workspaceId": "optional — filter to workspace"
}
[
{
"id": "abc-123",
"name": "ROME_PROD_LSM",
"workspace": "Analytics Prod"
}
]
get-measuresRetrieve all measures from a specific semantic model, including DAX expressions and descriptions.
[
{
"name": "PMPM",
"expression": "DIVIDE([Total Claims], [Member Months])",
"description": "Per Member Per Month cost",
"table": "Fact Claims"
}
]
generate-daxGenerate a DAX EVALUATE query based on a natural-language description and model context.
// Input: { "question": "Top 10 clients by total claims", "modelId": "abc-123", "metadata": { ... } } // Output: { "dax": "EVALUATE TOPN(10, SUMMARIZECOLUMNS('Dim Client'[Client Name], \"Total Claims\", [Total Claims Amount]), [Total Claims Amount], DESC)", "confidence": 0.92 }
generate-sqlGenerate a Snowflake SQL query based on a natural-language description and schema context.
// Input: { "question": "Claims denied in Q3 2025 by denial reason", "schema": { ... } } // Output: { "sql": "SELECT denial_reason, COUNT(*) as denied_count FROM claims WHERE status = 'DENIED' AND claim_date BETWEEN '2025-07-01' AND '2025-09-30' GROUP BY denial_reason ORDER BY denied_count DESC", "confidence": 0.88 }
execute-previewExecute a validated query and return capped results. Always enforces row limits.
save-exportExport query results or create an embedded report link.
Full query results exported to a local CSV file. Returns the file path.
Generate a Power BI embedded report URL with pre-applied filters matching the query context.
Add new tools without modifying the orchestration service:
// 1. Define the tool schema { "name": "get-anomalies", "description": "Detect statistical anomalies in a dataset", "inputSchema": { ... }, "outputSchema": { ... } } // 2. Implement the handler // 3. Register in the MCP server // 4. The orchestration layer auto-discovers it