{"id":1987,"date":"2026-04-30T12:06:35","date_gmt":"2026-04-30T16:06:35","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/powerplatform\/?p=1987"},"modified":"2026-04-30T12:06:35","modified_gmt":"2026-04-30T16:06:35","slug":"dataverse-plugin-claude-marketplace","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powerplatform\/dataverse-plugin-claude-marketplace\/","title":{"rendered":"Dataverse Plugin Is Now on the Claude Marketplace"},"content":{"rendered":"<p>Dataverse gives developers a powerful platform for building enterprise applications \u2014 but getting from zero to a connected, working environment has always involved multiple tools, authentication flows, and configuration steps. The Dataverse plugin was built to accelerate that journey by letting AI coding agents handle the setup orchestration for you.<\/p>\n<p>Three weeks ago we <a href=\"https:\/\/devblogs.microsoft.com\/powerplatform\/dataverse-skills-your-coding-agent-now-speaks-dataverse\/\">introduced the Dataverse plugin for coding agents<\/a>. It&#8217;s an open-source plugin that lets AI coding agents like Claude Code and GitHub Copilot build and manage <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/maker\/data-platform\/data-platform-intro\">Microsoft Dataverse<\/a> solutions through natural language. Since then, <strong>the Dataverse plugin has been officially listed on the <a href=\"https:\/\/claude.com\/plugins\/dataverse\">Claude plugins marketplace<\/a><\/strong>! \ud83c\udf89<\/p>\n<p>Before the marketplace listing, installing the plugin meant adding a marketplace source and then installing \u2014 or cloning the repo and pointing to a local path. Now it&#8217;s just <code>\/plugin install dataverse@claude-plugins-official<\/code>.<\/p>\n<p>In this post, we&#8217;ll walk through what happens when you install the plugin and connect to your first environment.<\/p>\n<h2>Install the Dataverse Plugin<\/h2>\n<p>Claude Code:<\/p>\n<pre><code>\/plugin install dataverse@claude-plugins-official\n<\/code><\/pre>\n<p>That&#8217;s it. One command. Or browse for it \u2014 run <code>\/plugin<\/code>, go to Discover, and search &#8220;dataverse.&#8221;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-content\/uploads\/sites\/79\/2026\/04\/the-image-shows-a-user-interface-of-the-claude-cod.webp\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-content\/uploads\/sites\/79\/2026\/04\/the-image-shows-a-user-interface-of-the-claude-cod.webp\" alt=\"Claude Code \/plugin Discover tab showing search results for dataverse\" width=\"1535\" height=\"770\" class=\"alignnone size-full wp-image-1985\" srcset=\"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-content\/uploads\/sites\/79\/2026\/04\/the-image-shows-a-user-interface-of-the-claude-cod.webp 1535w, https:\/\/devblogs.microsoft.com\/powerplatform\/wp-content\/uploads\/sites\/79\/2026\/04\/the-image-shows-a-user-interface-of-the-claude-cod-300x150.webp 300w, https:\/\/devblogs.microsoft.com\/powerplatform\/wp-content\/uploads\/sites\/79\/2026\/04\/the-image-shows-a-user-interface-of-the-claude-cod-1024x514.webp 1024w, https:\/\/devblogs.microsoft.com\/powerplatform\/wp-content\/uploads\/sites\/79\/2026\/04\/the-image-shows-a-user-interface-of-the-claude-cod-768x385.webp 768w\" sizes=\"(max-width: 1535px) 100vw, 1535px\" \/><\/a><\/p>\n<p>Run <code>\/skills<\/code> to confirm the plugin loaded \u2014 you should see the Dataverse skills catalog: connect, metadata, data, query, and solution.<\/p>\n<p>GitHub Copilot:<\/p>\n<pre><code>\/plugin install dataverse@awesome-copilot\n<\/code><\/pre>\n<p>Then <code>\/plugin list<\/code> and <code>\/skills list<\/code> to verify.<\/p>\n<p>The skills, scripts, and commands are identical across both agents. If your team wants to pin a version or contribute, the source lives on <a href=\"https:\/\/github.com\/microsoft\/Dataverse-skills\">the GitHub repo<\/a>.<\/p>\n<h2>See It in Action<\/h2>\n<p>Prefer to watch? This video walks through the entire flow \u2014 from installing the plugin to a fully connected Dataverse environment with MCP live \u2014 in about seven minutes.<\/p>\n<div style=\"position:relative; padding-bottom:56.25%; height:0; overflow:hidden; max-width:100%; margin:1em 0;\">\n  <iframe src=\"https:\/\/www.youtube-nocookie.com\/embed\/iLM--jlQW4I?rel=0&#038;modestbranding=1&#038;loop=1&#038;playlist=iLM--jlQW4I&#038;cc_load_policy=1&#038;iv_load_policy=3\"\n          title=\"Zero to Connected \u2014 Install to Connected walkthrough\"\n          loading=\"lazy\"\n          frameborder=\"0\"\n          allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n          referrerpolicy=\"strict-origin-when-cross-origin\"\n          allowfullscreen\n          style=\"position:absolute; top:0; left:0; width:100%; height:100%;\"><\/iframe>\n<\/div>\n<p>The rest of this post breaks down what&#8217;s happening behind the scenes.<\/p>\n<h2>Setup Orchestration, Handled for You<\/h2>\n<p>Setting up a Dataverse development environment today brings together several Microsoft tools. Install the <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-platform\/developer\/cli\/introduction\">PAC CLI<\/a> and .NET SDK. Install Node.js and the <a href=\"https:\/\/www.npmjs.com\/package\/@microsoft\/dataverse\">Dataverse CLI<\/a> (which also powers the MCP proxy). Install Python and the Dataverse SDK packages. Locate your org URL in the <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-platform\/admin\/admin-documentation\">admin center<\/a>. Authenticate with <code>pac auth create<\/code>. Configure an MCP server with the right endpoint URLs and client IDs. Then verify each piece works together.<\/p>\n<p>Each of these tools is well-documented and continues to do the heavy lifting \u2014 the plugin doesn&#8217;t replace any of them. What it does is stitch them together, so you don&#8217;t have to.<\/p>\n<p>On top of that, MCP access requires tenant admin consent and per-environment allowlisting. These are security controls that the plugin does not bypass (more on that below). However, the plugin still does the heavy lifting. It auto-configures the MCP server, generates the exact consent URL, and verifies allowlisting programmatically. For any step that requires a human with admin privileges, it tells you exactly which settings page to visit.<\/p>\n<p>With the Dataverse plugin, the setup orchestration is handled by the agent \u2014 while the security approvals stay exactly where they should be.<\/p>\n<h2>What Happens When You Say &#8220;Connect to Dataverse&#8221;<\/h2>\n<p>With the plugin installed, type one sentence:<\/p>\n<p><em>&#8220;Connect to my Dataverse environment&#8221;<\/em><\/p>\n<p>The plugin takes it from there \u2014 handling toolchain setup, authentication, environment discovery, and workspace initialization before moving on to MCP configuration. Here&#8217;s what happens behind the scenes.<\/p>\n<p><strong>Toolchain check<\/strong> \u2014 The plugin verifies each prerequisite independently \u2014 Python 3, PAC CLI, .NET SDK, Azure CLI, Node.js, the <a href=\"https:\/\/www.npmjs.com\/package\/@microsoft\/dataverse\">Dataverse CLI<\/a> (<code>@microsoft\/dataverse<\/code>), and Git. If anything is missing, it installs it via <code>winget<\/code> (or <code>dotnet tool install<\/code> \/ <code>npm install -g<\/code> as fallbacks) and adds it to your PATH. As a result, there&#8217;s no hunting for download links and no version mismatches.<\/p>\n<p>Once Python is confirmed, the plugin installs the <a href=\"https:\/\/github.com\/microsoft\/PowerPlatform-DataverseClient-Python\">Dataverse Python SDK<\/a> and its dependencies:<\/p>\n<pre><code>pip install --upgrade azure-identity requests PowerPlatform-Dataverse-Client pandas\n<\/code><\/pre>\n<p>If everything is already present, the entire step is skipped. In other words, the connect flow is idempotent \u2014 run it ten times and it only does work that&#8217;s actually needed.<\/p>\n<p><strong>Authentication and environment discovery<\/strong> \u2014 The plugin checks for existing PAC CLI auth profiles first (<code>pac auth list<\/code>, <code>pac org who<\/code>). If you&#8217;re already authenticated against your target environment, it uses that profile.<\/p>\n<p>If you&#8217;re not authenticated, it runs <code>pac auth create<\/code>. This opens a standard Microsoft Entra sign-in window. No client secrets, no credentials in plaintext. The Python SDK stores tokens in your OS credential store \u2014 Windows Credential Manager, macOS Keychain, or libsecret on Linux. Subsequent sessions authenticate silently.<\/p>\n<p>For teams using service principals (common in CI\/CD), the plugin supports that too. <code>CLIENT_ID<\/code> and <code>CLIENT_SECRET<\/code> go into a <code>.env<\/code> file that&#8217;s automatically added to <code>.gitignore<\/code>.<\/p>\n<p>Now the part that surprises people: environment discovery. Most developers don&#8217;t have their org URL memorized. The plugin doesn&#8217;t expect them to. Instead, it runs <code>pac env list<\/code> and shows every environment your identity has access to. Pick one from the list. If PAC CLI isn&#8217;t available, the plugin falls back to the Power Apps environment discovery API via Azure CLI.<\/p>\n<p>The plugin also handles a subtle gotcha: tenant and region mismatch. Say your target environment uses <code>crm10.dynamics.com<\/code> (APAC) but your auth profile is on a different region. Normally <code>pac org select<\/code> fails with &#8220;no organization found.&#8221; The plugin detects this upfront and creates a new auth profile for the correct tenant.<\/p>\n<p><strong>Workspace initialization<\/strong> \u2014 Next, the plugin creates a clean project structure: <code>scripts\/<\/code>, <code>solutions\/<\/code>, and <code>plugins\/<\/code> directories. It copies over the authentication helper (<code>auth.py<\/code>) and MCP enablement script (<code>enable-mcp-client.py<\/code>). It also writes a <code>.env<\/code> file with your environment URL, tenant ID, and the correct MCP client ID for your agent. For Claude Code, the plugin also writes a <code>.mcp.json<\/code> project-scoped config. Claude and Copilot use different registered app IDs \u2014 the plugin picks the right one automatically.<\/p>\n<p>All of this goes into <code>.gitignore<\/code> automatically \u2014 credentials, token caches, build artifacts, and IDE settings.<\/p>\n<p><strong>Connection verification<\/strong> \u2014 Before moving to MCP setup, the plugin verifies that the foundational auth works. It runs <code>pac org who<\/code> and the Python auth script to confirm both PAC CLI and SDK authentication are live. If either fails, it loops back to diagnose the issue before proceeding.<\/p>\n<h2>Connect to Dataverse: MCP Configuration<\/h2>\n<p>With authentication verified, the plugin moves on to the final piece of the connect flow \u2014 the Dataverse MCP server.<\/p>\n<p><strong>Server setup<\/strong> \u2014 The <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/maker\/data-platform\/data-platform-mcp\">Dataverse MCP server<\/a> lets your agent interact with Dataverse data natively. It handles listing tables, querying records, and creating entries \u2014 all without writing scripts. Setting it up manually means editing JSON config files, choosing endpoints, and getting client IDs right.<\/p>\n<p>The plugin handles all of it. For Claude Code, it runs <code>claude mcp add<\/code> with the stdio transport and the <code>@microsoft\/dataverse<\/code> npm proxy package. This proxy handles authentication and routes requests to your environment&#8217;s <code>\/api\/mcp<\/code> endpoint. For Copilot, it writes the JSON configuration to the right scope. In both cases, the server name is auto-generated from your org identifier.<\/p>\n<p><strong>Admin consent and environment allowlisting<\/strong> \u2014 An important point: the plugin automates configuration, not authorization. MCP access to Dataverse is gated by two security controls, and the plugin does not bypass either of them.<\/p>\n<ol>\n<li>Tenant-level admin consent \u2014 An Azure AD Global Admin or Privileged Role Admin must approve the MCP client app for the tenant. The plugin generates the exact consent URL with your tenant ID and client ID pre-filled, but a human admin still needs to review and click Accept. This is a one-time action per tenant.<\/li>\n<li>Environment allowlisting \u2014 Each Dataverse environment must explicitly allow the MCP client ID. An Environment Admin or System Administrator adds it via the <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-platform\/admin\/admin-documentation\">Power Platform Admin Center<\/a> (Settings \u2192 Product \u2192 Features \u2192 MCP Server \u2192 Allowed clients). The plugin walks you through this and can verify it programmatically, but the permission grant itself requires the right role.<\/li>\n<\/ol>\n<p>These are the same guardrails that apply to any MCP client connecting to Dataverse. The plugin just removes the guesswork: finding the right settings page, building the consent URL, knowing which client ID to use. Tenant consent covers all environments in the tenant. Environment allowlisting is per-environment but takes about a minute.<\/p>\n<p><strong>MCP verification<\/strong> \u2014 Finally, the plugin validates that MCP is live:<\/p>\n<pre><code>npx @microsoft\/dataverse mcp {DATAVERSE_URL} --validate\n<\/code><\/pre>\n<p>The validator confirms the GA endpoint is working. A 403 warning on the optional Preview endpoint is expected if it&#8217;s not enabled in your environment \u2014 the plugin uses the GA endpoint, so you&#8217;re good to go.<\/p>\n<p>One more step: restart Claude Code. Run <code>\/exit<\/code>, then relaunch with <code>claude --continue<\/code> to preserve your session. Claude Code loads MCP servers on startup, so this restart is required for the newly registered server to become active.<\/p>\n<p>Once back in, ask &#8220;what tables are in this environment?&#8221; and get live data back. Not a success message \u2014 actual data from your environment.<\/p>\n<h2>You Talk, the Plugin Routes<\/h2>\n<p>Once connected, you don&#8217;t think about which tool to use \u2014 the plugin picks the right one based on what you&#8217;re asking:<\/p>\n<table style=\"width:100%; border-collapse:collapse; margin:1em 0;\">\n<thead>\n<tr style=\"background-color:rgba(128,128,128,0.15);\">\n<th style=\"text-align:left; padding:10px 12px; border-bottom:2px solid rgba(128,128,128,0.5);\">\n        What you say\n      <\/th>\n<th style=\"text-align:left; padding:10px 12px; border-bottom:2px solid rgba(128,128,128,0.5);\">\n        What the plugin uses\n      <\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding:8px 12px; border-bottom:1px solid rgba(128,128,128,0.25);\">\n        <em>&#8220;What tables are in this environment?&#8221;<\/em>\n      <\/td>\n<td style=\"padding:8px 12px; border-bottom:1px solid rgba(128,128,128,0.25);\">\n        MCP <code>list_tables<\/code> \u2014 instant, no script\n      <\/td>\n<\/tr>\n<tr>\n<td style=\"padding:8px 12px; border-bottom:1px solid rgba(128,128,128,0.25);\">\n        <em>&#8220;Create an account named Contoso&#8221;<\/em>\n      <\/td>\n<td style=\"padding:8px 12px; border-bottom:1px solid rgba(128,128,128,0.25);\">\n        MCP <code>create_record<\/code> \u2014 single record, no script\n      <\/td>\n<\/tr>\n<tr>\n<td style=\"padding:8px 12px; border-bottom:1px solid rgba(128,128,128,0.25);\">\n        <em>&#8220;Import this CSV of 10,000 contacts&#8221;<\/em>\n      <\/td>\n<td style=\"padding:8px 12px; border-bottom:1px solid rgba(128,128,128,0.25);\">\n        Python SDK \u2014 bulk <code>CreateMultiple<\/code> with chunking\n      <\/td>\n<\/tr>\n<tr>\n<td style=\"padding:8px 12px;\">\n        <em>&#8220;Show me a breakdown of opportunities by stage&#8221;<\/em>\n      <\/td>\n<td style=\"padding:8px 12px;\">\n        Web API <code>$apply<\/code> \u2014 server-side aggregation\n      <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The routing hierarchy: <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/maker\/data-platform\/data-platform-mcp\">MCP<\/a> for conversational queries and small writes. <a href=\"https:\/\/github.com\/microsoft\/PowerPlatform-DataverseClient-Python\">Python SDK<\/a> for bulk operations and multi-page reads. <a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/developer\/data-platform\/webapi\/overview\">Web API<\/a> for advanced schema and aggregation. You describe what you want in plain English \u2014 the plugin picks the right tool. We&#8217;ll go deeper on each of these in future posts.<\/p>\n<h2>When Things Go Wrong<\/h2>\n<p>The plugin is designed to guide you through failures rather than dump a stack trace:<\/p>\n<ul>\n<li>Wrong or unknown URL \u2014 The plugin falls back to environment discovery so you can pick from a list instead of guessing the URL format<\/li>\n<li>Tenant and region mismatch \u2014 Rather than letting <code>pac org select<\/code> fail with a confusing error, the plugin detects the mismatch and creates a new auth profile for the correct tenant<\/li>\n<li>MCP not working after setup \u2014 The <code>--validate<\/code> flag checks credentials, tenant consent, and environment allowlisting, and then reports what specifically is missing<\/li>\n<li>Permissions errors \u2014 If environment creation or admin operations fail, the plugin directs you to the Power Platform Admin Center with the specific setting or role needed<\/li>\n<\/ul>\n<p>The goal is actionable guidance at every step \u2014 not raw API errors.<\/p>\n<h2>What&#8217;s Next<\/h2>\n<p>Now that you&#8217;re connected, what can you actually build? Next time, we&#8217;ll create a complete support ticket application \u2014 four tables, relationships, forms, views, and sample data \u2014 from a single prompt. The agent handles schema design, solution membership, and data generation. All you provide is what you&#8217;re building.<\/p>\n<p><em>The Dataverse plugin is open source and MIT licensed. Try it today, and let us know what you build.<\/em><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/microsoft\/Dataverse-skills#getting-started\">Install the plugin<\/a> | <a href=\"https:\/\/github.com\/microsoft\/Dataverse-skills\/issues\">Report issues<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/maker\/data-platform\/data-platform-intro\">What is Microsoft Dataverse?<\/a> \u2014 overview of tables, security, and developer capabilities<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/maker\/data-platform\/data-platform-mcp\">Dataverse MCP server<\/a> \u2014 official docs on MCP setup, admin consent, and environment allowlisting<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/maker\/data-platform\/data-platform-mcp-other-clients\">MCP for non-Microsoft clients<\/a> \u2014 proxy and remote endpoint details for Claude Code<\/li>\n<li><a href=\"https:\/\/github.com\/microsoft\/PowerPlatform-DataverseClient-Python#getting-started\">Dataverse Python SDK<\/a> \u2014 getting started guide (<a href=\"https:\/\/pypi.org\/project\/PowerPlatform-Dataverse-Client\/\">PyPI package<\/a>)<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-apps\/developer\/data-platform\/webapi\/overview\">Dataverse Web API<\/a> \u2014 the OData v4 API the plugin uses under the hood<\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/power-platform\/developer\/cli\/introduction\">PAC CLI<\/a> \u2014 the Power Platform CLI used for auth and environment management<\/li>\n<\/ul>\n<p>In this series:<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/powerplatform\/dataverse-skills-your-coding-agent-now-speaks-dataverse\/\">Part 1: Introducing Dataverse Skills<\/a><\/li>\n<li>Part 3: Build a Complete App from a Single Prompt <em>(coming soon)<\/em><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Dataverse gives developers a powerful platform for building enterprise applications \u2014 but getting from zero to a connected, working environment has always involved multiple tools, authentication flows, and configuration steps. The Dataverse plugin was built to accelerate that journey by letting AI coding agents handle the setup orchestration for you. Three weeks ago we introduced [&hellip;]<\/p>\n","protected":false},"author":211005,"featured_media":2020,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[70,26,1],"tags":[71,74,8,68,66,72,73,67],"class_list":["post-1987","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dataverse","category-news","category-powerplatform","tag-claude-code","tag-claude-marketplace","tag-dataverse","tag-github-copilot","tag-mcp","tag-plugin","tag-python-sdk","tag-skills"],"acf":[],"blog_post_summary":"<p>Dataverse gives developers a powerful platform for building enterprise applications \u2014 but getting from zero to a connected, working environment has always involved multiple tools, authentication flows, and configuration steps. The Dataverse plugin was built to accelerate that journey by letting AI coding agents handle the setup orchestration for you. Three weeks ago we introduced [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/posts\/1987","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/users\/211005"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/comments?post=1987"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/posts\/1987\/revisions"}],"predecessor-version":[{"id":2055,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/posts\/1987\/revisions\/2055"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/media\/2020"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/media?parent=1987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/categories?post=1987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powerplatform\/wp-json\/wp\/v2\/tags?post=1987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}