{"_id":"@drinus76/powerbi-mcp","name":"@drinus76/powerbi-mcp","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@drinus76/powerbi-mcp","version":"1.0.0","description":"MCP server per interrogare modelli semantici Power BI via service principal (OAuth client credentials)","type":"module","main":"dist/index.js","bin":{"powerbi-mcp":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"keywords":["mcp","model-context-protocol","powerbi","power-bi","fabric","dax","service-principal","claude"],"author":{"name":"Adriano Novelli"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/drinus76/powerbi-mcp.git"},"bugs":{"url":"https://github.com/drinus76/powerbi-mcp/issues"},"homepage":"https://github.com/drinus76/powerbi-mcp#readme","engines":{"node":">=18.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.0"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.0.0"},"_id":"@drinus76/powerbi-mcp@1.0.0","gitHead":"98e629a134a3bb74ffadd0c2c5eb53870075b2b0","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-FOqi1rS4rw+DJw9wEEm4P4SaZbA2RW4QDUZf/DPMtoeLRuItpmSGS5+YLCeTebkBrmFzAQW0yZbBlNITyveq3g==","shasum":"5b56198fe307b7b1ce1f9f9d9c97a76b9f098a65","tarball":"https://registry.npmjs.org/@drinus76/powerbi-mcp/-/powerbi-mcp-1.0.0.tgz","fileCount":6,"unpackedSize":12510,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC/xu6TsdMJuXoTA0al+0TaPROrJPgy+BHFMPWUefOM4AiEA7pI4FXaFyt2Gunc+I62Zp9Do7TNE+5gcu85MJiHNV+k="}]},"_npmUser":{"name":"drinus76","email":"adriano.novelli@gruppogalli.it"},"directories":{},"maintainers":[{"name":"drinus76","email":"adriano.novelli@gruppogalli.it"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/powerbi-mcp_1.0.0_1780477114367_0.541593399783943"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-03T08:58:34.175Z","1.0.0":"2026-06-03T08:58:34.514Z","modified":"2026-06-03T08:58:34.738Z"},"maintainers":[{"name":"drinus76","email":"adriano.novelli@gruppogalli.it"}],"description":"MCP server per interrogare modelli semantici Power BI via service principal (OAuth client credentials)","homepage":"https://github.com/drinus76/powerbi-mcp#readme","keywords":["mcp","model-context-protocol","powerbi","power-bi","fabric","dax","service-principal","claude"],"repository":{"type":"git","url":"git+https://github.com/drinus76/powerbi-mcp.git"},"author":{"name":"Adriano Novelli"},"bugs":{"url":"https://github.com/drinus76/powerbi-mcp/issues"},"license":"MIT","readme":"# @drinus76/powerbi-mcp\r\n\r\nMCP server Node.js per interrogare modelli semantici **Power BI** tramite la\r\nExecute Queries REST API di Microsoft, usando autenticazione **headless via\r\nservice principal** (OAuth 2.0 client credentials).\r\n\r\nPensato per agenti AI in cloud o ambienti server, sullo stesso pattern dei\r\nconnettori MCP per database (es. `@connorbritain/mssql-mcp-server`).\r\n\r\n## Caratteristiche\r\n\r\n- Trasporto MCP **stdio** (standard)\r\n- Autenticazione **service principal** Microsoft Entra ID (client credentials)\r\n- **Nessun login interattivo**, nessun browser, nessun token statico da rinnovare a mano\r\n- Cache automatica del token con rinnovo (~5 minuti prima della scadenza)\r\n- Espone un solo tool: `execute_dax_query`\r\n\r\n## Installazione\r\n\r\nNessuna installazione manuale: si usa via `npx`. Configurazione MCP client:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"powerbi\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"@drinus76/powerbi-mcp@latest\"],\r\n      \"env\": {\r\n        \"AZURE_TENANT_ID\": \"...\",\r\n        \"AZURE_CLIENT_ID\": \"...\",\r\n        \"AZURE_CLIENT_SECRET\": \"...\",\r\n        \"POWERBI_WORKSPACE_ID\": \"...\",\r\n        \"POWERBI_DATASET_ID\": \"...\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## Variabili d'ambiente\r\n\r\n| Variabile | Descrizione |\r\n|-----------|-------------|\r\n| `AZURE_TENANT_ID` | Tenant ID di Microsoft Entra ID |\r\n| `AZURE_CLIENT_ID` | Application (client) ID del service principal |\r\n| `AZURE_CLIENT_SECRET` | Client secret (Valore, non ID) |\r\n| `POWERBI_WORKSPACE_ID` | ID del workspace Power BI |\r\n| `POWERBI_DATASET_ID` | ID del modello semantico di default |\r\n\r\n## Prerequisiti lato Power BI\r\n\r\n1. Registrare un'app in Microsoft Entra ID e generare un client secret.\r\n2. Nelle impostazioni tenant di Power BI abilitare:\r\n   - \"Modello semantico Esecuzione di query API REST\"\r\n   - \"Le entità servizio possono chiamare le API pubbliche di Fabric\"\r\n3. Aggiungere il service principal come **Membro** del workspace\r\n   (preferibilmente tramite un gruppo di sicurezza Entra ID).\r\n\r\n## Tool esposti\r\n\r\n### `execute_dax_query`\r\n\r\nEsegue una query DAX e restituisce il risultato in JSON.\r\n\r\n**Input:**\r\n\r\n- `query` (string, obbligatorio): la query DAX da eseguire.\r\n- `datasetId` (string, opzionale): ID di un dataset diverso da quello di default.\r\n\r\n**Esempi di query utili:**\r\n\r\n- Elenco tabelle: `EVALUATE INFO.VIEW.TABLES()`\r\n- Elenco colonne: `EVALUATE INFO.VIEW.COLUMNS()`\r\n- Elenco misure: `EVALUATE INFO.VIEW.MEASURES()`\r\n- Top 10 righe: `EVALUATE TOPN(10, 'NomeTabella')`\r\n\r\n## Limiti noti\r\n\r\n- La Execute Queries API Microsoft ha un tetto di **100.000 righe** per risposta.\r\n  Per query potenzialmente grandi conviene aggregare in DAX.\r\n- Le query molto lunghe possono superare il timeout di default dell'API (60 secondi).\r\n- Su modelli con compatibility level più basso, alcune funzioni `INFO.*` non sono\r\n  disponibili: usare le varianti `INFO.VIEW.*`.\r\n\r\n## Sviluppo locale\r\n\r\n```bash\r\ngit clone https://github.com/drinus76/powerbi-mcp.git\r\ncd powerbi-mcp\r\nnpm install\r\nnpm run build\r\nnpm start\r\n```\r\n\r\nPer i test, esportare le 5 variabili d'ambiente prima di `npm start`.\r\n\r\n## Licenza\r\n\r\nMIT — vedi `LICENSE`.","readmeFilename":"README.md","_rev":"1-c37f7e57ef94e7be68d5d51a77b53178"}