Copilot Studio MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PAC_PATH | No | Path to the pac executable | |
| CPS_TOOLS | No | Tool preset to limit the number of offered tools; presets include 'full', 'core', 'authoring', 'admin', 'solutions' | full |
| DOTNET_ROOT | No | The .NET root (used to locate the .NET SDK) | |
| CPS_AGENT_ID | No | Default agent id for cloud tools when the workspace carries no sync metadata | |
| CPS_CACHE_DIR | No | Token cache location | |
| CPS_CLIENT_ID | No | The Entra app registration for cs_login; default is the first-party VS Code client id | 51f81489-12ee-4a9e-aaae-a2591f45987d |
| CPS_READ_ONLY | No | Withhold every environment-changing tool (e.g. set to '1'); the environment-changing tools are then not registered at all | |
| CPS_TENANT_ID | No | The Entra tenant for cs_login; default is 'organizations' | organizations |
| CPS_WORKSPACE | No | The agent workspace to start in (VS Code: ${workspaceFolder}); otherwise the server looks for marker files in the current directory, a single child, or an ancestor | ${workspaceFolder} |
| CPS_FLOW_SCOPE | No | Override the token scope for the Power Automate service | |
| CPS_GRAPH_SCOPE | No | Override the token scope for Microsoft Graph | |
| CPS_PAC_PROFILE | No | The pac auth profile for maker commands | |
| CPS_ADMIN_PROFILE | No | The pac auth profile for admin commands | |
| CPS_TOOLS_EXCLUDE | No | Comma-separated tool names or glob patterns to exclude from the tool list | |
| CPS_ENVIRONMENT_ID | No | Default environment id for cloud tools when the workspace carries no sync metadata | |
| CPS_ENVIRONMENT_URL | No | Default environment URL for cloud tools when the workspace carries no sync metadata | |
| CPS_GRAPH_WRITE_SCOPE | No | Override the token scope for Microsoft Graph write operations |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| cs_initA | Check whether this machine is ready to work: the pac CLI and .NET, which pac auth profile is active, which cloud resources have a usable token, the environment variables, the write policy in force, and the agent workspace it found, ending with the next steps for that workspace. Read-only. Call it once at the start of a session, and again when a tool fails and you need to know whether the CLI, the credentials or the workspace is the reason. It reports the state of the machine and nothing else: when the user asked for something specific - an agent, a flow, a solution, an environment, instructions - call the tool for that thing instead. cs_create_agent scaffolds or creates an agent; cs_guide explains a task. |
| cs_loginA | Acquire a Microsoft Entra token for the cloud tools (evaluations, environments, agents, publish, chat, drift). mode 'interactive' (default) starts a browser sign-in and returns within waitSeconds: status 'ok' when it completed, otherwise status 'pending' with the sign-in URL. If no browser opened, show the user that URL to open on the machine running this server; the page redirects to localhost and the login completes in the background (check cs_login_status or call any cloud tool). mode 'device_code' returns a code to enter at microsoft.com/devicelogin (some tenants block this flow). Not needed for pac commands, which use 'pac auth create'. |
| cs_login_statusA | Answer 'am I signed in?' for the cloud tools: the cached MSAL accounts, and whether a browser or device-code sign-in is still pending, with its URL or code; optionally wait for it to complete. For the separate pac sign-in, cs_auth_who. |
| cs_logoutB | Remove cached MSAL accounts for the tenant. |
| cs_set_tool_presetA | Answer 'there are too many tools': narrow, or restore, the tool list for the rest of this session. The full list is 142 tools and about 50k tokens of schema, which crowds a smaller model's context and makes it choose worse. Presets: core (the loop that builds an agent and gets it live), authoring (local files only), admin (tenant administration), solutions (moving solutions between environments), full (everything). Read-only: it changes nothing in any environment and no tool is lost, only hidden. Ask the user before calling it. |
| cs_list_environmentsA | List Power Platform environments the signed-in user can access (BAP API), with Dataverse URLs. |
| cs_list_agentsB | List Copilot Studio agents in an environment. via 'pac' uses 'pac copilot list' (needs a pac auth profile); via 'dataverse' queries the bots table with the MSAL token. Default auto: pac when available, else dataverse. |
| cs_create_agentA | pac copilot init: create a new agent workspace on disk. Without 'environment' it is a local scaffold (no sign-in). With 'environment' it also creates the live agent and connects the workspace (needs pac auth profile and confirm: true). With 'solutionName' the agent is created inside that solution (existing unmanaged solution, or a new one with createSolution: true) via init, pack, import and clone; without it, pac puts the agent in a solution named after the agent. authoringMode 'classic' is the standard harness (topics, evaluations); 'cli-copilot' is the GitHub Copilot harness. |
| cs_clone_agentA | pac copilot clone: download an existing agent into a sync-connected workspace (a subfolder named after the agent under outputDir). Needs a pac auth profile. Records a sync stamp (.mcs/cs-sync.json) that cs_check_drift and the cs_push preflight compare against. |
| cs_pullA | pac copilot pull: three-way merge of server changes into the local workspace (also downloads knowledge files). Run before editing and before pushing. Records a sync stamp (.mcs/cs-sync.json) so cs_check_drift can tell later portal changes from yours; commit the workspace afterwards to keep a reviewable history. |
| cs_pushA | Send local file changes up into the agent's draft in Copilot Studio - topics, knowledge files, flows, connection references - so the draft matches your workspace (pac copilot push). This is the tool for 'upload', 'send my changes up' and 'sync my edits'. It only moves files into the draft; cs_publish is the separate step afterwards. Validates YAML first and blocks on errors unless force. The dry run also reports components changed in Copilot Studio since the last sync (quick drift check, needs a cached cs_login); when one of those also changed locally the push is blocked unless force. Changes the agent in Copilot Studio: requires confirm: true. |
| cs_packB | pac copilot pack: local-only packaging of the workspace into a Dataverse solution .zip (no sign-in). Also a cheap structural check of the workspace. outputPath must be outside the workspace. |
| cs_import_solutionB | pac solution import of a packed agent (from cs_pack) into an environment. Mutates the environment: requires confirm: true. |
| cs_publishA | Make the agent's current draft visible to real users on its channels - the tool for 'go live', 'release it' and 'make my changes live'. It publishes what is already in Copilot Studio, so send local edits up with cs_push first. via 'pac' runs 'pac copilot publish'; via 'dataverse' calls the PvaPublish action with the MSAL token and polls until publishedon changes. Requires confirm: true. |
| cs_statusC | pac copilot status for an agent id. |
| cs_check_driftA | Find changes made directly in Copilot Studio after the workspace was last cloned, pulled or pushed. mode 'quick' (default) reads the agent's component rows from Dataverse and compares them with the sync stamp: which topics, tools and knowledge sources changed, by whom, when, whether the agent settings changed and whether there are unpublished changes; needs a cached cs_login, no pac. mode 'full' runs pac copilot clone into a temporary folder and classifies every file as local-modified, remote-modified or both (conflict) against the stamp, with unified diffs. Both are read-only. Resolve drift with cs_pull (three-way merge), then commit. |
| cs_pacA | Escape hatch: run 'pac <args...>' directly. Read-only commands (list/who/status/help) run immediately; anything else needs confirm: true. 'profile' runs it as another pac auth profile, for example the tenant admin account. |
| cs_build_flow_definitionA | Compose a Power Automate cloud flow definition from a step spec, without touching any environment: a trigger (agent-callable by default, or manual, HTTP, schedule or a connector trigger) plus steps (connector operations, HTTP calls, conditions, loops, scopes, variables, compose, terminate, response, or raw JSON). Steps run in order. Returns the definition, the connection references it needs and any notes, and can write it to a file. Feed the same spec to cs_create_flow to create the flow, or cs_update_flow to replace an existing one. Use cs_list_connectors and cs_describe_connector to find connector ids, operation ids and their parameters first. |
| cs_list_flowsA | Answer 'which flows are there?': every cloud flow in the environment with its state, owner and last change, so you can see what the agent's flow tools can call and what a solution import left switched off. Read-only. This is the inventory only. For one flow's contents use cs_get_flow; for its execution history use cs_list_flow_runs; for the cause of a failure use cs_explain_flow_run. |
| cs_get_flowA | Answer 'what does this flow actually do?': one flow's trigger and action names, its connection references, and the whole Power Automate definition when 'includeDefinition' is set. Read-only. Use it before cs_update_flow, and to see why a flow cannot be switched on. For what happened on a particular run, use cs_list_flow_runs and cs_explain_flow_run instead. |
| cs_set_flow_stateA | Switch a flow on (Activated) or off (Draft). This is the step a solution import leaves for you: flows whose connection references were unbound at import time land switched off. A flow can only be turned on once its connections are bound and its definition is valid. Changes a live environment: requires confirm: true. |
| cs_update_flowA | Change a flow's name, description or definition in the environment. Pass 'steps' (and optionally 'trigger') to rebuild the definition the way cs_build_flow_definition does, or 'definition' for a ready-made one; either replaces properties.definition inside the existing clientdata and keeps the connection references. 'clientData' replaces the whole document. Read the current one with cs_get_flow includeDefinition first. Managed flows cannot be edited in place; edit them in their source environment or through a solution. Changes a live environment: requires confirm: true. |
| cs_create_flowA | Create a new Power Automate cloud flow, from a step spec (see cs_build_flow_definition: trigger plus connector, HTTP, condition, loop, variable and response steps) or from a ready-made definition, optionally straight into a solution. The flow is created switched off, because a flow can only be activated once its connection references are bound: bind them, then cs_set_flow_state on. To let an agent call it, use a trigger of type Request/kind Skills and add it as a tool with cs_add_tool type 'flow'. Changes a live environment: requires confirm: true. |
| cs_delete_flowA | Remove a cloud flow from the environment for good. Read it with cs_get_flow first: any agent tool that calls this flow will be left pointing at nothing, and a flow that is still switched on has to be turned off with cs_set_flow_state before Dataverse will delete it. A managed flow cannot be deleted this way; uninstall the solution it came in. Changes a live environment and cannot be undone: requires confirm: true. |
| cs_list_flow_runsA | Answer 'when did this flow last run, and did it work?': the run history of one cloud flow, most recent first, with status, start and end time, duration and the error of a failed run. Read-only. Use it to find the run you care about, then cs_explain_flow_run on that run to learn why it failed. Uses the Power Automate service, which is a separate sign-in from Dataverse (cs_login scope 'flow'). Unverified against a live tenant. |
| cs_get_flow_runB | One run of a cloud flow with its status, timing, trigger and error. Read-only. Uses the Power Automate service (cs_login scope 'flow'). Unverified against a live tenant. |
| cs_run_flowA | Start a run of a manually triggered cloud flow, with an optional payload. Only flows whose trigger is manual or agent-callable can be started this way; scheduled and event-driven flows run on their own. Whatever the flow does (sending mail, writing records) happens for real, so this changes a live environment: requires confirm: true. Uses the Power Automate service (cs_login scope 'flow'). Unverified against a live tenant. |
| cs_explain_flow_runA | Why one run of a cloud flow failed, in terms of the action that broke and what it was given. For each failed action it resolves the real error message - a failed connector action carries no error of its own, so the message is fetched from the action's outputs - classifies the failure as a connector, expression or timeout problem, and returns the inputs it was called with plus the outputs of the actions that ran just before it. Read-only. Start here when cs_list_flow_runs shows a failure. Uses the Power Automate service (cs_login scope 'flow'). Unverified against a live tenant. |
| cs_compare_flow_runsA | Diff a failed run against a successful one to separate a data problem from a logic problem. Names the action where the two runs part company, lists every action whose status differs, and flags actions present in one run but not the other, which means the definition changed between them. With compareTriggerData it also reports which top-level keys of the trigger payload differ (key names only, never the values). The baseline defaults to the most recent successful run. Read-only. Uses the Power Automate service (cs_login scope 'flow'). Unverified against a live tenant. |
| cs_analyze_flow_healthA | How reliable a cloud flow is across its recent runs: failure rate, duration spread (median and 90th percentile), and which actions the failures concentrate on. The verdict distinguishes one broken step from failures spread across many actions, which points at a connection, throttling or an unreliable downstream system instead. Read-only. Use it before cs_explain_flow_run when the complaint is 'it fails sometimes' rather than 'it failed just now'. Uses the Power Automate service (cs_login scope 'flow'). Unverified against a live tenant. |
| cs_bind_flow_connectionA | Point one of a flow's connection references at a real connection, which is the step that lets a flow be switched on. Picks the reference and the connection for you when there is only one of each, and asks when there is a choice. Handles both shapes: a flow that names a connection directly is edited in place, while a flow that came from a solution has its connectionreference row bound instead. Pass activate: true to turn the flow on in the same call once it is bound. Changes a live environment: requires confirm: true. |
| cs_list_auth_profilesA | The pac authentication profiles on this machine, which one is active, and which account each belongs to. Use it to find the name of the admin profile to pass as 'profile' to the admin tools. Read-only. |
| cs_backup_tenantA | Write the tenant's Power Platform configuration to local files for reference, diffing and source control: tenant settings, environments, DLP policies, environment groups, service principals, registered applications and app templates, plus per environment its details, solutions, agents, connections, security roles and platform backups. Read-only for the tenant; it only writes files. Runs as the admin account: pass 'profile' or set CPS_ADMIN_PROFILE. Each capture is independent, so a command the account cannot run is reported in 'skipped' and the rest still completes. |
| cs_admin_assign_usersA | Give many users their security roles in one environment, from a CSV roster or an inline list. pac assigns one user and one role per call, so a roster of ten developers with three roles each is thirty calls; this expands the roster and runs them under a single approval. Without confirm it returns the plan: every user-and-role pair it would attempt, so you can read the whole thing before any of it happens. Rows are independent, so a bad UPN or a role the environment does not have is reported and the rest still run. Changes a live environment: requires confirm: true. Runs as the admin account: pass 'profile' or set CPS_ADMIN_PROFILE. Prefer cs_admin_assign_group when the roster is really a group: that is one call per role however many people are in it, and new joiners inherit access. Unverified against a live tenant. |
| cs_list_org_agentsA | Every agent in the organisation's Microsoft 365 catalogue, across environments, with the things Power Platform cannot see: who the agent is available to, where it is deployed, and whether an admin has blocked it. Defaults to agents built in Copilot Studio; pass platform: 'all' to include the Agent Builder and acquired apps. Read-only. Uses Microsoft Graph, a separate sign-in from Dataverse (cs_login scope 'graph'). Needs a Microsoft Agent 365 licence and is global-cloud only. Unverified against a live tenant. |
| cs_get_org_agentA | Full catalogue entry for one agent: metadata, element types, availability and deployment state, and whether it is blocked. The raw body is returned alongside the mapped fields, because the detail resource carries more than the list rows. Read-only (cs_login scope 'graph'). Needs a Microsoft Agent 365 licence and is global-cloud only. Unverified against a live tenant. |
| cs_block_org_agentA | Block an agent so nobody in the organisation can use it, or lift an existing block. This is a governance action across the whole tenant, not a deployment one: it does not unpublish or delete the agent, and it affects every user at once. Changes a live tenant: requires confirm: true. Needs the CopilotPackages.ReadWrite.All permission and runs against Graph beta, the only version that exposes it (cs_login scope 'graph_write'). Needs a Microsoft Agent 365 licence and is global-cloud only. Unverified against a live tenant. |
| cs_reassign_org_agentA | Hand ownership of a catalogue agent to another user, by their Entra object id. Used when the owner leaves the organisation. Changes a live tenant: requires confirm: true. Needs CopilotPackages.ReadWrite.All and runs against Graph beta (cs_login scope 'graph_write'). Needs a Microsoft Agent 365 licence and is global-cloud only. Unverified against a live tenant. |
| cs_guideA | Explain how to do one part of Copilot Studio agent development with this server's tools: 'getting-started' (clone or create an agent and take it to a published, tested state), 'instructions' (write the agent's instructions, with AI Builder or by hand), 'knowledge' (add public site, SharePoint, Graph connector or file knowledge), 'tools' (find a connector operation, add the tool, bind its connection), 'topics' (deterministic conversations: triggers and the node types), 'flows' (build a cloud flow, bind its connections, run it, and work out why a run failed), 'evaluations' (test sets, runs and results, plus local conversation tests), 'publish-and-test' (publish the agent and chat with it), 'drift' (changes made in the portal since the last sync, and how to merge them), 'transcripts' (what real users asked, how those sessions ended, and turning the failures into a test set), 'solutions' (pull a solution, redeploy it elsewhere, compare environments), 'administration' (tenant administration with a separate admin account, and backing the tenant configuration up to files), 'troubleshooting' (the errors this server can return, and what each one means). Read the relevant topic when you do not know which tools a job needs or what order they go in; it names the tool for each step and the manual portal steps that cannot be automated. It only explains - it changes nothing and does no work, so when the user asked for something to be built, written or run, call the tool that does it rather than this one. Also returns next steps for the workspace at hand. |
| cs_extract_agent_templateA | Write a reusable YAML template from an existing agent (its topics, settings and components), for cs_create_agent_from_template in another environment or solution. Runs 'pac copilot extract-template' with the active pac auth profile. |
| cs_create_agent_from_templateA | Create a new agent in a solution from a template produced by cs_extract_agent_template. Runs 'pac copilot create' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_extract_translationsA | Export the localisable strings of one or all agents as .resx or .json files, from the environment or from an unpacked solution folder. Runs 'pac copilot extract-translation' with the active pac auth profile. |
| cs_merge_translationsA | Import translated .resx or .json files back into one or more agents (environment or unpacked solution folder). whatIf previews the merge without writing. Runs 'pac copilot merge-translation' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). Only some inputs mutate; see the parameter descriptions. |
| cs_quarantine_agentA | Put an agent in quarantine (users cannot talk to it) or release it. Admin operation. Runs 'pac copilot quarantine' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_init_solution_projectA | Scaffold a Dataverse solution project (.cdsproj) on disk for source-controlled solution development. Runs 'pac solution init' with the active pac auth profile. |
| cs_clone_solutionB | Export a solution from the environment and unpack it into a solution project folder (source-control layout). Read-only for the environment. Runs 'pac solution clone' with the active pac auth profile. |
| cs_sync_solutionB | Re-export the solution and update an existing unpacked solution folder or .cdsproj with the environment's current state. Read-only for the environment. Runs 'pac solution sync' with the active pac auth profile. |
| cs_check_solutionA | Analyse solution zip files with the Power Apps Checker service (Solution Checker or AppSource Certification rule set) and write the results locally. Use as a quality gate before cs_deploy_solution. Runs 'pac solution check' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). Only some inputs mutate; see the parameter descriptions. |
| cs_publish_customizationsA | Publish every unpublished customization in the environment (the 'Publish all customizations' button). Runs 'pac solution publish' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_set_solution_versionA | Update the version in a local unpacked solution's Solution.xml, explicitly or by strategy (gittags, filetracking, solution). Local file change only. Runs 'pac solution version' with the active pac auth profile. |
| cs_solution_online_versionA | Without solutionVersion: read the version of a solution in the environment. With it: set that version (mutating). Runs 'pac solution online-version' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). Only some inputs mutate; see the parameter descriptions. |
| cs_upgrade_solutionA | Complete a managed solution upgrade that was imported as a staged upgrade (pac solution import --stage-and-upgrade or the portal's 'Stage for upgrade'). Runs 'pac solution upgrade' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_add_solution_componentA | Add an existing component (an agent, flow, connection reference, environment variable, table ...) to an unmanaged solution by schema name or id and component type code. Runs 'pac solution add-solution-component' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_add_solution_referenceA | Reference another project (plug-in, PCF, ...) from a .cdsproj so it is packed into the solution. Run in the solution project folder (cwd). Local file change only. Runs 'pac solution add-reference' with the active pac auth profile. |
| cs_add_solution_licenseA | Attach license plan definition and mapping CSV files to a solution project (ISV licensing). Run in the solution project folder (cwd). Local file change only. Runs 'pac solution add-license' with the active pac auth profile. |
| cs_list_pipelinesA | List the pipelines that can deploy from an environment, or the stages of one pipeline. Read-only. Runs 'pac pipeline list' with the active pac auth profile. |
| cs_deploy_pipelineA | Start a pipeline deployment of a solution to a stage (the alternative to cs_deploy_solution when the tenant uses Power Platform pipelines). stageId comes from cs_list_pipelines. Runs 'pac pipeline deploy' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_create_connectionA | Create a Dataverse connection that authenticates with an app registration (application id + client secret) so flows and tools owned by a pipeline do not depend on a person. This is the only connection kind pac can create; connector connections (SharePoint, Outlook, MCP servers ...) are still authorised in the portal. Runs 'pac connection create' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_update_connectionA | Rotate the app registration or secret behind a service-principal Dataverse connection. Runs 'pac connection update' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_delete_connectionA | Delete a connection by id. Flows and tools bound to it stop working until rebound. Runs 'pac connection delete' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_create_auth_profileA | Create a pac authentication profile. Non-interactive: service principal (applicationId + clientSecret + tenant), certificate, managed identity, or GitHub / Azure DevOps federation. Interactive (a person signing in, which is the usual way to add an admin account): pass name, environment and background: true - pac opens its own browser, the call returns a jobId at once, and cs_job_status reports when the profile exists. Without background this blocks until the sign-in finishes and the client will usually give up first. Device code needs a terminal: this server gives pac no stdin. Runs 'pac auth create' with the active pac auth profile. |
| cs_select_auth_profileC | Make a pac auth profile the active one, by index (cs_init lists them) or name. Runs 'pac auth select' with the active pac auth profile. |
| cs_auth_whoC | Who pac is signed in as, and against which environment. Runs 'pac auth who' with the active pac auth profile. |
| cs_delete_auth_profileA | Remove a pac auth profile by index or name (local credential store only). Runs 'pac auth delete' with the active pac auth profile. |
| cs_admin_list_environmentsA | Every environment in the tenant with its type, region and state, as the admin centre lists them. Filters by name, type or installed application. Runs 'pac admin list' with the active pac auth profile. |
| cs_admin_environment_statusB | Status of the tenant operations that are still running (copies, restores, resets, deletions). Runs 'pac admin status' with the active pac auth profile. |
| cs_admin_list_tenant_settingsB | The tenant-wide Power Platform settings (governance, sharing, support, licensing). With settingsFile, pac writes them as JSON to that path; that file is the reference copy to keep in source control. Runs 'pac admin list-tenant-settings' with the active pac auth profile. |
| cs_admin_update_tenant_settingsA | Change tenant-wide settings, either from a settings file or one setting at a time (for example powerPlatform.governance.disableDeveloperEnvironmentCreationByNonAdminUsers). Affects the whole tenant: requires confirm: true. Runs 'pac admin update-tenant-settings' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_list_dlp_policiesA | Data loss prevention policies in the tenant: the connector groups that decide which connectors an agent or flow may combine. Runs 'pac admin dlp-policy list' with the active pac auth profile. |
| cs_admin_show_dlp_policyB | One data loss prevention policy in full: its connector classification and the environments it applies to. Runs 'pac admin dlp-policy show' with the active pac auth profile. |
| cs_admin_list_environment_groupsB | Environment groups in the tenant (the grouping used for managed-environment rules). Runs 'pac admin list-groups' with the active pac auth profile. |
| cs_admin_add_environment_to_groupA | Put an environment into an environment group, which applies that group's rules to it. Changes tenant configuration: requires confirm: true. Runs 'pac admin add-group' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_list_security_rolesA | Security roles in an environment, optionally including child roles: what cs_admin_assign_user and cs_admin_assign_group can grant. Runs 'pac admin list-roles' with the active pac auth profile. |
| cs_admin_list_service_principalsA | Entra applications that have an application user in Dataverse: who can act without a person signing in. Runs 'pac admin list-service-principal' with the active pac auth profile. |
| cs_admin_list_applicationsB | Entra applications registered with the tenant for Power Platform. Runs 'pac admin application list' with the active pac auth profile. |
| cs_admin_register_applicationA | Register an Entra application with the tenant so it can be used by Power Platform. Changes tenant configuration: requires confirm: true. Runs 'pac admin application register' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_unregister_applicationA | Remove an Entra application's tenant registration. Changes tenant configuration: requires confirm: true. Runs 'pac admin application unregister' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_list_app_templatesA | The Dynamics 365 application templates that can be installed when creating an environment, per region. Runs 'pac admin list-app-templates' with the active pac auth profile. |
| cs_admin_list_backupsA | Backups of an environment, with their labels and dates: what cs_admin_restore_environment can restore. Runs 'pac admin list-backups' with the active pac auth profile. |
| cs_admin_backup_environmentA | Take a manual backup of an environment (the platform's own backup, not the file backup cs_backup_tenant writes). Changes a live environment: requires confirm: true. Runs 'pac admin backup' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_set_backup_retentionA | Set how many days backups of an environment are kept (7, 14, 21 or 28). Changes a live environment: requires confirm: true. Runs 'pac admin set-backup-retention-period' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_restore_environmentA | Restore a backup into the same or another environment. Overwrites the target's data and customisations: requires confirm: true. Runs 'pac admin restore' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_copy_environmentA | Copy a source environment onto a target environment. Everything in the target is replaced: requires confirm: true. Runs 'pac admin copy' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_create_environmentA | Create a Dataverse environment in the tenant. Consumes tenant capacity: requires confirm: true. Runs 'pac admin create' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_delete_environmentA | Delete an environment from the tenant, with everything in it: agents, solutions, flows and data. Irreversible beyond the platform's own backup retention: requires confirm: true. Runs 'pac admin delete' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_reset_environmentA | Reset an environment to an empty Dataverse instance. Everything in it is deleted: requires confirm: true. Runs 'pac admin reset' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_set_runtime_stateA | Put an environment into administration mode (only admins can use it) or back, and control background operations. Changes a live environment: requires confirm: true. Runs 'pac admin set-runtime-state' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_set_governance_configA | Turn managed environments on ('Standard') or off ('Basic') for an environment and set its governance options: sharing limits, solution checker mode, maker onboarding. Changes tenant governance: requires confirm: true. Runs 'pac admin set-governance-config' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_assign_userB | Give a user (or an application user) a security role in an environment. Changes a live environment: requires confirm: true. Runs 'pac admin assign-user' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_assign_groupA | Give an Entra group a security role in an environment through a Dataverse team. Changes a live environment: requires confirm: true. Runs 'pac admin assign-group' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_create_service_principalA | Register an Entra application and give it an application user with a security role in an environment: the headless identity a pipeline signs in as. Changes a live environment: requires confirm: true. Runs 'pac admin create-service-principal' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_self_elevateA | Give yourself the System Administrator role in an environment. Needs Global, Power Platform or Dynamics 365 admin. Changes a live environment: requires confirm: true. Runs 'pac admin self-elevate' with the active pac auth profile. Mutates a live environment: requires confirm: true (a dry run otherwise). |
| cs_admin_queryB | Run a tenant-level resource query (the admin centre's own query language) and optionally write the results to a file as JSON, list or CSV. Runs 'pac admin query' with the active pac auth profile. |
| cs_env_listA | Environments visible to the active pac auth profile. The pac-based alternative to cs_list_environments, which needs a cs_login. Runs 'pac env list' with the active pac auth profile. |
| cs_env_whoB | Organisation id, URL, version and the signed-in user for an environment. Runs 'pac env who' with the active pac auth profile. |
| cs_env_fetchA | Run a FetchXML query against Dataverse through pac (read-only), e.g. to inspect bot or botcomponent rows without an MSAL sign-in. Runs 'pac env fetch' with the active pac auth profile. |
| cs_env_selectA | Set the environment that pac commands use when none is passed (local profile setting). Runs 'pac env select' with the active pac auth profile. |
| cs_describe_workspaceC | Inventory of an agent workspace: settings, instructions, topics (with trigger phrases), knowledge sources, tools, flows, triggers, variables, connection references, sync metadata. |
| cs_validateA | Structural validation of every component file against the Copilot Studio authoring schema (kinds, unknown/missing properties, duplicate ids, placeholders, Power Fx prefixes, variable scopes) plus cross-file checks (connection references, topic redirects). Answers 'is anything broken in these files?'; it only reads them and sends nothing anywhere. cs_push runs it itself and blocks on errors. |
| cs_lookup_schemaA | Inspect the Copilot Studio authoring schema: summarize or resolve a definition (e.g. Question, SearchAndSummarizeContent, KnowledgeSourceConfiguration), search by keyword, or list all kinds. |
| cs_add_topicB | Create topics/.topic.mcs.yml from a declarative spec: trigger phrases (or a system trigger) plus message / question / condition / redirect / setVariable / searchKnowledge / http / invokeFlow / end / raw nodes. Validates the result. Push to apply. |
| cs_add_knowledge_sourceA | Add knowledge as YAML: kind 'public-site' (Bing-scoped website, max 2 path levels), 'sharepoint' (direct folder URL), 'graph-connector' (Microsoft Graph connector via environment variable), or 'files' (copy documents into knowledge/files for upload on push). Dataverse, AI Search and SQL knowledge are portal-only. |
| cs_add_toolA | Create actions/.mcs.yml. type 'connector': a connector operation (connectorId like shared_office365, operationId like SendEmailV2; use cs_list_connectors / cs_describe_connector to find them). type 'mcp': an MCP server exposed through a connector. type 'flow': a cloud flow by id. type 'prompt': an AI Builder prompt by model id (cs_list_prompts). type 'connected-agent': another Copilot Studio agent by schema name. type 'child-agent': a child agent's GPT component. type 'raw': any other TaskAction kind with the action object supplied. When the connector definition is cached, the operationId is checked and required inputs are filled from the catalog unless inputs are given. Connector and MCP tools need a connection that only the portal can authorise; the tool writes the connection-reference stub and returns the portal step. |
| cs_edit_topicA | Change an existing topic in place, keeping its comment header: rename, description, trigger phrases (set / add / remove), priority, append or insert nodes (same node spec as cs_add_topic), remove top-level nodes by id. Validates the file afterwards. |
| cs_edit_toolA | Change an existing tool file: name, description, modelDescription / modelDisplayName (what the orchestrator routes on), operationId, connection mode or reference, output mode, and inputs (set / add / remove). Validates afterwards. |
| cs_edit_knowledgeB | Change a knowledge source file: name, description, site URL, includeSubPages, trigger condition (null removes it), additional search terms. |
| cs_remove_componentA | Delete a topic, knowledge source, tool, trigger, variable or flow from the workspace files (the live agent changes on the next cs_push). For tools, the connection reference is dropped too unless another tool uses it. Reports topics that still redirect to a removed topic. Deletes files: requires confirm: true. |
| cs_delete_agentA | pac copilot delete: permanently delete an agent from the environment. Requires confirm: true. |
| cs_delete_solutionA | pac solution delete: delete an unmanaged solution container (its components stay in the environment) or uninstall a managed one (its components are removed). Requires confirm: true. |
| cs_review_agentB | Judge whether the agent is any good and say what to improve, as a score out of 10 with a fix for each finding: instructions present and sized, escalation and fallback topics, trigger phrase count and overlap, tool descriptions and name collisions, unbound connections, authentication versus private knowledge, web browsing with internal sources, orchestration off with tools, duplicate names, credentials in YAML, pack-only workspace. Returns a score, findings with fixes, and optional Markdown. |
| cs_list_connectorsA | The environment's connector registry (the same list the portal's Add a tool shows): Microsoft-published and custom connectors, with an mcpLikely flag for MCP servers. Cached under .cs-catalog//connectors.json for offline use; with search and no sign-in, falls back to the offline seed of public connectors. |
| cs_describe_connectorA | Fetch (or read from cache) a connector's OpenAPI definition and list its operations with operationId, parameters (required, type, description) and response fields; marks MCP-capable connectors (x-ms-agentic-protocol). Exactly what cs_add_tool needs. Cached under .cs-catalog//connectors/.json and used by cs_validate. |
| cs_list_promptsB | pac copilot model list: AI Builder models (including custom prompts) in the environment, with ids for cs_add_tool type 'prompt'. |
| cs_add_flowC | EXPERIMENTAL: write workflows//metadata.yaml + workflow.json for a flow with the 'when an agent calls the flow' trigger and a response, optionally exposing it as a tool. Format follows the schema's CloudFlowDefinition and the Power Automate solution JSON; verify with cs_pack and in the portal after push. |
| cs_add_triggerB | Create trigger/.trigger.mcs.yml pointing at a cloud flow that starts the agent (WorkflowExternalTrigger). |
| cs_add_variableC | Create variables/.variable.mcs.yml (GlobalVariableComponent, conversation scope). |
| cs_update_agentA | Edit agent.mcs.yml (standard harness): instructions, display name, conversation starters, model hint, and the settings the portal groups under responses and generative AI: response instructions (wording and formatting), response mode, conversation history, capability toggles (web browsing, code interpreter, image generation, Teams / SharePoint / email / meeting / people search), whether the model may use its own general knowledge, content moderation level, file analysis and semantic search. Local file change; cs_push applies it. For GitHub Copilot harness (cli-copilot) workspaces the instructions go into settings.mcs.yml. |
| cs_update_settingsA | Set values in settings.mcs.yml by dot path, e.g. {"configuration.settings.GenerativeActionsEnabled": true}. Do not change authoringModel/recognizer/template. |
| cs_create_test_set_csvA | Write the CSV the portal's Evaluation page imports (columns Question, Expected response; max 100 cases). Test sets cannot be created through the API, so this file is imported once in the portal; runs and results are then automated via cs_run_evaluation. suggestFromWorkspace derives cases from topics, starters and knowledge. |
| cs_list_test_setsC | Power Platform API: test sets defined for the agent (standard harness). |
| cs_run_evaluationA | Start an evaluation run for a test set (draft agent by default, or the published one). Optionally wait for completion and return the summary. Counts against the 20 runs per agent per 24h limit: requires confirm: true. |
| cs_get_evaluation_runB | Status and per-case results of an evaluation run, with a pass/fail summary per test method. |
| cs_list_evaluation_runsC | Previous evaluation runs for the agent. |
| cs_list_transcriptsA | Sessions people had with the published agent, newest first: when, how many turns, the first thing the user asked, which topics and tools fired, and how the session ended. Read-only. Needs a cached cs_login. Use it to find the session behind a bad answer, then cs_get_transcript for the full turn list. |
| cs_get_transcriptA | The full turn list of one session: who said what, in order, with the topic and tool attributed to each turn where the transcript records them. Read-only. |
| cs_summarize_transcriptsA | Aggregate over recent sessions: how they ended, the escalation rate, average turns, how many never matched a topic, the topics and tools that actually fire, and the questions behind the sessions that went badly. Read-only. This is the input for deciding what to fix next, and for cs_create_test_set_csv fromTranscripts. |
| cs_test_set_from_transcriptsA | Write the portal's import CSV from questions people actually asked, most frequent first, instead of guessing from the workspace. onlyFailed (default true) keeps the sessions that escalated, went unanswered or were abandoned, which are the ones worth turning into regression cases. Read-only apart from writing the file; import it once in the portal, then cs_run_evaluation automates the runs. |
| cs_chatA | Send one utterance to the published agent and return its replies (and raw activities). Use conversationId to continue. If the agent answers with a sign-in card, signInUrl is returned. |
| cs_run_conversation_testsA | Run a YAML test file (tests: name, utterance, expect, continueConversation) against the published agent through cs_chat and report pass/fail. expect asserts on wording (contains, containsAny, notContains, regex, minLength, noSignIn) and on what the agent did (usedTool, notUsedTool, usedTopic, notUsedTopic, citedKnowledge), so a test can tell a real tool call from an answer that merely sounds right. Every result reports the observed topic, tool and citations whether or not it asserted on them. The CLI-native complement to portal evaluations. Pass writeExample to create a starter file. |
| cs_create_solutionA | Create a new unmanaged solution (and its publisher if missing) in an environment by packing an empty solution manifest and importing it with pac. Use it to prepare the container before cs_create_agent with solutionName. Requires confirm: true. |
| cs_generate_instructionsA | Write the agent's instructions for it - the system prompt that decides how it answers. Builds a brief from purpose, audience, tone, capabilities, boundaries and examples, send it to an AI Builder prompt or model (pac copilot model predict; pick one with cs_list_prompts), and return the generated instructions. With apply: true the text is written into the agent's instructions (agent.mcs.yml, or settings.mcs.yml for cli-copilot). Pass currentInstructions/changeRequest (or refine: true to read the workspace) to revise existing instructions instead. |
| cs_list_solutionsB | pac solution list: solutions in an environment with version and managed flag. Needs a pac auth profile. |
| cs_list_connectionsA | pac connection list: connections that exist in an environment (id, connector, owner). Use the ids to map connection references in a deployment settings file before cs_deploy_solution. |
| cs_describe_solutionA | Export a solution (unmanaged, async) and unpack it locally, then inventory everything inside: agents (with harness and component counts), bot components by kind, cloud flows, connection references, environment variables, custom connectors, other component folders. Read-only for the environment. |
| cs_pull_solutionA | Export the solution (unmanaged and optionally managed), unpack it to /src, write /solution.json, generate deployment-settings.json (connection references + environment variables to map), and clone every agent in the solution into /agents/ as a sync-connected workspace. This is the input for cs_deploy_solution. |
| cs_create_deployment_settingsA | pac solution create-settings: the JSON that maps every connection reference (to a connection id in the target environment) and environment variable (to a target value). Pass connectionReferences / environmentVariables to fill values; the result lists what is still unmapped. |
| cs_pack_solutionB | pac solution pack: zip an unpacked source folder (after local edits) so it can be deployed. |
| cs_deploy_solutionA | pac solution import into the target environment using the deployment settings file, then publish every Copilot Studio agent from the solution. Source: a zip, or a solutionDir from cs_pull_solution (managed zip preferred when present unless unmanaged: true), or an unpacked srcFolder (packed first). Blocks when connection references or environment variables are unmapped unless allowUnmapped. Requires confirm: true. |
| cs_job_statusA | The state of a job started with background: true - running, succeeded or failed - with the phases it has reached and, once finished, the result the tool would have returned. Read-only. Jobs live in the server process, so a restart loses them; pass recordFile to read the copy the job wrote to disk instead. |
| cs_snapshot_environmentA | Capture one environment into a folder for comparison or history: solution version, every agent cloned with pac copilot clone (agents/), and, when signed in, flows, connection references, environment variables and publish state. Read-only for the environment. |
| cs_compare_snapshotsA | Offline diff of two snapshot folders: solution version, per-agent YAML differences (noise such as ids, audit info and connection ids removed), flows, connection references, environment variables, unpublished changes. Writes /-vs-.md and .json. failOnDrift returns an error result when drift is found (for pipeline gates). |
| cs_compare_environmentsB | Snapshot every environment in an ordered chain (e.g. DEV, TEST, ACC, PROD) and compare each adjacent pair. Returns one report per pair plus the first stage where drift appears. Snapshots go to /, reports to /reports. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| new-agent | Create an agent in a solution and take it to a published, tested state. |
| add-knowledge | Add website, SharePoint, Graph connector or file knowledge to the current agent. |
| add-tool | Find a connector operation and add it as a tool, with its connection step. |
| write-instructions | Draft or refine the agent's instructions with AI Builder. |
| review-and-push | Run the review and validation, then push and publish with confirmation. |
| check-drift | See what makers changed in Copilot Studio since the last sync. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 142 tools
The 142 tools contain several overlapping clusters (e.g., multiple environment listers, auth status tools, flow definition/run tools, solution and snapshot tools), so an agent can still misselect despite extremely detailed descriptions. The descriptions often explicitly contrast siblings, but the sheer breadth and near-duplicate names keep ambiguity present.
Almost all tools follow the cs_ prefix with snake_case, and related operations are grouped predictably (cs_list_*, cs_admin_*, cs_create_*). A few names are noun-only or less verb-like (cs_status, cs_pac, cs_init), but there is no mixed convention such as camelCase versus snake_case.
142 tools is an extreme mismatch for the typical 3-15 range and even for a broad platform MCP. The server itself acknowledges the context burden by providing cs_set_tool_preset to hide most tools, which confirms the count is unwieldy.
The surface covers agent, flow, solution, environment, admin, evaluation, transcript, testing, drift, packaging, publishing and authentication lifecycles in substantial depth. Known portal-only gaps (connector authorization, some knowledge types, API test-set creation) and indirect component CRUD via cs_remove_component keep it from perfect completeness.