Skip to main content
Glama
README.md
# daxops-mcp

> Build Power BI dashboards from your data, straight from Claude Code (or any MCP client).

`daxops-mcp` is a small, self-contained **MCP server** that lets a [DaxOps](https://daxops.com) account
holder drive their DaxOps cloud from an AI agent: upload your own data and generate Power BI `.pbix`
dashboards, describe what you want in plain English with the AI prompter, browse the built-in Solution
starters, and manage saved dashboards - all authenticated with your **DaxOps license key**.

---

## Install

Requirements: **Node 18+**.

You do not need to clone anything. The published package runs straight from npm.

**Run on demand with `npx` (recommended):**

```bash
npx -y daxops-mcp
```

**Or install it globally:**

```bash
npm i -g daxops-mcp
daxops-mcp
```

Either way the server reads your license key from the `DAXOPS_LICENSE_KEY` environment variable and
refuses to start without it (see below). You will normally never run it by hand - Claude Code launches it
for you from the config snippet.

### Where to get your license key

Copy it from your DaxOps account page: **<https://daxops.com/account>**. It is the same key the DaxOps
desktop app uses. Keep it secret.

---

## Add it to Claude Code

The simplest path - register the published package (Claude Code runs it via `npx`):

```bash
claude mcp add daxops --env DAXOPS_LICENSE_KEY=<your key> -- npx -y daxops-mcp
```

### Or paste this into your Claude Code / `.mcp.json` config

```json
{
  "mcpServers": {
    "daxops": {
      "command": "npx",
      "args": ["-y", "daxops-mcp"],
      "env": { "DAXOPS_LICENSE_KEY": "<your key>" }
    }
  }
}
```

### Local development / from a checkout

If you are working from a clone of this repo instead of the published package, build it once
(`npm install && npm run build`) and point the config at the built entry point:

```json
{
  "mcpServers": {
    "daxops": {
      "command": "node",
      "args": ["/absolute/path/to/daxops/mcp/dist/index.js"],
      "env": { "DAXOPS_LICENSE_KEY": "<your key>" }
    }
  }
}
```

---

## Configuration (environment)

| Variable | Required | Default | Meaning |
| --- | --- | --- | --- |
| `DAXOPS_LICENSE_KEY` | **yes** | - | Your DaxOps license key (from <https://daxops.com/account>). The server refuses to start without it. |
| `DAXOPS_BASE_URL` | no | `https://daxops.com` | The DaxOps site origin (override only for a staging instance). |

---

## Tools

| Tool | What it does |
| --- | --- |
| `daxops_list_solutions` | List the built-in Solution starters (id, title, industry, description, KPIs). |
| `daxops_list_themes` | List the brand colour themes you can pass to a build. |
| `daxops_upload_data` | Upload local `.csv/.xlsx/.xls` files; returns a `sourceId` plus a detected-model summary. |
| `daxops_introspect` | Show the detected model (tables, columns, relationships, measures, suggested pages) for a `sourceId` or `solution`. |
| `daxops_build` | Build a `.pbix` from a `sourceId` or `solution` (optional pages/branding), poll to done, and download it to disk. |
| `daxops_ai_build` | **Headline tool.** Describe the dashboard in plain English; the AI agent designs and builds it, then downloads the `.pbix`. Uses AI credits. |
| `daxops_download` | Download a finished build's `.pbix` by job id (e.g. one that was still running earlier). |
| `daxops_list_dashboards` | List your saved dashboard definitions. |
| `daxops_save_dashboard` | Save a reusable dashboard definition (name + solution/sourceId + pages/brand). |
| `daxops_open_dashboard` | Fetch one saved dashboard's full definition by id. |
| `daxops_delete_dashboard` | Delete a saved dashboard by id. |

Some tools (data upload, model introspection, saved dashboards) require the **+Validation** feature on
your DaxOps plan; without it the API returns a clear "this is a +Validation feature" message, surfaced as
the tool error.

### Example prompts

- *"Use `daxops_ai_build` to make a multi-page sales report from my uploaded CSVs - an exec overview with KPI cards, a sales trend, and breakdowns by brand and by retailer."*
- *"Upload `sales.csv` and `regions.xlsx`, then introspect the model and tell me what pages you'd suggest."*
- *"List the Solution starters, then build the CFO overview with the `ocean` theme and save it to `cfo.pbix`."*
- *"List my saved dashboards and rebuild the one called 'Monthly Exec Pack'."*

### Typical flow

1. `daxops_list_solutions` - or `daxops_upload_data { paths: ["sales.csv", "regions.xlsx"] }` to get a `sourceId`.
2. `daxops_ai_build { prompt: "an exec sales overview with YoY growth and a region map", sourceId: "..." }`
   - or `daxops_build { solution: "finance/cfo-overview", theme: "ocean", title: "CFO Overview" }`.
3. The `.pbix` is saved to disk (default `./daxops-<title>.pbix`, or your `outPath`).

Async builds return a job id immediately; the build/AI tools poll until the job is `done` (a couple of
minutes is normal) and then download the `.pbix`. If a poll times out, the job id is reported so you can
retry with `daxops_download`.

---

## Security

- Your license key is read **only** from the `DAXOPS_LICENSE_KEY` environment variable and is sent only as
  an `Authorization: Bearer` header to your DaxOps site over HTTPS. It is **never** printed in tool output,
  errors, or logs (server logs go to stderr; stdout carries only the MCP protocol).
- Your data is processed on DaxOps' servers in **Auckland, New Zealand**, and the uploaded data is
  **deleted after the build completes**. Only the `.pbix` you download is kept.

---

## License

This is commercial software. Use of `daxops-mcp` requires an active DaxOps account and license key, and is
governed by the DaxOps Terms of Service at <https://daxops.com>. All rights reserved. It is not open-source
and may not be redistributed.

---

## Develop

```bash
npm install
npm run dev        # tsx watch
npm run typecheck  # tsc --noEmit
npm run build      # tsc -> dist/
```

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation4/5

Most tools are distinct, but daxops_build and daxops_ai_build both create dashboards with slight differences, which could cause confusion. However, descriptions clarify the AI vs manual approach.

Naming Consistency5/5

All tools follow a consistent 'daxops_verb_noun' pattern in snake_case, with clear actions like build, list, delete, upload.

Tool Count5/5

11 tools cover the full pipeline of uploading data, introspecting models, building dashboards, managing saved definitions, and listing resources. No excess or deficiency.

Completeness5/5

The tool surface supports end-to-end dashboard creation: upload, introspect, build (manual/AI), download, and manage saved dashboards. No obvious gaps for the stated domain.

Maintenance

ActivityStale
ResponsivenessNo issues