skills/mcp-configure/SKILL.md
Configure an MCP server for GitHub Copilot with your Dataverse environment.
npx skillsauth add williamlimasilva/.copilot mcp-configureInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill configures the Dataverse MCP server for GitHub Copilot with your organization's environment URL. Each organization is registered with a unique server name based on the org identifier (e.g., DataverseMcporgbc9a965c). If the user provided a URL it is: $ARGUMENTS.
Ask the user whether they want to configure the MCP server globally or for this project only:
Would you like to configure the Dataverse MCP server:
- Globally (available in all projects)
- Project-only (available only in this project)
Based on their choice, set the CONFIG_PATH variable:
~/.copilot/mcp-config.json (use the user's home directory).mcp/copilot/mcp.json (relative to the current working directory)Store this path for use in steps 1 and 6.
Read the MCP configuration file at CONFIG_PATH (determined in step 0) to check for already-configured servers.
The configuration file is a JSON file with the following structure:
{
"mcpServers": {
"ServerName1": {
"type": "http",
"url": "https://example.com/api/mcp"
}
}
}
Or it may use "servers" instead of "mcpServers" as the top-level key.
Extract all url values from the configured servers and store them as CONFIGURED_URLS. For example:
["https://orgfbb52bb7.crm.dynamics.com/api/mcp"]
If the file doesn't exist or is empty, treat CONFIGURED_URLS as empty ([]). This step must never block the skill.
Ask the user:
How would you like to provide your Dataverse environment URL?
- Auto-discover — List available environments from your Azure account (requires Azure CLI)
- Manual entry — Enter the URL directly
Based on their choice:
Check prerequisites:
az) is installed (check with which az or where az on Windows)Make the API call:
Check if the user is logged into Azure CLI:
az account show
If this fails, prompt the user to log in:
az login
Get an access token for the Power Apps API:
az account get-access-token --resource https://service.powerapps.com/ --query accessToken --output tsv
Call the Power Apps API to list environments:
GET https://api.powerapps.com/providers/Microsoft.PowerApps/environments?api-version=2016-11-01
Authorization: Bearer {token}
Accept: application/json
Parse the JSON response and filter for environments where properties?.linkedEnvironmentMetadata?.instanceUrl is not null.
For each matching environment, extract:
properties.displayName as displayNameproperties.linkedEnvironmentMetadata.instanceUrl (remove trailing slash) as instanceUrlCreate a list of environments in this format:
[
{ "displayName": "My Org (default)", "instanceUrl": "https://orgfbb52bb7.crm.dynamics.com" },
{ "displayName": "Another Env", "instanceUrl": "https://orgabc123.crm.dynamics.com" }
]
If the API call succeeds, proceed to step 3.
If the API call fails (user not logged in, network error, no environments found, or any other error), tell the user what went wrong and fall back to step 2b.
Ask the user to provide their environment URL directly:
Please enter your Dataverse environment URL.
Example:
https://myorg.crm10.dynamics.comYou can find this in the Power Platform Admin Center under Environments.
Then skip to step 4.
Present the environments as a numbered list. For each environment, check whether any URL in CONFIGURED_URLS starts with that environment's instanceUrl — if so, append (already configured) to the line.
I found the following Dataverse environments on your account. Which one would you like to configure?
- My Org (default) —
https://orgfbb52bb7.crm.dynamics.com(already configured)- Another Env —
https://orgabc123.crm.dynamics.comEnter the number of your choice, or type "manual" to enter a URL yourself.
If the user selects an already-configured environment, confirm that they want to re-register it (e.g. to change the endpoint type) before proceeding.
If the user types "manual", fall back to step 2b.
Take the instanceUrl from the chosen environment (or the manually entered URL) and strip any trailing slash. This is USER_URL for the remainder of the skill.
Ask the user:
Which endpoint would you like to use?
- Generally Available (GA) —
/api/mcp(recommended)- Preview —
/api/mcp_preview(latest features, may be unstable)
Based on their choice:
MCP_URL to {USER_URL}/api/mcpMCP_URL to {USER_URL}/api/mcp_previewUpdate the MCP configuration file at CONFIG_PATH (determined in step 0) to add the new server.
Generate a unique server name from the USER_URL:
https://orgbc9a965c.crm10.dynamics.com → orgbc9a965cDataverseMcp to create the server name
DataverseMcporgbc9a965cThis is the SERVER_NAME.
Update the configuration file:
If CONFIG_PATH is for a project-scoped configuration (.mcp/copilot/mcp.json), ensure the directory exists first:
mkdir -p .mcp/copilot
Read the existing configuration file at CONFIG_PATH, or create a new empty config if it doesn't exist:
{}
Determine which top-level key to use:
"servers", use that"mcpServers"Add or update the server entry:
{
"mcpServers": {
"{SERVER_NAME}": {
"type": "http",
"url": "{MCP_URL}"
}
}
}
Write the updated configuration back to CONFIG_PATH with proper JSON formatting (2-space indentation).
Important notes:
SERVER_NAME already exists, update it with the new MCP_URLProceed to step 7.
Tell the user:
✅ Dataverse MCP server configured for GitHub Copilot at
{MCP_URL}.Configuration saved to:
{CONFIG_PATH}IMPORTANT: You must restart your editor for the changes to take effect.
Restart your editor or reload the window, then you will be able to:
- List all tables in your Dataverse environment
- Query records from any table
- Create, update, or delete records
- Explore your schema and relationships
If something goes wrong, help the user check:
https://<org>.<region>.dynamics.com).mcp/copilot/mcp.json file was created successfully~/.copilot/ directorytools
Narrative and synthesis profile for Wiggins: framing, explanation, and audience-aware communication patterns for Ember sessions.
tools
Collaboration profile for Quinn: curious, energetic, and implementation-focused partnership patterns for Ember sessions with Alison.
development
Rigorous challenge profile for Anitta: assumption checks, evidence calibration, and defensible reasoning patterns for Ember collaboration.
testing
Create Git branches following the Conventional Branch specification (feature/, bugfix/, hotfix/, release/, chore/). Use when creating a new branch, naming a branch, or checking whether a branch name complies with the spec.