mdx-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mdx-mcpwhat were total sales in 2023?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mdx-mcp
An open-source, verified natural-language → MDX MCP server for OLAP cubes.
Ask an OLAP/SSAS multidimensional cube questions in plain English and get back a verified answer — the number, the MDX that produced it, and an honest abstain/clarify when the query is ambiguous. Cross-platform (XMLA), provider-agnostic (Claude by default), and MCP-native.
question ──▶ introspect the cube ──▶ generate k candidate MDX ──▶ execute (read-only)
──▶ self-consistency verify ──▶ { status, value, mdx, agreement }Why it's different
Verified, not vibes. It runs k diverse candidate queries and only answers when they agree; on divergence it abstains or asks to clarify instead of guessing a number.
Works on any cube. Cube-schema introspection auto-grounds generation — no per-cube hand-authoring.
Read-only by construction. Only
SELECT/WITHMDX ever executes.Open-core. Three clean seams (
LLMClient,MdxExecutor,Verifier) let you plug in a private trust layer without forking. SeeARCHITECTURE.md.
Related MCP server: @mob999/cube_mcp
Install
pip install mdx-mcp[claude] # engine + Claude reference providerThe XMLA executor and cube introspection use only the Python standard library.
Configure (env)
export MDX_MCP_ENDPOINT="http://your-ssas-host/olap/msmdpump.dll" # XMLA endpoint
export MDX_MCP_CATALOG="YourDatabase"
export MDX_MCP_CUBE="Your Cube"
export MDX_MCP_USER="user" # optional (basic auth)
export MDX_MCP_PASSWORD_FILE="/run/secrets/olap_pw" # or MDX_MCP_PASSWORD
export ANTHROPIC_API_KEY="sk-..." # for the default Claude producerRun
mdx-mcp # starts the MCP server (stdio)Tools
Tool | Purpose |
| the cube's grounding block (measures / dimensions / hierarchies) |
| NL question → |
| execute a provided MDX query (read-only) |
| explain an MDX query in plain language |
Ships a Cube-Analyst persona (persona/) and Claude skills
(skills/) that drive the flow.
Bring your own provider / backend
Implement LLMClient (any model), MdxExecutor (e.g. a Windows ADOMD backend), or Verifier
(e.g. a calibrated trust gate) and inject it — the engine is unchanged.
License
Apache-2.0. No vendor lock-in, no client data.
Available Tools
4 toolsmdx_askA
Answer a natural-language question with a verified MDX result.
Introspects the cube, generates k candidate MDX queries, executes them read-only, and returns the self-consistency verdict: {status: answer|abstain|clarify, value, mdx, agreement, errors, ...}. Never guesses a number when candidates disagree or fail.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description comprehensively explains the internal behavior: introspecting the cube, generating k candidate queries, executing them read-only, and returning a verdict. It also discloses the return structure and the abstain/clarify outcomes, leaving little ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences: a clear purpose statement, a detailed process overview, and a cautionary note. Every sentence adds value without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers input (question, k), process (generation, execution, verification), and output format (status, value, etc.). No output schema is needed because the structure is described. It fully equips the agent to use the tool appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds meaning by explaining that 'k' controls the number of candidate MDX queries generated. The 'question' parameter is obvious from context. It doesn't specify the default behavior when k is null, but the schema shows it's null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to answer natural-language questions with verified MDX results. It distinguishes itself by highlighting the self-consistency verdict mechanism, which sets it apart from siblings like mdx_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (for natural-language queries needing verification) and cautions that it never guesses when candidates disagree. However, it does not explicitly state when not to use or mention alternatives like mdx_run for direct MDX execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mdx_explainB
Explain a given MDX query in plain language (what it measures, slices, and returns).
| Name | Required | Description | Default |
|---|---|---|---|
| mdx | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It only states the tool explains the query but omits details about side effects, permissions, rate limits, or whether the explanation is static or AI-generated. This leaves the agent uncertain about behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose efficiently. It could be slightly more structured (e.g., listing what the explanation includes), but it remains concise without extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and an output schema (which documents return values), the description addresses the primary purpose. However, missing usage guidelines and behavioral transparency leave gaps. For a simple tool, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'mdx' parameter. The description identifies it as an MDX query but does not specify format, constraints, or examples. The parameter's semantics are implied rather than explicitly defined, which is insufficient for an agent to construct valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'explain', the resource 'MDX query', and the output 'plain language covering measures, slices, and returns'. It effectively differentiates from sibling tools like mdx_run and mdx_ask by focusing on explanation rather than execution or questioning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for explaining MDX queries, but does not explicitly state when not to use it or mention alternatives. Given sibling tools, additional guidance on when to choose mdx_explain over mdx_ask or mdx_introspect would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mdx_introspectA
Return the cube's 'skills' block: measures, dimensions, hierarchies for grounding.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool 'returns' data, indicating a read-only operation, but does not disclose potential side effects, authentication needs, or rate limits. The description is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately conveys the tool's purpose and output. Every word adds value, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters and an output schema exists (presumably defining the return structure), the description is adequate. It identifies what is returned (measures, dimensions, hierarchies) and hints at usage ('for grounding'). Could be more complete by explicitly stating that the output schema provides full detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the description does not need to add parameter meaning. It simply confirms the tool takes no arguments, which is sufficient. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the cube's 'skills' block consisting of measures, dimensions, and hierarchies. This distinguishes it from siblings like mdx_ask (which likely asks questions) and mdx_run (which executes queries), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for grounding' implies use in providing context for other tools, but there is no explicit guidance on when to use versus alternatives (e.g., mdx_explain). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mdx_runB
Execute a provided MDX query (read-only; SELECT/WITH only) and return the cell value.
| Name | Required | Description | Default |
|---|---|---|---|
| mdx | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It does so by clarifying read-only constraint and that it returns a single cell value. However, it lacks details on error handling, performance, or what happens if the query returns multiple cells.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, very concise with no superfluous words. It efficiently conveys key information, though it could be expanded with an example without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and only one parameter with no description, the description is insufficient for full context. It omits important details like error messages, syntax specifics, or time limits, leaving significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description does not elaborate on the 'mdx' parameter beyond 'a provided MDX query'. No format, constraints, or examples are given, leaving the agent without guidance on how to construct the query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool executes an MDX query, specifies its read-only nature (SELECT/WITH only), and mentions returning a cell value. However, it does not explicitly differentiate from sibling tools like mdx_ask.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for read-only queries by stating 'read-only; SELECT/WITH only', but does not provide when to use this tool over alternatives like mdx_ask or mdx_explain. No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
mdx_ask - First observed
mdx_explain - First observed
mdx_introspect - First observed
mdx_run
TDQS
Scored across 4 tools
Each tool serves a distinct function: answering questions, explaining queries, introspecting cube schema, and executing user-provided queries. No overlap in purpose.
All tools follow the consistent mdx_verb pattern with verbs (ask, explain, introspect, run) that clearly indicate their action.
Four tools is appropriate for the domain, covering the core interactions with an MDX cube without being excessive or insufficient.
The tool set provides a complete workflow: introspect to understand the cube, ask to get answers, explain to understand queries, and run to execute arbitrary MDX. No obvious gaps.
Maintenance
Related MCP Connectors
Ask questions in plain language, get answers from your business database. No SQL required.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Ask business questions in plain English. Get instant answers from your database, no SQL needed.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables natural language querying of Microsoft Fabric Data Warehouses with intelligent SQL generation, metadata exploration, and business-friendly result summarization. Features two-layer architecture with MCP-compliant server and agentic AI reasoning for production-ready enterprise data access.-
- AlicenseAqualityCmaintenanceProvides AI assistants with semantic layer visibility and multi-dimensional querying capabilities over Cube.js data.25 npm1MIT
- FlicenseNot gradedqualityCmaintenanceEnables natural language querying of SQL databases with robust safety guarantees including read-only enforcement, AST validation, and row caps.-
- AlicenseNot gradedqualityAmaintenanceEnables natural-language queries over data warehouses with catalog-grounded semantics and per-query authorization, returning answers with attached reasoning.Apache 2.0