Microsoft Docs
MicrosoftDocs/mcp
Understand Microsoft technologies by querying official documentation.
Foundational cross-cutting context for Dataverse / Power Platform work — scope and the skill map, the tool-capability reference, the safety rules, and the safe change lifecycle.
$ npx skills add microsoft/Dataverse-skills --skill dv-overview -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install microsoft/Dataverse-skills dv-overview --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/microsoft/Dataverse-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/plugins/dataverse/skills/dv-overview .claude/skills/dv-overview && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dv-overview" agent skill from https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overview into .claude/skills/dv-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dv-overview", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add microsoft/Dataverse-skills --skill dv-overview -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install microsoft/Dataverse-skills dv-overview --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/Dataverse-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/plugins/dataverse/skills/dv-overview .agents/skills/dv-overview && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dv-overview" agent skill from https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overview into .agents/skills/dv-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dv-overview", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/Dataverse-skills --skill dv-overview -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install microsoft/Dataverse-skills dv-overview --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/Dataverse-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/plugins/dataverse/skills/dv-overview .cursor/skills/dv-overview && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dv-overview" agent skill from https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overview into .cursor/skills/dv-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dv-overview", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/microsoft/Dataverse-skills.git --path .github/plugins/dataverse/skills/dv-overview--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add microsoft/Dataverse-skills --skill dv-overview -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install microsoft/Dataverse-skills dv-overview --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/Dataverse-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/plugins/dataverse/skills/dv-overview .gemini/skills/dv-overview && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dv-overview" agent skill from https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overview into .gemini/skills/dv-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dv-overview", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install microsoft/Dataverse-skills dv-overviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add microsoft/Dataverse-skills --skill dv-overview -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/microsoft/Dataverse-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/plugins/dataverse/skills/dv-overview .github/skills/dv-overview && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dv-overview" agent skill from https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overview into .github/skills/dv-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dv-overview", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add microsoft/Dataverse-skills --skill dv-overview -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install microsoft/Dataverse-skills dv-overview --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/microsoft/Dataverse-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/plugins/dataverse/skills/dv-overview .opencode/skills/dv-overview && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dv-overview" agent skill from https://github.com/microsoft/Dataverse-skills/tree/main/.github/plugins/dataverse/skills/dv-overview into .opencode/skills/dv-overview/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dv-overview", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dv-overviewFoundational cross-cutting context for Dataverse / Power Platform work — scope and the skill map, the tool-capability reference, the safety rules, and the safe change lifecycle.
Dv Overview is an agent skill from microsoft/Dataverse-skills, published by the product's own GitHub organization. Foundational cross-cutting context for Dataverse / Power Platform work — scope and the skill map, the tool-capability reference, the safety rules, and the safe change lifecycle. Use when the user mentions Dataverse, Dynamics 365, Power Platform, CRM, or ERP; load this first for orientation. Specialist skills self-route via their own frontmatter triggers. Finance and Operations / F&O business-data requests also require this skill first, then dv-query for reads.
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/erp-target.md` and `references/windows-scripting.md`).
It sits in Sales & Support. It works with Power Automate, Model Context Protocol and Microsoft Azure. The repository describes itself as: Microsoft Dataverse skills for AI coding agents. Wraps the Dataverse MCP server, Dataverse CLI, Python SDK, and PAC CLI behind specialist skills for building, querying… The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3be592f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitpythonpipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dv Overview loads about 5.3k tokens when it runs, and up to ~8.1k if it reads all its reference files. Until then it costs about 119 tokens; SKILL.md has 2,595 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
auth is host-managed and does not need `.env` or `scripts/auth.py`. Never declare MCP unavailable based solely on the isee `dv-query`/`dv-data` examples) — no `.env`, `auth.py`, or workspace setup needed. For explicit "connect" or "set up"ls .env scripts/auth.py 2>/dev/nullreate` (or `pac auth create`), or check `.env`. See the `dv-connect` skill.the active PAC auth profile, values in `.env`, or anything from memory or a previous session reflects the correct targe2. If a solution name is in `.env` (`SOLUTION_NAME`), confirm it with the userAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from microsoft/Dataverse-skills at commit 3be592f, republished under its MIT licence (© microsoft). 2,595 words, ~5,338 tokens.
.claude/skills/dv-overview/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Load this skill first for any Dataverse work — it holds the cross-cutting context every task needs: scope, the tool-capability reference, the hard rules, and the change lifecycle. It does not route; the agent auto-selects specialist skills via their own WHEN/DO NOT USE WHEN frontmatter triggers. Users describe what they want in plain English; the agent chains skills automatically and never asks the user to name a skill or command.
Dataverse / Power Platform work for every persona — builders and agent devs, data scientists, environment admins, and business users — delivered by specialist skills. The agent loads and routes to these automatically via their frontmatter triggers — you never invoke them by name.
| Area | Skill |
|---|---|
| Connect, authenticate, configure MCP, verify the environment | dv-connect |
| Schema — tables, columns, relationships, forms, views; inspect existing schema | dv-metadata |
| Data writes — record CRUD, bulk create/update/upsert, CSV/FK-ordered import, sample data | dv-data |
| Data reads & analytics — OData queries, QueryBuilder, FetchXML (aggregation + N:N joins), DataFrames | dv-query |
| Solution ALM — create, export, import, pack/unpack, post-import validation | dv-solution |
| Finance and Operations X++ — author, build, deploy, DB sync, verify | erp-xpp |
| Environment administration — bulk delete, retention/archival, org & OrgDB settings, recycle bin | dv-admin |
| Security & access — roles, users, application users, business units, self-elevation (PAC CLI) | dv-security |
Model-driven apps: the building blocks (tables, forms, views) are covered by dv-metadata; composing the app shell itself — site map and navigation — is not yet a first-class skill.
Out of scope:
pac canvas or the maker portalSafety rules (init, auth, env confirmation) are non-negotiable. Tool selection (Rules 1, 2, 4) is capability-based.
Before writing ANY code or creating ANY files, actively search your callable tools for any tool whose name or description contains dataverse (tools may be registered under environment-specific names like mcp__dataverse_<orgid>__read_query, not just generic names). If any Dataverse MCP tool is found, use it directly — skip the init check and all setup. MCP auth is host-managed and does not need .env or scripts/auth.py. Never declare MCP unavailable based solely on the initially displayed tool list.
If no MCP tool is found, check for an existing CLI profile — it's the fastest path for data operations:
dataverse auth whoIf that shows an active profile with an environment URL, use CLI directly for data operations (see dv-query/dv-data examples) — no .env, auth.py, or workspace setup needed. For explicit "connect" or "set up" requests, run dv-connect regardless — it configures MCP, SDK, and PAC.
If no CLI profile exists, check workspace init:
ls .env scripts/auth.py 2>/dev/nullpython <plugin-scripts>/auth.py --ping. If it prints REACHABLE (exit 0), the workspace is bootable without pip -- confirm the URL and proceed. If --ping fails, run dv-connect.Python is the language for automation logic (transformation, control flow, retry, CSV). The toolchain (scripts/auth.py, the SDK, skill examples) is Python-based. But MCP tools, the Dataverse CLI (dataverse), the Python SDK, and the PAC CLI (pac) are all first-class tool invocations — use whichever fits. The Dataverse CLI has the same standing as pac, which is invoked freely across the solution and metadata skills.
NEVER:
npm, yarn, pnpm, package.json, node_modules/)@azure/msal-node, @azure/identity, or any Node.js Azure SDKscripts/auth.py, pac auth, and the Dataverse CLIALWAYS:
pip install and the Python SDK (PowerPlatform-Dataverse-Client) for data and schema logicscripts/auth.py for tokens/credentials; azure-identity (Python) for Azure credential flowsdataverse) and pac as allowed first-party CLIsNo mandated tool order. Each surface has a capability profile; pick what fits the job and the surface you are already in — soft defaults, not a required sequence. The full matrix is in Tool Capabilities below; the principles:
PublishXml, global option sets, anything without a first-class SDK/CLI command) — and even then prefer dataverse api (managed auth, exit codes) over hand-rolled urllib/get_token. Forms/views are not raw-only (SDK records.create/update on systemform/savedquery; only PublishXml needs dataverse api). Aggregation/N:N joins aren't raw-only either: client.query.fetchxml() (aggregates + link-entity), or the CLI's data associate for N:N writes.Field casing: $select/$filter use lowercase logical names (new_name). $expand and @odata.bind use Navigation Property Names that are case-sensitive and must match $metadata (e.g., new_AccountId). Getting this wrong causes 400 errors. SDK record payloads: provide the correct SchemaName casing on @odata.bind keys (e.g., new_AccountId@odata.bind); the SDK does not auto-correct wrong casing. Raw Web API calls (forms, views, metadata): casing is entirely manual — a lowercase new_accountid@odata.bind will 400.
Publisher prefix: Never hardcode a prefix (especially new); query existing publishers and ask the user. The prefix is permanent. See the solution skill's publisher discovery flow.
Three entry points, one shared sign-in:
dataverse auth create (Dataverse CLI) writes a shared MSAL token cache. That sign-in serves CLI, MCP proxy, and scripts/auth.py via msal-extensions.scripts/auth.py is the Python/SDK auth entry point. Order: service principal → shared CLI cache → device-code. Use get_client(skill) (SDK) or get_plugin_headers(skill, get_token()) (raw Web API) — both stamp attribution.pac auth create (PAC CLI) authenticates pac for dv-solution, dv-admin, and erp-xpp.Telemetry attribution (keep it deterministic): every request carries a closed-schema app=dataverse-skills/<ver>;skill=<skill>;agent=<agent> context so the server sees which skill routed each OData call. It is baked in — get_client(skill) and get_plugin_headers(skill, ...) stamp it on the SDK and raw-HTTP paths; the Dataverse CLI auto-stamps DataverseCli/<ver> + the command, and you add the skill with --context "app=dataverse-skills/<ver>;skill=<skill>;agent=<agent>" (the CLI wraps it in parentheses itself — do not pre-wrap). Never modify, omit, or free-form this context — it is a closed schema (allowlisted skill/agent, no PII).
NEVER:
tokencache_msalv3.dat) — reuse the cache only through scripts/auth.py / msal-extensionsIf auth is expired or missing, re-run dataverse auth create (or pac auth create), or check .env. See the dv-connect skill.
Each skill documents a tested sequence — follow it when it fits. The skills are the source of truth for the supported, non-deprecated API. If a call fails with AttributeError, the installed SDK version may not have it — check the skill's version note and use the documented alternative.
The honesty guard: if you hit a gap the skills don't cover, say so and suggest a workaround. Do not hallucinate an unsupported path — do not invent a method, parameter, or endpoint that isn't documented. If unsure, say so.
Connectivity is not auth. A login.microsoftonline.com token can succeed while the org's data-plane domain is unreachable (restricted-egress hosts like ChatGPT Work Mode). Never report a count or result you didn't get from a real call that returned — verify with python scripts/auth.py --check; if it fails, say "unreachable," never a fabricated number. On a constrained host, lead with the SDK, not CLI/MCP. See dv-connect/references/headless-hosts.md.
Understanding the real limits of each tool prevents hallucinated paths. This is the one piece of context no individual skill owns.
| Tool | Use for | Does NOT support |
|---|---|---|
| MCP Server | Data CRUD (create/read/update/delete records, batch up to 25 per call), table create/update/delete + column add (incl. local choice/multiselect + lookup/customer), schema + record inspection via describe, metadata search (search), data + file-content search (search_data, when Dataverse search is enabled), file upload/download | Forms, Views, global Option Sets, N:N relationships, alternate keys, Solutions (lookup + local choice/multiselect columns are supported via create_table/update_table). Note: table creation may timeout but still succeed — always describe (e.g. describe('tables/{name}')) before retrying. Run queries sequentially (parallel calls timeout). Column names with spaces normalize to underscores (e.g., "Specialty Area" → cr9ac_specialty_area). SQL (read_query): supports JOIN, GROUP BY (COUNT/SUM/AVG/MIN/MAX), TOP, WHERE, ORDER BY; does NOT support DISTINCT, HAVING, subqueries, OFFSET, UNION, CASE/IF, CAST/CONVERT, CTE, or date functions. For those, use client.query.sql() (also allows DISTINCT, <5K rows), $apply, or a builder->DataFrame with pandas — see dv-query. Bulk: MCP create_record/update_record/delete_record batch up to 25 records per call; for larger bulk use the SDK CreateMultiple — see dv-data. |
Python SDK (dv-data) | Scripted data writes, especially at volume. Record CRUD, upsert (alternate keys), bulk create/update/upsert (CreateMultiple/UpdateMultiple/UpsertMultiple), CSV import with lookup resolution, file column uploads (chunked >128MB) | global Option Sets, record association ($ref), $apply aggregation, table/column/relationship creation (use dv-metadata), custom action invocation |
Python SDK (dv-query) | Bulk reads and analytics. Multi-page record iteration, OData queries (select/filter/expand/orderby), QueryBuilder fluent API, GUID-free display (formatted values), $expand to resolve lookups, aggregation and N:N joins via client.query.fetchxml() (aggregate FetchXML + link-entity), pandas DataFrame handoff (client.query.builder(...).execute().to_dataframe()) for exports, Jupyter notebook snippets | OData $apply and N:N $expand on the QueryBuilder path — use records.list(expand=...) for N:N, or fetchxml() for aggregates (not raw urllib) |
Dataverse CLI (dataverse) | Headless data plane: data CRUD, associate/disassociate (N:N + $ref), data upload; api request/invoke (Web API escape hatch); api list/describe (Custom API discovery) | Metadata/schema (use SDK — dv-metadata), solution ALM (use PAC), forms/views; blocked on ChatGPT web / Codex cloud (no .NET runtime) — use the SDK |
| PAC CLI | Solution export/import/pack/unpack, ERP X++ SDK install + package scaffold/compile/deploy/DB sync, environment create/list/delete/reset, auth profile management, plugin updates (pac plugin push — first-time registration requires Web API), user/role assignment (pac admin assign-user), add solution components (pac solution add-solution-component) | Data CRUD, Dataverse metadata creation (tables/columns/forms), listing solution components (no list-components — query solutioncomponent via SDK/CLI); X++ SDK install/compile require Windows |
| Azure CLI | App registrations, service principals, credential management | Dataverse-specific operations |
| GitHub CLI | Repo management, GitHub secrets, Actions workflow status | Dataverse-specific operations |
| Raw Web API (last resort) | Only when no managed surface exposes the operation — i.e. not doable via MCP, the Python SDK, the Dataverse CLI, or the dataverse api escape hatch. Genuine cases: unbound actions like PublishXml, global option sets, and similar edge cases (not forms/views — those are SDK record CRUD on systemform/savedquery). Even then, prefer dataverse api (managed auth + skill attribution) over hand-rolled urllib. | Functionally nothing (full OData/MetadataService) — but raw urllib bypasses managed auth, paging, retry, and skill attribution, so treat it as the path of last resort |
Routing: the table shows what each surface does; the how to choose principle (soft defaults, not a fixed order) is Hard Rule 2. MCP tools not in your list? Load dv-connect.
Volume guidance: CLI dataverse data create/query/count for one-off commands; MCP for up to ~25 records per call or simple filters; the SDK's CreateMultiple for larger bulk writes (chunk large sets starting ~1,000 — see dv-data) and dv-query for bulk reads; Web API for $apply aggregation.
SDK method cheat-sheet (anti-hallucination, not a preference signal): SDK method names are the least discoverable surface, so agents invent them. This maps common ops to the exact call. Each op is equally reachable via MCP/CLI per Hard Rule 2; see the noted skill for the full pattern.
| Operation | SDK call | Skill |
|---|---|---|
| Create / update / delete records | client.records.create() / .update() / .delete() (pass a list for bulk) | dv-data |
| Upsert on an alternate key | client.records.upsert() | dv-data |
| Query / filter records | client.records.list(...) (flat) or .list_pages(...) (streaming) | dv-query |
| One record by GUID | client.records.retrieve(table, guid) (None if missing) | dv-query |
| Aggregation / server-side joins | client.query.fetchxml(xml) (aggregates + link-entity) | dv-query |
| Fluent query build (chainable) | client.query.builder(Table).where(...).execute() | dv-query |
| Limited SQL read | client.query.sql("SELECT ...") | dv-query |
| Load into pandas | client.query.builder(table).select(...).execute().to_dataframe() | dv-query |
| Upload to a file column | client.files.upload(...) | dv-data |
| Create tables / columns / lookups / N:N | client.tables.create() / .add_columns() / .create_lookup_field() / .create_many_to_many_relationship() | dv-metadata |
| Create an alternate key (enables upsert) | client.tables.create_alternate_key(...) | dv-metadata |
| Inspect existing schema | client.tables.list_columns(table) / .list_table_relationships(table) | dv-metadata |
| Create publisher / solution | client.records.create("publisher" / "solution", {...}) | dv-solution |
If the user's request involves MCP — explicitly or implicitly — search your callable tools for any tool whose name or description contains dataverse (same search as Hard Rule 0).
If MCP NOT available and user explicitly asked for MCP ("use MCP to query"):
dv-connect to set up the MCP serverIf MCP NOT available and user asked a data question ("how many accounts?"):
The distinction matters: explicit MCP request → block and set up MCP; implicit question → answer with SDK, offer MCP setup.
If MCP tools ARE available, prefer MCP for simple reads/queries/small CRUD. Use the SDK only when a script is needed.
For any real change, walk these three steps in order: confirm where, confirm the container, then persist the result.
Dataverse work often spans multiple environments (dev, test, staging, prod) and multiple sets of credentials. Never assume the active PAC auth profile, values in .env, or anything from memory or a previous session reflects the correct target for the current task.
Before the FIRST operation that touches a specific environment — creating a table, deploying a plugin, pushing a solution, inserting data — you MUST:
pac org who to verify the active connection matches"I'm about to make changes to
<URL>. Is this the correct target environment?"
Do not proceed until the user explicitly confirms. This is the single most important safety check in the plugin. Skipping it risks making irreversible changes to the wrong environment. Once confirmed for a session, you do not need to re-confirm for every subsequent operation in the same session against the same environment.
Before creating tables, columns, or other metadata, ensure a solution exists to contain the work:
.env (SOLUTION_NAME), confirm it with the userdv-solution skill and follow its publisher discovery + solution creation flow. Use the SDK — never raw Web API — to create publisher and solution records:# Quick reference — full pattern with publisher discovery is in dv-solution
publisher_id = client.records.create("publisher", {
"uniquename": "<name>", "friendlyname": "<display>",
"customizationprefix": "<prefix>", "description": "<desc>",
})
solution_id = client.records.create("solution", {
"uniquename": "<Name>", "friendlyname": "<Display>",
"version": "1.0.0.0",
"publisherid@odata.bind": f"/publishers({publisher_id})",
})solution="<UniqueName>" on all SDK calls, or include "MSCRM.SolutionName": "<UniqueName>" header on raw Web API metadata calls.Creating metadata without a solution means it exists only in the default solution and cannot be cleanly exported or deployed. Always solution-first.
Any time you make a metadata change (via MCP, Web API, or the maker portal), you must end the session by pulling:
pac solution export --name <SOLUTION_NAME> --path ./solutions/<SOLUTION_NAME>.zip --managed false
pac solution unpack --zipfile ./solutions/<SOLUTION_NAME>.zip --folder ./solutions/<SOLUTION_NAME>
rm ./solutions/<SOLUTION_NAME>.zip
git add ./solutions/<SOLUTION_NAME>
git commit -m "feat: <description>"
git pushThe repo is always the source of truth.
The plugin ships scripts/auth.py (Azure Identity token/credential acquisition — used by all other scripts and the SDK). Any Web API call beyond a one-off query should be a Python script committed to /scripts/, using scripts/auth.py for tokens. For writes see dv-data; queries and analytics see dv-query; post-import validation see dv-solution.
Platform-specific shell rules (ASCII in .py, no multiline python -c, PAC PowerShell wrapper, unbuffered background output) live in references/windows-scripting.md. Read it when running on Windows.
© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in .github/plugins/dataverse/skills/dv-overview of microsoft/Dataverse-skills.
Open the folder on GitHubat commit 3be592f
Dv Overview next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dv Overview this skillmicrosoft/Dataverse-skills | 241 | — | ~5.3k | Automated safety check: Notes | MIT | |
| Microsoft DocsMicrosoftDocs/mcp | 1.9k | 1 repos | ~723 | Automated safety check: Pass | CC-BY-4.0 | |
| Microsoft Docsmicrosoft/ai-agents-for-beginners | 77k | 3 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Microsoft Docsmicrosoft/ai-agents-for-beginners | 77k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Microsoft Docsmicrosoft/ai-agents-for-beginners | 77k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Microsoft Docsmicrosoft/ai-agents-for-beginners | 77k | — | ~1.6k | Automated safety check: Pass | MIT |
MicrosoftDocs/mcp
Understand Microsoft technologies by querying official documentation.
microsoft/ai-agents-for-beginners
Query official Microsoft documentation to find concepts, tutorials, and code examples across Azure, .NET, Agent Framework, Aspire, VS Code, GitHub, and more.
microsoft/ai-agents-for-beginners
Küsib ametlikku Microsofti dokumentatsiooni, et leida mõisteid, juhendeid ja koodinäiteid Azure'i, .NET-i, Agent Frameworki, Aspire'i, VS Code'i, GitHubi ja muu kohta.
microsoft/ai-agents-for-beginners
Kysy virallista Microsoftin dokumentaatiota löytääksesi käsitteitä, opetusohjelmia ja koodiesimerkkejä Azureen, .NET:iin, Agent Frameworkiin, Aspireen, VS Codeen, GitHubiin ja muihin liittyen.
microsoft/ai-agents-for-beginners
Interroger la documentation officielle de Microsoft pour trouver des concepts, des tutoriels et des exemples de code couvrant Azure, .NET, Agent Framework, Aspire, VS Code, GitHub, et plus encore.
microsoft/ai-agents-for-beginners
שאילתה בתיעוד הרשמי של Microsoft למציאת מושגים, מדריכים ודוגמאות קוד ב-Azure, .NET, Agent Framework, Aspire, VS Code, GitHub ועוד.
microsoft/Dataverse-skills
One-step setup and connection diagnostics for a Dataverse environment — installs tools, authenticates, registers MCP, writes .env, and verifies active profiles and linked ERP endpoints.
microsoft/Dataverse-skills
Environment-level Dataverse administration — bulk delete, retention/archival, organization settings, OrgDB settings, recycle bin, audit, and the 37 allowlisted PPAC toggles.
microsoft/Dataverse-skills
Record-level CRUD and bulk operations — create, update, delete, upsert, CSV import, multi-table foreign-key loads, AI-generated sample data.
microsoft/Dataverse-skills
Bulk reads, multi-page iteration, and analytics over Dataverse data.
microsoft/Dataverse-skills
X++ code development lifecycle for Finance and Operations — scaffold models, author classes, custom services/APIs, and data entities, install matching SDKs, compile deployable packages, deploy…
microsoft/Dataverse-skills
Dataverse schema authoring and inspection — tables, columns, relationships, forms, and views.
Categories
Foundational cross-cutting context for Dataverse / Power Platform work — scope and the skill map, the tool-capability reference, the safety rules, and the safe change lifecycle. Dv Overview is an agent skill from microsoft/Dataverse-skills, published by the product's own GitHub organization. Foundational cross-cutting context for Dataverse / Power Platform work — scope and the skill map, the tool-capability reference, the safety rules, and the safe change lifecycle.
Dv Overview fits situations like: the user mentions Dataverse; load this first for orientation.
Run `npx skills add microsoft/Dataverse-skills --skill dv-overview -a claude-code`. Or copy the skill folder (.github/plugins/dataverse/skills/dv-overview in microsoft/Dataverse-skills) into .claude/skills/dv-overview in your project. Claude Code loads it when a task matches its description.
Run `npx skills add microsoft/Dataverse-skills --skill dv-overview -a codex`. Or copy the skill folder (.github/plugins/dataverse/skills/dv-overview in microsoft/Dataverse-skills) into .agents/skills/dv-overview in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/Dataverse-skills --skill dv-overview -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dv-overview, .gemini/skills/dv-overview, .github/skills/dv-overview and .opencode/skills/dv-overview in your project.
Going by SKILL.md and its folder, Dv Overview needs the command-line tools its instructions call (git, python and pip). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use git and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Dv Overview is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Dv Overview: Microsoft Docs (MicrosoftDocs/mcp, 1.9k stars), Microsoft Docs (microsoft/ai-agents-for-beginners, 77k stars), Microsoft Docs (microsoft/ai-agents-for-beginners, 77k stars) and Microsoft Docs (microsoft/ai-agents-for-beginners, 77k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
microsoft (a GitHub organization, an official publisher) maintains it in microsoft/Dataverse-skills, which has 241 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 5, 2026.
Source: microsoft/Dataverse-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.