Полнофункциональный Model Context Protocol (MCP) сервер для интеграции с Microsoft Power BI через Azure AD API.
get_workspaces- Получение списка всех доступных workspaceget_datasets- Получение списка datasets (с возможностью фильтрации по workspace)get_reports- Получение списка отчетов (с возможностью фильтрации по workspace)get_dataset_tables- Получение структуры таблиц datasetquery_dataset- Выполнение DAX запросов к datasetrefresh_dataset- Запуск обновления datasetget_refresh_history- Получение истории обновлений dataset
create_workspace- Создание новых workspacedelete_workspace- Удаление workspaceadd_workspace_user- Добавление пользователей с правами доступа
create_dataset- Создание datasets с таблицами и схемойdelete_dataset- Удаление datasetsupdate_dataset- Обновление конфигурации datasets
create_table- Создание таблиц в datasetsdelete_table- Удаление таблицupdate_table- Модификация структуры таблиц
add_column- Добавление колонок с типами данныхdelete_column- Удаление колонокupdate_column- Изменение свойств колонок
create_measure- Создание вычисляемых мер (DAX)delete_measure- Удаление мерupdate_measure- Обновление DAX выражений
create_report- Создание новых отчетовdelete_report- Удаление отчетовclone_report- Клонирование отчетов
add_table_rows- Добавление данных в таблицыclear_table_rows- Очистка данных таблиц
get_gateways- Получение списка gatewayget_gateway_datasources- Получение источников данных gateway
- ✅ Полное управление PowerBI: от создания workspace до добавления визуализаций
- ✅ Аутентификация через Azure AD (Service Principal)
- ✅ Автоматическое обновление токенов
- ✅ Comprehensive error handling и логирование
- ✅ CRUD операции для всех основных сущностей
- ✅ DAX query execution и вычисляемые меры
- ✅ Импорт данных и управление таблицами
- ✅ Gateway integration для внешних источников данных
- ✅ Workspace и permissions management
- Node.js 18+
- TypeScript
- Зарегистрированное приложение в Azure AD
- Permissions для Power BI API
git clone <repository-url>
cd powerbi_mcp_server
npm install-
Перейдите в Azure Portal → App registrations
-
Создайте новое приложение или используйте существующее
-
В разделе "API permissions" добавьте:
- Power BI Service permissions:
Dataset.Read.AllDataset.ReadWrite.AllReport.Read.AllWorkspace.Read.All
- Microsoft Graph (optional):
User.Read
- Power BI Service permissions:
-
В разделе "Certificates & secrets" создайте новый client secret
-
Скопируйте Application (client) ID, Directory (tenant) ID, и client secret
Скопируйте .env.example в .env и заполните:
cp .env.example .envОтредактируйте .env:
# Azure AD Configuration
AZURE_CLIENT_ID=your_application_client_id
AZURE_CLIENT_SECRET=your_client_secret
AZURE_TENANT_ID=your_tenant_id
# PowerBI API Configuration
POWERBI_API_URL=https://api.powerbi.com/v1.0/myorg
# Logging
LOG_LEVEL=infonpm run buildnpm start
# или для development:
npm run devДобавьте в файл конфигурации Claude Desktop:
{
"mcpServers": {
"powerbi": {
"command": "node",
"args": ["/path/to/powerbi_mcp_server/build/index.js"],
"env": {
"AZURE_CLIENT_ID": "your_client_id",
"AZURE_CLIENT_SECRET": "your_client_secret",
"AZURE_TENANT_ID": "your_tenant_id"
}
}
}
}После подключения доступны следующие tools:
get_workspaces()
get_datasets(workspace_id?: string)
query_dataset(
dataset_id: "your-dataset-id",
dax_query: "EVALUATE VALUES('Table'[Column])",
workspace_id?: "workspace-id"
)
create_dataset(
name: "Sales Dataset",
tables: [{
name: "Sales",
columns: [
{ name: "Date", dataType: "Datetime" },
{ name: "Amount", dataType: "Double" },
{ name: "Product", dataType: "String" }
],
measures: [{
name: "Total Sales",
expression: "SUM(Sales[Amount])",
formatString: "Currency"
}]
}],
workspace_id?: "workspace-id"
)
add_table_rows(
dataset_id: "dataset-id",
table_name: "Sales",
rows: [
["2024-01-01", 1000, "Product A"],
["2024-01-02", 1500, "Product B"]
],
workspace_id?: "workspace-id"
)
// Tool call: get_workspaces
// Response:
{
"success": true,
"data": [
{
"id": "workspace-guid",
"name": "My Workspace",
"isReadOnly": false,
"isOnDedicatedCapacity": true
}
],
"count": 1
}// Tool call: query_dataset
{
"dataset_id": "dataset-guid",
"dax_query": "EVALUATE TOPN(10, 'Sales', 'Sales'[Amount], DESC)",
"workspace_id": "workspace-guid"
}
// Response:
{
"success": true,
"data": {
"tables": [
{
"rows": [
["Product A", 1000],
["Product B", 800]
]
}
]
}
}src/
├── auth.ts # Azure AD authentication
├── powerbi-client.ts # PowerBI REST API client
├── server.ts # MCP server implementation
├── types.ts # TypeScript interfaces
├── logger.ts # Logging configuration
└── index.ts # Entry point
npm run build # Сборка TypeScript
npm run dev # Development режим
npm start # Production запуск- ✅ Secure token storage и автоматическое обновление
- ✅ Никогда не логируются credentials или токены
- ✅ Валидация всех входящих параметров
- ✅ HTTPS для всех API вызовов
- ✅ Error handling для всех сценариев
Сервер использует Winston для логирования. Уровень логирования настраивается через переменную LOG_LEVEL:
error- только ошибкиwarn- предупреждения и ошибкиinfo- информационные сообщения (по умолчанию)debug- подробная отладочная информация
Решение: Проверьте правильность Azure AD credentials и permissions
Решение: Убедитесь что service principal имеет доступ к workspace/dataset
Решение: Проверьте синтаксис DAX запроса и права доступа к dataset
Решение: Проверьте что сервер правильно запущен и доступен через stdio
- Model Context Protocol Specification
- Power BI REST API Documentation
- Azure AD Authentication Guide
- DAX Reference
ISC License
Приветствуются pull requests и issue reports. Перед внесением изменений:
- Убедитесь что все тесты проходят
- Следуйте code style проекта
- Обновите документацию при необходимости
Создано для Model Context Protocol ecosystem 🚀