powerbi-mcp 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.gitignore +3 -1
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/CLAUDE.md +6 -4
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/DEVELOPER_GUIDE.md +41 -28
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/PKG-INFO +3 -1
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/README.md +2 -0
- powerbi_mcp-0.1.2/powerbi_mcp/__init__.py +25 -0
- powerbi_mcp-0.1.2/powerbi_mcp/__main__.py +12 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/server.py +0 -12
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/pyproject.toml +4 -3
- powerbi_mcp-0.1.2/server.json +44 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/uv.lock +1 -1
- powerbi_mcp-0.1.0/src/__init__.py +0 -13
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/settings.json +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/claude-md-improver/SKILL.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/claude-md-improver/references/quality-criteria.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/claude-md-improver/references/templates.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/claude-md-improver/references/update-guidelines.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/LICENSE.txt +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/SKILL.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/evaluation.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/mcp_best_practices.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/node_mcp_server.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/python_mcp_server.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/scripts/connections.py +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/scripts/evaluation.py +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/scripts/example_evaluation.xml +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/scripts/requirements.txt +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/powerbi-expert/SKILL.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/powerbi-mcp-server-tester/SKILL.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/LICENSE.txt +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/SKILL.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/references/output-patterns.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/references/workflows.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/scripts/init_skill.py +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/scripts/package_skill.py +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/scripts/quick_validate.py +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/uv-package-manager/SKILL.md +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.env.example +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.github/workflows/publish-to-pypi.yml +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.mcp.json +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.python-version +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/LICENSE +0 -0
- {powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/opencode.json +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/auth.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/client.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/constants.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/exceptions.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/formatters.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/models.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/tools/__init__.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/tools/datasets.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/tools/queries.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/tools/workspaces.py +0 -0
- {powerbi_mcp-0.1.0/src → powerbi_mcp-0.1.2/powerbi_mcp}/validation.py +0 -0
|
@@ -13,8 +13,10 @@ Keep both `README.md` and `DEVELOPER_GUIDE.md` updated with any user-facing or a
|
|
|
13
13
|
Modular MCP server organized by separation of concerns (~2120 total LOC across 13 files):
|
|
14
14
|
|
|
15
15
|
```
|
|
16
|
-
|
|
17
|
-
├──
|
|
16
|
+
powerbi_mcp/
|
|
17
|
+
├── __init__.py # Main entry point (contains main())
|
|
18
|
+
├── __main__.py # Module execution support
|
|
19
|
+
├── server.py # FastMCP initialization
|
|
18
20
|
├── auth.py # OAuth2 authentication, token management
|
|
19
21
|
├── client.py # PowerBI REST API client
|
|
20
22
|
├── constants.py # Configuration values (URLs, timeouts, limits)
|
|
@@ -35,7 +37,7 @@ src/
|
|
|
35
37
|
```bash
|
|
36
38
|
# Package manager: uv (with .venv virtual environment)
|
|
37
39
|
uv sync # Install dependencies
|
|
38
|
-
uv run run-server # Run server (calls
|
|
40
|
+
uv run run-server # Run server (calls powerbi_mcp:main)
|
|
39
41
|
|
|
40
42
|
# Development testing with MCP Inspector
|
|
41
43
|
npx @modelcontextprotocol/inspector uv --directory . run run-server
|
|
@@ -59,7 +61,7 @@ npx @modelcontextprotocol/inspector uv --directory . run run-server
|
|
|
59
61
|
|
|
60
62
|
8. **PowerBI Expertise**: Use the `powerbi-expert` skill for DAX, M language, and data modeling questions.
|
|
61
63
|
|
|
62
|
-
9. **Version Bumping**: Check if version in `pyproject.toml` needs updating (currently 0.
|
|
64
|
+
9. **Version Bumping**: Check if version in `pyproject.toml` needs updating (currently 0.1.1).
|
|
63
65
|
|
|
64
66
|
10. **Commit Message**: Do not add "Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com" to commit message.
|
|
65
67
|
|
|
@@ -98,14 +98,17 @@ When a user runs the server, the following chain of calls happens:
|
|
|
98
98
|
2. **pyproject.toml** defines the `run-server` script:
|
|
99
99
|
```toml
|
|
100
100
|
[project.scripts]
|
|
101
|
-
run-server = "
|
|
101
|
+
run-server = "powerbi_mcp:main"
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
3. **
|
|
104
|
+
3. **powerbi_mcp/__init__.py** contains the `main()` function:
|
|
105
105
|
```python
|
|
106
106
|
def main():
|
|
107
107
|
"""Main entry point for the PowerBI MCP server"""
|
|
108
108
|
import os
|
|
109
|
+
import logging
|
|
110
|
+
|
|
111
|
+
logger = logging.getLogger(__name__)
|
|
109
112
|
transport = os.getenv("MCP_TRANSPORT", "stdio")
|
|
110
113
|
logger.info(f"Starting PowerBI MCP Server via transport: {transport}")
|
|
111
114
|
mcp.run(transport=transport)
|
|
@@ -117,7 +120,7 @@ When a user runs the server, the following chain of calls happens:
|
|
|
117
120
|
|
|
118
121
|
### How .env Files Are Loaded
|
|
119
122
|
|
|
120
|
-
The server loads environment variables from a `.env` file using this logic in `
|
|
123
|
+
The server loads environment variables from a `.env` file using this logic in `powerbi_mcp/auth.py`:
|
|
121
124
|
|
|
122
125
|
```python
|
|
123
126
|
from dotenv import load_dotenv
|
|
@@ -196,14 +199,14 @@ Test the server with actual MCP clients:
|
|
|
196
199
|
### Changing Configuration Values
|
|
197
200
|
|
|
198
201
|
**API Endpoints:**
|
|
199
|
-
Edit `
|
|
202
|
+
Edit `powerbi_mcp/constants.py`:
|
|
200
203
|
```python
|
|
201
204
|
API_BASE_URL = "https://api.powerbi.com/v1.0/myorg"
|
|
202
205
|
AUTH_URL_TEMPLATE = "https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
|
|
203
206
|
```
|
|
204
207
|
|
|
205
208
|
**Timeouts:**
|
|
206
|
-
Edit `
|
|
209
|
+
Edit `powerbi_mcp/constants.py`:
|
|
207
210
|
```python
|
|
208
211
|
AUTH_TIMEOUT = 30.0 # Authentication request timeout
|
|
209
212
|
API_TIMEOUT = 60.0 # API request timeout
|
|
@@ -211,7 +214,7 @@ TOKEN_REFRESH_BUFFER = 60 # Refresh token N seconds before expiry
|
|
|
211
214
|
```
|
|
212
215
|
|
|
213
216
|
**Response Limits:**
|
|
214
|
-
Edit `
|
|
217
|
+
Edit `powerbi_mcp/constants.py`:
|
|
215
218
|
```python
|
|
216
219
|
CHARACTER_LIMIT = 25000 # Max characters in response
|
|
217
220
|
MAX_ROWS_DISPLAY = 100 # Max rows shown in query results
|
|
@@ -223,7 +226,7 @@ MIN_WORKSPACES_TOP = 1 # Min workspaces per request
|
|
|
223
226
|
|
|
224
227
|
### Improving Error Messages
|
|
225
228
|
|
|
226
|
-
All HTTP error handling is in **one place**: `
|
|
229
|
+
All HTTP error handling is in **one place**: `powerbi_mcp/exceptions.py`
|
|
227
230
|
|
|
228
231
|
**Example: Improve 404 error message**
|
|
229
232
|
```python
|
|
@@ -252,20 +255,20 @@ elif status_code == 404:
|
|
|
252
255
|
### Adding New Validation Rules
|
|
253
256
|
|
|
254
257
|
**For DAX queries:**
|
|
255
|
-
Edit `
|
|
258
|
+
Edit `powerbi_mcp/validation.py`:
|
|
256
259
|
```python
|
|
257
260
|
def validate_dax_query(query: str) -> None:
|
|
258
261
|
"""Validate DAX query"""
|
|
259
262
|
if not query.strip().upper().startswith("EVALUATE"):
|
|
260
263
|
raise ValueError("Query must start with EVALUATE")
|
|
261
|
-
|
|
264
|
+
|
|
262
265
|
# Add new validation here:
|
|
263
266
|
if len(query) > 10000:
|
|
264
267
|
raise ValueError("Query too long (max 10000 characters)")
|
|
265
268
|
```
|
|
266
269
|
|
|
267
270
|
**For other validations:**
|
|
268
|
-
Add new functions to `
|
|
271
|
+
Add new functions to `powerbi_mcp/validation.py`:
|
|
269
272
|
```python
|
|
270
273
|
def validate_workspace_id(workspace_id: str) -> None:
|
|
271
274
|
"""Validate workspace ID format"""
|
|
@@ -286,7 +289,7 @@ validate_workspace_id(workspace_id)
|
|
|
286
289
|
|
|
287
290
|
**Example: Add "Reports" formatter**
|
|
288
291
|
|
|
289
|
-
1. Create detail formatter in `
|
|
292
|
+
1. Create detail formatter in `powerbi_mcp/formatters.py`:
|
|
290
293
|
```python
|
|
291
294
|
def _format_report_details(report: dict[str, Any]) -> list[str]:
|
|
292
295
|
"""Format detailed fields for a report"""
|
|
@@ -318,7 +321,7 @@ That's it! The generic `_format_items_markdown()` handles:
|
|
|
318
321
|
|
|
319
322
|
### Adding Custom Exception Types
|
|
320
323
|
|
|
321
|
-
Edit `
|
|
324
|
+
Edit `powerbi_mcp/exceptions.py`:
|
|
322
325
|
|
|
323
326
|
```python
|
|
324
327
|
class RateLimitError(APIError):
|
|
@@ -345,14 +348,17 @@ elif status_code == 429:
|
|
|
345
348
|
|
|
346
349
|
| Module | Responsibility | What to Put Here |
|
|
347
350
|
|--------|---------------|------------------|
|
|
348
|
-
| `
|
|
349
|
-
| `
|
|
350
|
-
| `
|
|
351
|
-
| `
|
|
352
|
-
| `
|
|
353
|
-
| `
|
|
354
|
-
| `
|
|
355
|
-
| `
|
|
351
|
+
| `powerbi_mcp/__init__.py` | Entry point | Main function for server startup |
|
|
352
|
+
| `powerbi_mcp/__main__.py` | Module execution | Enables `python -m powerbi_mcp` |
|
|
353
|
+
| `powerbi_mcp/server.py` | FastMCP initialization | Server setup and tool registration |
|
|
354
|
+
| `powerbi_mcp/constants.py` | Configuration values | API URLs, timeouts, limits, any hardcoded value |
|
|
355
|
+
| `powerbi_mcp/validation.py` | Input validation | Validation functions that are used in multiple places |
|
|
356
|
+
| `powerbi_mcp/exceptions.py` | Error handling | Custom exceptions, HTTP error mapping |
|
|
357
|
+
| `powerbi_mcp/client.py` | API client | PowerBI REST API interactions only |
|
|
358
|
+
| `powerbi_mcp/auth.py` | Authentication | OAuth2 flow, token management |
|
|
359
|
+
| `powerbi_mcp/formatters.py` | Response formatting | Markdown/JSON formatters |
|
|
360
|
+
| `powerbi_mcp/models.py` | Data models | Pydantic models for request/response |
|
|
361
|
+
| `powerbi_mcp/tools/*.py` | MCP tools | Tool definitions, tool-specific logic |
|
|
356
362
|
|
|
357
363
|
---
|
|
358
364
|
|
|
@@ -373,6 +379,13 @@ from .validation import validate_dax_query
|
|
|
373
379
|
from .exceptions import handle_http_error, PowerBIError, APIError
|
|
374
380
|
```
|
|
375
381
|
|
|
382
|
+
**For external imports or testing, use absolute imports:**
|
|
383
|
+
```python
|
|
384
|
+
# For external imports or testing, use absolute imports:
|
|
385
|
+
from powerbi_mcp.constants import API_BASE_URL
|
|
386
|
+
from powerbi_mcp.validation import validate_dax_query
|
|
387
|
+
```
|
|
388
|
+
|
|
376
389
|
**Avoid circular imports:**
|
|
377
390
|
- ✅ `constants.py` has no imports from other modules
|
|
378
391
|
- ✅ `validation.py` has no imports from other modules
|
|
@@ -386,13 +399,13 @@ from .exceptions import handle_http_error, PowerBIError, APIError
|
|
|
386
399
|
|
|
387
400
|
**Test constants:**
|
|
388
401
|
```python
|
|
389
|
-
from
|
|
402
|
+
from powerbi_mcp.constants import API_TIMEOUT
|
|
390
403
|
assert API_TIMEOUT == 60.0
|
|
391
404
|
```
|
|
392
405
|
|
|
393
406
|
**Test validation:**
|
|
394
407
|
```python
|
|
395
|
-
from
|
|
408
|
+
from powerbi_mcp.validation import validate_dax_query
|
|
396
409
|
import pytest
|
|
397
410
|
|
|
398
411
|
# Valid query
|
|
@@ -405,7 +418,7 @@ with pytest.raises(ValueError):
|
|
|
405
418
|
|
|
406
419
|
**Test error handling:**
|
|
407
420
|
```python
|
|
408
|
-
from
|
|
421
|
+
from powerbi_mcp.exceptions import handle_http_error
|
|
409
422
|
import httpx
|
|
410
423
|
|
|
411
424
|
# Mock HTTP 404 error
|
|
@@ -417,8 +430,8 @@ assert "404" in str(exception)
|
|
|
417
430
|
|
|
418
431
|
**Test formatters:**
|
|
419
432
|
```python
|
|
420
|
-
from
|
|
421
|
-
from
|
|
433
|
+
from powerbi_mcp.formatters import format_workspaces_markdown
|
|
434
|
+
from powerbi_mcp.models import DetailLevel
|
|
422
435
|
|
|
423
436
|
workspaces = [{"id": "123", "name": "Test WS"}]
|
|
424
437
|
output = format_workspaces_markdown(workspaces, DetailLevel.CONCISE)
|
|
@@ -686,9 +699,9 @@ test: add integration tests for datasets
|
|
|
686
699
|
|
|
687
700
|
3. **Make changes**
|
|
688
701
|
- Follow the module responsibilities (see above)
|
|
689
|
-
- Add constants to `constants.py`
|
|
690
|
-
- Add validation to `validation.py`
|
|
691
|
-
- Update error handling in `exceptions.py`
|
|
702
|
+
- Add constants to `powerbi_mcp/constants.py`
|
|
703
|
+
- Add validation to `powerbi_mcp/validation.py`
|
|
704
|
+
- Update error handling in `powerbi_mcp/exceptions.py`
|
|
692
705
|
- Implement features in appropriate modules
|
|
693
706
|
|
|
694
707
|
4. **Test changes**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: powerbi-mcp
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Model Context Protocol server for PowerBI REST API integration
|
|
5
5
|
Project-URL: Homepage, https://github.com/gurvinder-dhillon/powerbi-mcp
|
|
6
6
|
Project-URL: Documentation, https://github.com/gurvinder-dhillon/powerbi-mcp#readme
|
|
@@ -31,6 +31,8 @@ Description-Content-Type: text/markdown
|
|
|
31
31
|
[](https://pypi.org/project/powerbi-mcp/)
|
|
32
32
|
[](https://opensource.org/licenses/MIT)
|
|
33
33
|
|
|
34
|
+
<!-- mcp-name: io.github.gurvinder-dhillon/powerbi-mcp -->
|
|
35
|
+
|
|
34
36
|
A Model Context Protocol (MCP) server that provides tools for interacting with PowerBI REST APIs. This server enables AI assistants like Claude to query PowerBI workspaces, datasets, and execute DAX queries.
|
|
35
37
|
|
|
36
38
|
> [!WARNING]
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
[](https://pypi.org/project/powerbi-mcp/)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
+
<!-- mcp-name: io.github.gurvinder-dhillon/powerbi-mcp -->
|
|
8
|
+
|
|
7
9
|
A Model Context Protocol (MCP) server that provides tools for interacting with PowerBI REST APIs. This server enables AI assistants like Claude to query PowerBI workspaces, datasets, and execute DAX queries.
|
|
8
10
|
|
|
9
11
|
> [!WARNING]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PowerBI MCP Server
|
|
3
|
+
|
|
4
|
+
A Model Context Protocol server for interacting with PowerBI REST API.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
__version__ = "0.1.2"
|
|
8
|
+
__author__ = "Gurvinder Dhillon"
|
|
9
|
+
__description__ = "MCP server for PowerBI REST API interactions & run DAX queries."
|
|
10
|
+
|
|
11
|
+
from .server import mcp
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
"""Main entry point for the PowerBI MCP server"""
|
|
16
|
+
import os
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
transport = os.getenv("MCP_TRANSPORT", "stdio")
|
|
21
|
+
logger.info(f"Starting PowerBI MCP Server via transport: {transport}")
|
|
22
|
+
mcp.run(transport=transport)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
__all__ = ["mcp", "main"]
|
|
@@ -76,15 +76,3 @@ register_workspace_tools(mcp)
|
|
|
76
76
|
register_dataset_tools(mcp)
|
|
77
77
|
register_query_tools(mcp)
|
|
78
78
|
logger.info("All tools registered")
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def main():
|
|
82
|
-
"""Main entry point for the PowerBI MCP server"""
|
|
83
|
-
import os
|
|
84
|
-
transport = os.getenv("MCP_TRANSPORT", "stdio")
|
|
85
|
-
logger.info(f"Starting PowerBI MCP Server via transport: {transport}")
|
|
86
|
-
mcp.run(transport=transport)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if __name__ == "__main__":
|
|
90
|
-
main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "powerbi-mcp"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.2"
|
|
4
4
|
description = "Model Context Protocol server for PowerBI REST API integration"
|
|
5
5
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -26,14 +26,15 @@ dependencies = [
|
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
[project.scripts]
|
|
29
|
-
|
|
29
|
+
powerbi-mcp = "powerbi_mcp:main"
|
|
30
|
+
run-server = "powerbi_mcp:main"
|
|
30
31
|
|
|
31
32
|
[build-system]
|
|
32
33
|
requires = ["hatchling"]
|
|
33
34
|
build-backend = "hatchling.build"
|
|
34
35
|
|
|
35
36
|
[tool.hatch.build.targets.wheel]
|
|
36
|
-
packages = ["
|
|
37
|
+
packages = ["powerbi_mcp"]
|
|
37
38
|
|
|
38
39
|
[project.urls]
|
|
39
40
|
Homepage = "https://github.com/gurvinder-dhillon/powerbi-mcp"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.gurvinder-dhillon/powerbi-mcp",
|
|
4
|
+
"title": "PowerBI MCP Server",
|
|
5
|
+
"description": "MCP server for PowerBI REST API integration. Query workspaces, datasets, and execute DAX queries through natural language.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"url": "https://github.com/gurvinder-dhillon/powerbi-mcp",
|
|
8
|
+
"source": "github"
|
|
9
|
+
},
|
|
10
|
+
"version": "0.1.2",
|
|
11
|
+
"packages": [
|
|
12
|
+
{
|
|
13
|
+
"registryType": "pypi",
|
|
14
|
+
"identifier": "powerbi-mcp",
|
|
15
|
+
"version": "0.1.2",
|
|
16
|
+
"transport": {
|
|
17
|
+
"type": "stdio"
|
|
18
|
+
},
|
|
19
|
+
"environmentVariables": [
|
|
20
|
+
{
|
|
21
|
+
"name": "POWERBI_TENANT_ID",
|
|
22
|
+
"description": "Azure AD Tenant ID for PowerBI authentication",
|
|
23
|
+
"isRequired": true,
|
|
24
|
+
"format": "string",
|
|
25
|
+
"isSecret": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "POWERBI_CLIENT_ID",
|
|
29
|
+
"description": "Azure AD Application (Client) ID with PowerBI API access",
|
|
30
|
+
"isRequired": true,
|
|
31
|
+
"format": "string",
|
|
32
|
+
"isSecret": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "POWERBI_CLIENT_SECRET",
|
|
36
|
+
"description": "Azure AD Client Secret for service principal authentication",
|
|
37
|
+
"isRequired": true,
|
|
38
|
+
"format": "string",
|
|
39
|
+
"isSecret": true
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
PowerBI MCP Server
|
|
3
|
-
|
|
4
|
-
A Model Context Protocol server for interacting with PowerBI REST API.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
__version__ = "0.1.0"
|
|
8
|
-
__author__ = "PowerBI MCP Contributors"
|
|
9
|
-
__description__ = "MCP server for PowerBI REST API integration"
|
|
10
|
-
|
|
11
|
-
from .server import mcp
|
|
12
|
-
|
|
13
|
-
__all__ = ["mcp"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/claude-md-improver/references/templates.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/mcp_best_practices.md
RENAMED
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/node_mcp_server.md
RENAMED
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/reference/python_mcp_server.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/mcp-builder/scripts/example_evaluation.xml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/references/output-patterns.md
RENAMED
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/references/workflows.md
RENAMED
|
File without changes
|
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/scripts/package_skill.py
RENAMED
|
File without changes
|
{powerbi_mcp-0.1.0 → powerbi_mcp-0.1.2}/.claude/skills/skill-creator/scripts/quick_validate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|