mcp-powerbi-personal
Click on "Deploy 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., "@mcp-powerbi-personallist my Power BI workspaces"
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.
MCP Power BI Personal
MCP para que Claude pueda consultar tu Power BI Service (workspaces, datasets, reportes, consultas DAX) usando tu propia cuenta de OCASA. No usa una cuenta de servicio compartida: cada persona ve exactamente los workspaces a los que ya tiene acceso en Power BI, ni más ni menos.
Requisitos
Windows con Node.js 18 o superior instalado.
Claude Code instalado (comando
claudedisponible en la terminal).Tu cuenta de Power BI de OCASA (la misma que usás para entrar a app.powerbi.com).
Related MCP server: PowerBI Analyst MCP
Instalación (una sola vez)
Cloná el repo:
git clone https://github.com/juancaja2025/mcp-powerbi-personal.git cd mcp-powerbi-personalAbrí PowerShell en esta carpeta y corré:
.\install.ps1El script va a:
Instalar las dependencias.
Pedirte loguearte: te va a mostrar un código y una URL (
https://login.microsoft.com/device). Abrila en el navegador, pegá el código, y confirmá con tu cuenta de OCASA.Registrar el MCP en Claude Code automáticamente.
Reiniciá Claude Code (cerrá y abrí una sesión nueva).
Listo. A partir de ahí, en cualquier conversación con Claude podés pedirle que liste tus workspaces, exploré datasets, o corra consultas DAX contra tus tableros.
Qué puede hacer Claude con esto
list_workspaces— lista tus workspaces de Power BI.list_datasets— lista los datasets (modelos semánticos) de un workspace.list_reports— lista los reportes de un workspace.list_report_pages— lista las páginas de un reporte.execute_dax— ejecuta una consulta DAX contra un dataset (para traer datos puntuales).refresh_dataset— dispara un refresh de un dataset.
Seguridad
El login queda guardado en un archivo local
.token-cache.json, dentro de tu carpeta, en tu máquina. No lo compartas ni lo subas a ningún lado — es equivalente a tu sesión de Power BI.Este MCP no otorga ningún permiso nuevo: solo te deja consultar, desde Claude, lo mismo que ya podés ver logueándote en app.powerbi.com con tu cuenta.
El login usa el client ID público de "Microsoft Azure PowerShell", una app oficial de Microsoft — no requiere que un administrador de OCASA apruebe nada.
Problemas comunes
"No se encontró Node.js": instalalo desde https://nodejs.org y volvé a correr
install.ps1.El código de dispositivo expiró: volvé a correr
npm run logindentro de la carpeta del proyecto.No ves un workspace que esperabas: es el mismo criterio que en app.powerbi.com — si no lo ves ahí logueado con tu cuenta, tampoco lo va a ver Claude. Pedí acceso al dueño del workspace.
Available Tools
6 toolsexecute_daxEjecutar consulta DAXB
Ejecuta una consulta DAX contra un dataset y devuelve la tabla resultante.
| Name | Required | Description | Default |
|---|---|---|---|
| daxQuery | Yes | Consulta DAX, ej: EVALUATE INFO.VIEW.TABLES() | |
| datasetId | Yes | ID del dataset | |
| workspaceId | Yes | ID del workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only states that it returns a result table, but does not disclose whether the operation is read-only, what happens on error, or any authentication requirements. This is a significant gap for a tool that could be long-running or have 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?
A single, front-loaded sentence with no wasted words. The verb and resource are stated immediately, and the return type is mentioned. It is as concise as possible while conveying the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 required parameters, no output schema, and no annotations, the description is too thin. It does not explain the expected query format, potential errors, authentication needs, or the structure of the returned table. An agent might struggle to know what constitutes a valid invocation or what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter (workspaceId, datasetId, daxQuery). The description adds no additional information about parameter usage or relationships, so it meets the baseline but does not go beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'Ejecuta' (executes) and a clear resource 'consulta DAX contra un dataset' (DAX query against a dataset). It clearly distinguishes itself from sibling tools like list_reports, refresh_dataset, etc., which are about listing and refreshing rather than querying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for executing DAX queries but does not explicitly state when to use it versus alternatives, nor does it mention any exclusions or prerequisites. The siblings are clearly different in function, but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsListar datasetsC
Lista los datasets (modelos semanticos) de un workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes | ID del workspace |
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 only states the action without disclosing whether it is read-only, any permissions required, pagination behavior, or the return format. This is a significant gap for a list 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 a single, concise sentence with no wasted words. It is 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 has no output schema and no annotations, the description is too sparse. It fails to mention what the tool returns (e.g., a list of dataset IDs), whether it is read-only, or any usage context. For a list tool with one parameter, more context would be expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter workspaceId, and the description reiterates the workspace scope. The description adds no additional meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb 'lista' (lists) and a resource 'datasets (modelos semanticos)' of a workspace. It is clear what the tool does, but it does not explicitly differentiate from sibling tools like list_reports or list_report_pages, though the resource type is distinct enough.
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?
There is no guidance on when to use this tool versus alternatives. No mention of scenarios, prerequisites, or exclusions. The agent must infer usage from the name and siblings, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_report_pagesListar paginas de un reporteA
Lista las paginas (pestanas) de un reporte.
| Name | Required | Description | Default |
|---|---|---|---|
| reportId | Yes | ID del reporte | |
| workspaceId | Yes | ID del workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. 'Lista' implies a read-only enumeration and the parenthetical clarifies that pages are tabs, but side effects, permissions, and error behavior are not explicitly addressed. There is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The parenthetical '(pestanas)' adds useful terminology without unnecessary length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list operation, the description is adequate, but there is no output schema and no explicit mention of return format, prerequisites, or edge cases. It is minimally complete rather than fully detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; both reportId and workspaceId already have descriptions in the schema. The tool description adds no parameter-specific detail beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Lista' and names the exact resource: 'paginas (pestanas) de un reporte'. This clearly differentiates it from siblings like list_reports, list_workspaces, and list_datasets.
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 intended usage is implied by the phrase 'de un reporte': use this tool when you need the pages/tabs of a specific report. However, it does not explicitly mention alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsListar reportesB
Lista los reportes de un workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes | ID del workspace |
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 only states a listing action without indicating read-only nature, pagination, output format, or any side effects. For a simple list tool, this is minimal but lacks context on what the agent can expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler. It is appropriately concise for a simple list operation and front-loads the core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list tool without an output schema, the description is somewhat adequate but incomplete. It lacks information about the returned data structure, any implicit filtering, or how it differs from list_report_pages. Given the simplicity, a 3 is fair; it does not provide enough context for an agent to fully anticipate the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with a description for workspaceId. The tool description adds no extra meaning about the parameter beyond the schema, so the baseline of 3 applies; the description does not compensate with additional context.
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 'Lista' (list) and the resource 'reportes' (reports) scoped to a workspace. It distinguishes itself from siblings like list_report_pages and list_datasets by the explicit resource type, leaving no ambiguity about what is being listed.
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 does not mention when to prefer list_reports over list_report_pages or list_datasets, nor does it state any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesListar workspacesA
Lista los workspaces de Power BI accesibles con tu cuenta personal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It conveys a read-only listing operation and clarifies the scope to personally accessible workspaces, but does not mention output format, ordering, pagination, or any side effects. It is adequate but not deeply transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the action, the resource, and the scope 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?
For a zero-parameter, read-only listing tool, this description is nearly complete. It identifies the target resource and account-based access scope, though it does not describe the return shape or pagination behavior; those are minor for such a simple 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 tool has zero parameters, so the schema fully covers the input surface. There is nothing for the description to add about parameter meaning, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lista') and resource ('workspaces de Power BI'), and further scopes it to workspaces accessible with the user's personal account. This clearly distinguishes it from sibling tools like list_reports and list_datasets.
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 use when the agent needs to retrieve the user's accessible Power BI workspaces. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, so usage guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_datasetRefrescar datasetC
Dispara un refresh asincronico de un dataset.
| Name | Required | Description | Default |
|---|---|---|---|
| datasetId | Yes | ID del dataset | |
| workspaceId | Yes | ID del workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'asincronico' (async), a useful trait, but says nothing about permissions, reversibility, failure modes, or what happens after the trigger. This is minimal for an action/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 a single sentence with no filler. It states the action and the target concisely. While minimal, it earns its place without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an action tool with no annotations and no output schema, the description is incomplete. It does not explain the asynchronous nature's implications (e.g., no immediate result, need to poll status), nor does it cover any side effects or prerequisites. An agent would lack critical context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (datasetId and workspaceId) described in the input schema. The description adds no further parameter semantics, which meets the baseline expectation when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Dispara' = triggers) and a clear resource ('refresh asincronico de un dataset' = async refresh of a dataset). It is distinguishable from sibling tools (list/execute operations), but it does not explicitly differentiate itself from them.
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. It does not mention prerequisites, exclusions, or conditions that would select this tool over siblings like execute_dax or list_datasets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
execute_dax - First observed
list_datasets - First observed
list_report_pages - First observed
list_reports - First observed
list_workspaces - First observed
refresh_dataset
TDQS
Scored across 6 tools
Cada herramienta apunta a una acción y recurso claramente diferenciados: listar workspaces, reportes, páginas y datasets, ejecutar DAX y refrescar datasets. No hay solapamiento sustancial entre las herramientas.
Todas las herramientas usan verbos en minúscula y snake_case, con list_* para operaciones de listado y acciones imperativas para execute_dax y refresh_dataset. El patrón es uniforme y predecible.
Con 6 herramientas, el servidor está bien acotado para su propósito: explorar workspaces, reportes y datasets, consultar con DAX y refrescar datasets. No hay herramientas redundantes ni falta de alcance evidente.
El conjunto cubre las operaciones principales de consulta y administración básica de un workspace personal de Power BI: listar, explorar, consultar y refrescar. Faltan detalles menores como verificar el estado de un refresh o listar los campos de un dataset, pero no bloquean los flujos centrales.
Maintenance
Related MCP Connectors
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
- BasedashOAuthcom.basedash
Governed BI MCP. Ask questions of live company data and list workspace sources via OAuth.
GA4, Google Ads and Search Console in Claude. Read-only OAuth, multi-account for agencies.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to programmatically manage Power BI workspaces, reports, and dashboards while executing DAX queries and triggering dataset refreshes. It supports secure OAuth2 authentication for operations like report exporting, workspace management, and real-time push dataset updates.30 npm4MIT
- AlicenseAqualityDmaintenanceConnect Claude to your Power BI semantic models. Browse workspaces, tables, and measures, run DAX queries, and get results — with large datasets automatically saved to local CSV files to protect the LLM context window. Includes a query history log for cross-session reuse and auditability.1314 PyPI14MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Microsoft Power BI and Fabric, enabling Claude to discover workspaces, semantic models, generate and execute DAX queries, and retrieve report metadata via device-code authentication.20 npm1MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to query PowerBI workspaces, datasets, and execute DAX queries through the PowerBI REST API.7MIT