<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nexus AI</title>
    <description>The latest articles on DEV Community by Nexus AI (@hallo_nexusai_daf6bd21cf).</description>
    <link>https://dev.to/hallo_nexusai_daf6bd21cf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4028714%2F1067b218-e640-4f8d-b9ae-1cc20b0491fa.png</url>
      <title>DEV Community: Nexus AI</title>
      <link>https://dev.to/hallo_nexusai_daf6bd21cf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hallo_nexusai_daf6bd21cf"/>
    <language>en</language>
    <item>
      <title>SSAS MCP Server: Let AI Agents Query Your Analysis Services Cubes</title>
      <dc:creator>Nexus AI</dc:creator>
      <pubDate>Tue, 14 Jul 2026 12:09:12 +0000</pubDate>
      <link>https://dev.to/hallo_nexusai_daf6bd21cf/ssas-mcp-server-let-ai-agents-query-your-analysis-services-cubes-2db5</link>
      <guid>https://dev.to/hallo_nexusai_daf6bd21cf/ssas-mcp-server-let-ai-agents-query-your-analysis-services-cubes-2db5</guid>
      <description>&lt;p&gt;If you work with SSAS, you know the drill. The data is there, the cubes are well-modeled, but actually getting answers out of them requires someone who knows DAX or MDX. For most organizations that means a small group of people becomes the bottleneck for every ad-hoc question.&lt;/p&gt;

&lt;p&gt;We got tired of that pattern, so we built an MCP server that gives AI agents direct access to SSAS. It connects through ADOMD.NET, supports both DAX and MDX, and works with any MCP client (Claude Desktop, GitHub Copilot, Cursor, Claude Code, whatever you prefer).&lt;/p&gt;

&lt;p&gt;It's open source, MIT licensed, and you can install it with pip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/NexusAI-Solutions/ssas-mcp-server" rel="noopener noreferrer"&gt;NexusAI-Solutions/ssas-mcp-server&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Six tools, all read-only:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;execute_query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run DAX or MDX queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_catalogs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List databases on the instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_tables&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tables, dimensions, measure groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_columns&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Columns for a specific table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_measures&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All measures with their DAX expressions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;describe_model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model overview with tables, measures, metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The AI agent uses these tools to figure out the model structure, write the appropriate query, run it, and return the results. You ask a question in plain English, it handles the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ssas-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;SSAS_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;YOUR_SERVER&lt;span class="se"&gt;\I&lt;/span&gt;NSTANCE
&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;SSAS_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Your Cube Name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Claude Desktop
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;claude_desktop_config.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ssas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ssas_mcp_server"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SSAS_SERVER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_SERVER&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;INSTANCE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SSAS_DATABASE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Cube Name"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  VS Code / GitHub Copilot
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;.vscode/mcp.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ssas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ssas_mcp_server"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SSAS_SERVER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_SERVER&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;INSTANCE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SSAS_DATABASE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Cube Name"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add ssas &lt;span class="nt"&gt;--&lt;/span&gt; python &lt;span class="nt"&gt;-m&lt;/span&gt; ssas_mcp_server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why not just use CData or the Power BI MCP Server?
&lt;/h2&gt;

&lt;p&gt;Fair question. Here's the short version:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SSAS MCP Server&lt;/th&gt;
&lt;th&gt;CData SSAS MCP&lt;/th&gt;
&lt;th&gt;Power BI MCP Server&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SSAS (Tabular + Multidimensional)&lt;/td&gt;
&lt;td&gt;SSAS (via JDBC)&lt;/td&gt;
&lt;td&gt;Power BI semantic models only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Queries&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native DAX + MDX&lt;/td&gt;
&lt;td&gt;SQL (translated)&lt;/td&gt;
&lt;td&gt;DAX (via Copilot)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT (free)&lt;/td&gt;
&lt;td&gt;Commercial (paid)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;Cloud / VS Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JDBC driver + config&lt;/td&gt;
&lt;td&gt;Microsoft ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;CData requires a paid license and runs on Java. It translates queries to SQL instead of using native DAX/MDX, which limits what you can do analytically.&lt;/p&gt;

&lt;p&gt;Microsoft's Power BI MCP Server only works with Power BI semantic models. If your cubes run on standalone SSAS or Azure Analysis Services, it doesn't apply.&lt;/p&gt;

&lt;p&gt;This server fills the gap: lightweight, open source, direct SSAS connection, native query languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;p&gt;Read-only by design. No network endpoint exposed (runs via stdio). Authentication goes through your existing SSAS instance security, so whatever permissions the Windows user has, the AI agent inherits. Nothing more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's useful
&lt;/h2&gt;

&lt;p&gt;The most common scenario we see: someone in a meeting needs a number that doesn't exist in any pre-built report. Normally that becomes a request that takes a day or two. With this, the analyst opens Claude and asks the question directly. Answer comes back in seconds, and you can see the actual DAX query it ran if you want to verify.&lt;/p&gt;

&lt;p&gt;Also useful for onboarding. New people on the team can ask "describe the data model" and get a structured overview instead of digging through documentation that's probably outdated anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;Windows only, because ADOMD.NET requires .NET Framework. We're looking into cross-platform options but nothing concrete yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/NexusAI-Solutions/ssas-mcp-server" rel="noopener noreferrer"&gt;NexusAI-Solutions/ssas-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyPI:&lt;/strong&gt; &lt;a href="https://pypi.org/project/ssas-mcp-server/" rel="noopener noreferrer"&gt;ssas-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full writeup:&lt;/strong&gt; &lt;a href="https://www.nexus-ai.nl/insights/ssas-mcp-server-connect-ai-agents-to-your-analysis-services-cubes" rel="noopener noreferrer"&gt;nexus-ai.nl&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you run into issues or have feature requests, open an issue on GitHub. And if you need help integrating MCP servers into your BI stack, &lt;a href="https://www.nexus-ai.nl/contact" rel="noopener noreferrer"&gt;we do that too&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>opensource</category>
      <category>database</category>
    </item>
  </channel>
</rss>
