
peterjohnbeck/connecting_powerbi_mcp
Developer toolsA natural language interface for Power BI, powered by Claude and the Model Context Protocol. Ask questions about your Power BI data in plain English — Claude handles the rest.
Overview
A natural language interface for Power BI, powered by Claude and the Model Context Protocol. Ask questions about your Power BI data in plain English — Claude handles the rest. Available as both a browser-based chat UI (Streamlit) and a terminal REPL. This app connects Claude to Microsoft's Power BI MCP server. When you ask a question, Claude discovers the available Power BI tools, decides which ones to call, executes them, and returns an answer — often with an auto-rendered chart. The entire loop is agentic: Claude can chain multiple tool calls together to answer complex questions without you writing any DAX. - — no DAX required - — Claude iteratively calls tools until it has a complete answer - — bar, line, pie, and metric cards generated from query results - — Streamlit web UI and terminal CLI (REPL) - — MSAL device code flow with local token caching - — full multi-turn context within a session - Python 3.
README
Power BI MCP Assistant
A natural language interface for Power BI, powered by Claude and the Model Context Protocol. Ask questions about your Power BI data in plain English — Claude handles the rest.
Available as both a browser-based chat UI (Streamlit) and a terminal REPL.
How it works
This app connects Claude to Microsoft’s Power BI MCP server. When you ask a question, Claude discovers the available Power BI tools, decides which ones to call, executes them, and returns an answer — often with an auto-rendered chart. The entire loop is agentic: Claude can chain multiple tool calls together to answer complex questions without you writing any DAX.
Features
- Natural language queries — no DAX required
- Agentic loop — Claude iteratively calls tools until it has a complete answer
- Auto-rendered charts — bar, line, pie, and metric cards generated from query results
- Two interfaces — Streamlit web UI and terminal CLI (REPL)
- Microsoft authentication — MSAL device code flow with local token caching
- Conversation memory — full multi-turn context within a session
Prerequisites
- Python 3.10+
- A Claude API key
- A Microsoft account with access to a Power BI workspace
- Access to Microsoft’s Power BI MCP server (
https://api.fabric.microsoft.com/v1/mcp/powerbi)
Installation
git clone https://github.com/your-username/Connecting_PowerBI_MCP.git
cd Connecting_PowerBI_MCP
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# or
.venv\Scripts\activate # Windows
pip install -r requirements.txt
Configuration
cp .env.example .env
Edit .env and set your values:
CLAUDE_API_KEY=sk-ant-...
# Optional — leave blank to use device code flow (recommended)
AZURE_TENANT_ID=
AZURE_CLIENT_ID=
That’s all you need for most setups. The app defaults to device code authentication, which means no Azure app registration is required — you just sign in through your browser on first run.
If you need a custom Azure app registration (e.g. for a service account or specific tenant), see docs/azure-setup.md.
Usage
Streamlit UI
streamlit run streamlit_app.py
Open http://localhost:8501 in your browser. On first run, you’ll be prompted to authenticate with Microsoft via device code flow.
CLI
python main.py
Available commands in the REPL:
| Command | Description |
|---|---|
/help |
Show help |
/tools |
List available Power BI tools |
/clear |
Clear conversation history |
/history |
Show conversation length |
/exit |
Quit |
Project structure
├── streamlit_app.py # Streamlit entry point
├── main.py # CLI entry point
├── core/
│ └── orchestrator.py # Agentic loop
├── clients/
│ ├── claude_client.py # Anthropic API wrapper
│ ├── simple_mcp_client.py # Power BI MCP client
│ ├── http_transport.py # JSON-RPC over HTTP POST
│ └── tool_converter.py # MCP ↔ Claude format conversion
├── auth/
│ ├── manager.py # MSAL device code flow
│ └── token_cache.py # Encrypted local token cache
├── config/
│ └── settings.py # Pydantic-based configuration
├── streamlit_ui/
│ ├── session_manager.py # Streamlit session lifecycle
│ ├── async_runner.py # Thread-safe async bridge
│ ├── components.py # UI components
│ └── charts/ # Chart detection and rendering
├── cli/ # CLI interface
├── docs/ # Setup and troubleshooting guides
├── .env.example # Environment variable template
└── requirements.txt
Authentication
On first run, the app displays a device code and URL:
To sign in, visit https://microsoft.com/devicelogin and enter the code: XXXXX-XXXXX
After signing in through your browser, the token is cached locally at ~/.powerbi-mcp/token_cache.bin and auto-refreshes on subsequent runs.
Troubleshooting
See docs/troubleshooting.md for common issues.
License
MIT — see LICENSE.
Install
This server does not publish a one-line install command.
Open the repository installation guide New to MCP? Start with the mcpskill.org guide →