Dataverse Plugin Is Now on the Claude Marketplace

Wait 5 sec.

Dataverse gives developers a powerful platform for building enterprise applications β€” 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 the Dataverse plugin for coding agents. It's an open-source plugin that lets AI coding agents like Claude Code and GitHub Copilot build and manage Microsoft Dataverse solutions through natural language. Since then, the Dataverse plugin has been officially listed on the Claude plugins marketplace! πŸŽ‰Before the marketplace listing, installing the plugin meant adding a marketplace source and then installing β€” or cloning the repo and pointing to a local path. Now it's just /plugin install dataverse@claude-plugins-official.In this post, we'll walk through what happens when you install the plugin and connect to your first environment.Install the Dataverse PluginClaude Code:/plugin install dataverse@claude-plugins-officialThat's it. One command. Or browse for it β€” run /plugin, go to Discover, and search "dataverse."Run /skills to confirm the plugin loaded β€” you should see the Dataverse skills catalog: connect, metadata, data, query, and solution.GitHub Copilot:/plugin install dataverse@awesome-copilotThen /plugin list and /skills list to verify.The skills, scripts, and commands are identical across both agents. If your team wants to pin a version or contribute, the source lives on the GitHub repo.See It in ActionPrefer to watch? This video walks through the entire flow β€” from installing the plugin to a fully connected Dataverse environment with MCP live β€” in about seven minutes. The rest of this post breaks down what's happening behind the scenes.Setup Orchestration, Handled for YouSetting up a Dataverse development environment today brings together several Microsoft tools. Install the PAC CLI and .NET SDK. Install Node.js and the Dataverse CLI (which also powers the MCP proxy). Install Python and the Dataverse SDK packages. Locate your org URL in the admin center. Authenticate with pac auth create. Configure an MCP server with the right endpoint URLs and client IDs. Then verify each piece works together.Each of these tools is well-documented and continues to do the heavy lifting β€” the plugin doesn't replace any of them. What it does is stitch them together, so you don't have to.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.With the Dataverse plugin, the setup orchestration is handled by the agent β€” while the security approvals stay exactly where they should be.What Happens When You Say "Connect to Dataverse"With the plugin installed, type one sentence:"Connect to my Dataverse environment"The plugin takes it from there β€” handling toolchain setup, authentication, environment discovery, and workspace initialization before moving on to MCP configuration. Here's what happens behind the scenes.Toolchain check β€” The plugin verifies each prerequisite independently β€” Python 3, PAC CLI, .NET SDK, Azure CLI, Node.js, the Dataverse CLI (@microsoft/dataverse), and Git. If anything is missing, it installs it via winget (or dotnet tool install / npm install -g as fallbacks) and adds it to your PATH. As a result, there's no hunting for download links and no version mismatches.Once Python is confirmed, the plugin installs the Dataverse Python SDK and its dependencies:pip install --upgrade azure-identity requests PowerPlatform-Dataverse-Client pandasIf everything is already present, the entire step is skipped. In other words, the connect flow is idempotent β€” run it ten times and it only does work that's actually needed.Authentication and environment discovery β€” The plugin checks for existing PAC CLI auth profiles first (pac auth list, pac org who). If you're already authenticated against your target environment, it uses that profile.If you're not authenticated, it runs pac auth create. 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 β€” Windows Credential Manager, macOS Keychain, or libsecret on Linux. Subsequent sessions authenticate silently.For teams using service principals (common in CI/CD), the plugin supports that too. CLIENT_ID and CLIENT_SECRET go into a .env file that's automatically added to .gitignore.Now the part that surprises people: environment discovery. Most developers don't have their org URL memorized. The plugin doesn't expect them to. Instead, it runs pac env list and shows every environment your identity has access to. Pick one from the list. If PAC CLI isn't available, the plugin falls back to the Power Apps environment discovery API via Azure CLI.The plugin also handles a subtle gotcha: tenant and region mismatch. Say your target environment uses crm10.dynamics.com (APAC) but your auth profile is on a different region. Normally pac org select fails with "no organization found." The plugin detects this upfront and creates a new auth profile for the correct tenant.Workspace initialization β€” Next, the plugin creates a clean project structure: scripts/, solutions/, and plugins/ directories. It copies over the authentication helper (auth.py) and MCP enablement script (enable-mcp-client.py). It also writes a .env file with your environment URL, tenant ID, and the correct MCP client ID for your agent. For Claude Code, the plugin also writes a .mcp.json project-scoped config. Claude and Copilot use different registered app IDs β€” the plugin picks the right one automatically.All of this goes into .gitignore automatically β€” credentials, token caches, build artifacts, and IDE settings.Connection verification β€” Before moving to MCP setup, the plugin verifies that the foundational auth works. It runs pac org who 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.Connect to Dataverse: MCP ConfigurationWith authentication verified, the plugin moves on to the final piece of the connect flow β€” the Dataverse MCP server.Server setup β€” The Dataverse MCP server lets your agent interact with Dataverse data natively. It handles listing tables, querying records, and creating entries β€” all without writing scripts. Setting it up manually means editing JSON config files, choosing endpoints, and getting client IDs right.The plugin handles all of it. For Claude Code, it runs claude mcp add with the stdio transport and the @microsoft/dataverse npm proxy package. This proxy handles authentication and routes requests to your environment's /api/mcp 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.Admin consent and environment allowlisting β€” 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.Tenant-level admin consent β€” 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.Environment allowlisting β€” Each Dataverse environment must explicitly allow the MCP client ID. An Environment Admin or System Administrator adds it via the Power Platform Admin Center (Settings β†’ Product β†’ Features β†’ MCP Server β†’ Allowed clients). The plugin walks you through this and can verify it programmatically, but the permission grant itself requires the right role.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.MCP verification β€” Finally, the plugin validates that MCP is live:npx @microsoft/dataverse mcp {DATAVERSE_URL} --validateThe validator confirms the GA endpoint is working. A 403 warning on the optional Preview endpoint is expected if it's not enabled in your environment β€” the plugin uses the GA endpoint, so you're good to go.One more step: restart Claude Code. Run /exit, then relaunch with claude --continue to preserve your session. Claude Code loads MCP servers on startup, so this restart is required for the newly registered server to become active.Once back in, ask "what tables are in this environment?" and get live data back. Not a success message β€” actual data from your environment.You Talk, the Plugin RoutesOnce connected, you don't think about which tool to use β€” the plugin picks the right one based on what you're asking: What you say What the plugin uses "What tables are in this environment?" MCP list_tables β€” instant, no script "Create an account named Contoso" MCP create_record β€” single record, no script "Import this CSV of 10,000 contacts" Python SDK β€” bulk CreateMultiple with chunking "Show me a breakdown of opportunities by stage" Web API $apply β€” server-side aggregation The routing hierarchy: MCP for conversational queries and small writes. Python SDK for bulk operations and multi-page reads. Web API for advanced schema and aggregation. You describe what you want in plain English β€” the plugin picks the right tool. We'll go deeper on each of these in future posts.When Things Go WrongThe plugin is designed to guide you through failures rather than dump a stack trace:Wrong or unknown URL β€” The plugin falls back to environment discovery so you can pick from a list instead of guessing the URL formatTenant and region mismatch β€” Rather than letting pac org select fail with a confusing error, the plugin detects the mismatch and creates a new auth profile for the correct tenantMCP not working after setup β€” The --validate flag checks credentials, tenant consent, and environment allowlisting, and then reports what specifically is missingPermissions errors β€” If environment creation or admin operations fail, the plugin directs you to the Power Platform Admin Center with the specific setting or role neededThe goal is actionable guidance at every step β€” not raw API errors.What's NextNow that you're connected, what can you actually build? Next time, we'll create a complete support ticket application β€” four tables, relationships, forms, views, and sample data β€” from a single prompt. The agent handles schema design, solution membership, and data generation. All you provide is what you're building.The Dataverse plugin is open source and MIT licensed. Try it today, and let us know what you build.Install the plugin | Report issuesWhat is Microsoft Dataverse? β€” overview of tables, security, and developer capabilitiesDataverse MCP server β€” official docs on MCP setup, admin consent, and environment allowlistingMCP for non-Microsoft clients β€” proxy and remote endpoint details for Claude CodeDataverse Python SDK β€” getting started guide (PyPI package)Dataverse Web API β€” the OData v4 API the plugin uses under the hoodPAC CLI β€” the Power Platform CLI used for auth and environment managementIn this series:Part 1: Introducing Dataverse SkillsPart 3: Build a Complete App from a Single Prompt (coming soon)