Install
$ agentstack add skill-ryanmakesandbreaksstuff-custom-codex-claude-plugins-and-skills-dataverse-prerequisites ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Dataverse Prerequisites
Shared prerequisite steps for all skills that interact with the Dataverse OData Web API (v9.2). Complete these steps before creating tables, inserting records, or making any Dataverse API call.
Used by: dataverse-solution-web-api, power-apps-code-apps, power-pages, and any future skill that needs Dataverse API access.
CRITICAL RULES
- Always verify auth before making API calls. A failed token wastes time debugging 401 errors.
- Use device code auth for PAC CLI. Run
pac auth create --deviceCodeto avoid browser profile conflicts. - Azure CLI tokens expire after ~60 minutes. Refresh before each major step or every 20 records.
- Never hardcode tokens or environment URLs. Always extract dynamically from
pac env whoandaz account get-access-token. - Confirm the target environment before any destructive operation. Show the environment URL to the user and get explicit confirmation before creating tables, columns, or importing solutions. See the Environment Confirmation step below.
- Read the safety guardrails before any destructive or bulk operation. See
../dataverse-solution-web-api/resources/safety-guardrails.mdfor the full irreversible operations table, confirmation protocol, bulk operation safety, and prompt injection protection.
Step 0 — Ensure Required Tools Are Installed
Check each tool independently. If any are missing, install them before proceeding.
| Tool | Check Command | Install (winget) | Fallback Install | |---|---|---|---| | PAC CLI | pac (prints version banner; pac --version is NOT valid) | winget install Microsoft.PowerAppsCLI | dotnet tool install --global Microsoft.PowerApps.CLI.Tool | | .NET SDK | dotnet --version | winget install Microsoft.DotNet.SDK.9 | | | Azure CLI | az --version | winget install Microsoft.AzureCLI | | | Git | git --version | winget install Git.Git | |
After any winget install, the tool may not be in PATH until the terminal is restarted.
PAC CLI PATH Discovery (Windows)
If pac is not found after install, check these locations:
# winget install location (most common)
Test-Path "$env:LOCALAPPDATA\Microsoft\PowerAppsCLI\pac.exe"
# dotnet tool install location
Test-Path "$env:USERPROFILE\.dotnet\tools\pac.exe"
Add the found directory to PATH or use the full path in scripts.
Step 1 — Check PAC CLI Authentication
Run pac env who to verify the user is authenticated and get the current environment URL:
pac env who
Extract the Environment URL (e.g., https://org12345.crm.dynamics.com). Store as $envUrl.
If pac env who fails: The user needs to authenticate first:
pac auth create --deviceCode
Then select the target environment:
pac env select --environment
Multi-Environment Safety
Developers often work across multiple environments (dev, test, staging, prod). Never assume the active PAC auth profile is correct for the current task.
- Run
pac auth listto show all profiles - Use
pac auth select --nameto switch - Name profiles to reflect the environment (e.g.,
dev,staging,prod)
Step 1b — Confirm Target Environment (MANDATORY)
Before the first operation that touches a specific environment (creating tables, importing solutions, inserting data), you MUST:
- Show the user the environment URL you intend to use
- Ask them to confirm: "I'm about to make changes to ``. Is this the correct target environment?"
- Run
pac org whoto verify the active connection matches
Do not proceed until the user explicitly confirms. This is the single most important safety check — 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 against the same environment.
Step 2 — Get Azure CLI Token
Get an access token for the Dataverse environment:
$token = az account get-access-token --resource "$envUrl" --query accessToken -o tsv
If az fails: Tell the user to run az login first.
Build the standard headers for all subsequent API calls:
$headers = @{
Authorization = "Bearer $token"
"Content-Type" = "application/json"
Accept = "application/json"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
Step 3 — Verify API Access
Make a lightweight test request to confirm the token works:
Invoke-RestMethod -Uri "$envUrl/api/data/v9.2/WhoAmI" -Headers $headers
If this returns a valid response with UserId, OrganizationId, and BusinessUnitId, proceed.
If it returns:
- 401 Unauthorized — Token expired or invalid. Re-run Step 2.
- 403 Forbidden — User lacks permissions. Check the user's security roles in the environment.
Token Refresh Pattern
Azure CLI tokens expire after ~60 minutes. Refresh before each major operation step or every 20 records:
$token = az account get-access-token --resource "$envUrl" --query accessToken -o tsv
$headers["Authorization"] = "Bearer $token"
Extract Publisher Prefix
Before creating any schema, discover the publisher prefix for the target solution:
$solution = Invoke-RestMethod -Uri "$envUrl/api/data/v9.2/solutions?`$filter=uniquename eq ''&`$select=_publisherid_value" -Headers $headers
$publisherId = $solution.value[0]._publisherid_value
$publisher = Invoke-RestMethod -Uri "$envUrl/api/data/v9.2/publishers($publisherId)?`$select=customizationprefix" -Headers $headers
$prefix = $publisher.customizationprefix # e.g., "cr123"
This prefix is required for all table and column SchemaName values.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: RyanMakesAndBreaksStuff
- Source: RyanMakesAndBreaksStuff/Custom-Codex-Claude-Plugins-and-Skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.