Copilot Studio MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Copilot Studio MCPclone the marketing agent from the live environment into my workspace"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Copilot Studio MCP
An MCP server that lets a coding agent (GitHub Copilot in VS Code, Claude Code, or any other MCP client) build, test, ship and look after Microsoft Copilot Studio agents from the editor.
An agent becomes a folder of YAML you can read, diff and commit. The server writes that folder the
way the Copilot Studio VS Code extension does, syncs it with the live agent through the official
Power Platform CLI (pac), and calls the Power Platform, Dataverse, BAP, Power Automate and
DirectLine APIs for what the CLI does not cover: evaluations, chat, cloud flows, portal drift,
transcripts. Nothing reaches a live environment without your approval, and when a choice is still
open the tool asks a question instead of failing.
What you can do with it
You want to | What happens | Read |
Stand up a new agent and get it live | create it inside a solution, generate instructions, add knowledge, topics and tools, review, validate, push, publish, talk to it | |
Change an agent that already exists | clone it to files, edit or remove components, review, merge what colleagues changed, push | |
Give the agent something to call | connector actions, MCP servers, cloud flows, AI Builder prompts, other agents, chosen from what the environment actually has | |
Know whether it works | chat with the published agent, repeatable conversation tests, evaluation runs with per-case results | |
Learn from real users | transcripts, session outcomes, escalation rate, a regression test set built from real questions | |
Not overwrite what a colleague did in the portal | see portal changes since your last sync, block a push that would collide, merge | |
Write a Power Automate flow without hand-writing Logic Apps JSON | compose a definition from steps, create the flow, bind its connections, switch it on, read its run history | |
Find out why a flow keeps failing | resolve the real error behind a failed connector action, diff the run against one that worked, and see where the failures concentrate | |
Move to test and production | pull the whole solution, map connections and variables, deploy 1:1, publish; or use a pipeline | |
Prove the stages match | snapshot each environment, compare, gate a pipeline on drift | |
Run the tenant | environments, security roles, DLP, tenant settings, backups to files, onboarding a team, the Microsoft 365 agent catalogue |
The complete tool list is in docs/tools.md and the diagrams in
docs/flows.md; both ship
inside the npm package under docs/. The reference sections at the end of this page cover the
agent settings the server can write,
authentication and permissions,
configuration, the hard limits and
how this differs from pac's own MCP server.
Related MCP server: copilot-studio-code
Status
Early release. What has actually been exercised:
Offline: 251 unit tests over the compiled output, plus a pack oracle that round-trips every authoring tool's YAML through
pac copilot initandpac copilot pack.Against a real tenant (2026-09-08, phases A to F of
docs/live-verification.md): the connector registry, thepac connection listlayout,pac copilot cloneand its sync metadata, drift detection and thecs_pushconflict refusal, and the evaluation path end to end including the portal's CSV import format and the metric status strings. A portal-made agent validates clean, socs_validateproduces no false positives on real content. That run also caught a real bug:pac copilot publishprints "Failed to publish" and exits 0, so a failed publish was being reported as a success. Fixed.Not yet verified live: the transcript tools,
cs_check_driftin quick mode,cs_chat, the DataverselistBotspath, moving a solution between environments, and every flow the flow builder produces (none has been imported into an environment yet).
docs/verify.md is the short list of what is still open, docs/STATUS.md the full record. Read
the dry run before confirming anything that writes.
Set up
Prerequisites
Node.js 20+.
.NET 10 SDK and the Power Platform CLI:
dotnet tool install --global Microsoft.PowerApps.CLI.Tool. If the SDK lives in your user profile, setDOTNET_ROOTto that folder; the server defaults it to~/.dotnetwhen that folder exists.A pac auth profile for the environment you work in, created once in a terminal:
pac auth create --environment <id or URL>. Everything that goes through pac (create, clone, pull, push, publish, solutions, administration) uses it, with Microsoft's own first-party app.For the API-based tools (environments, evaluations, chat, flows, drift, transcripts): an Entra sign-in through
cs_login, done from the session. By default no app registration is needed; Authentication and app registration says when you need one and which permissions it must carry.
Install and register
The server is on npm as copilot-studio-mcp, so the usual install is no install: point your MCP
client at npx, and the first start fetches the package.
VS Code, from a terminal or by hand in .vscode/mcp.json (workspace) or the user-level mcp.json:
code --add-mcp '{"name":"copilot-studio","command":"npx","args":["-y","copilot-studio-mcp"]}'{
"servers": {
"copilot-studio": {
"type": "stdio",
"command": "npx",
"args": ["-y", "copilot-studio-mcp"],
"env": { "CPS_WORKSPACE": "${workspaceFolder}" }
}
}
}Claude Code (user scope):
claude mcp add-json copilot-studio '{"type":"stdio","command":"npx","args":["-y","copilot-studio-mcp"]}' --scope usernpm install -g copilot-studio-mcp with "command": "copilot-studio-mcp" avoids the npx start-up
cost. The server is published to the MCP Registry as io.github.jgt87/copilot-studio-mcp, which is
what VS Code's MCP gallery (Extensions view, search @mcp) draws from through the GitHub MCP
Registry. To run from a clone instead, see Development.
Environment variables are optional and listed under Configuration.
The first session
cs_init. Reports pac and .NET, the pac profiles and which one is active, the MSAL sign-in, the write policy in force, the workspace it found and the next steps for it. It also returns a menu of tool presets; on a smaller model pick one (see Running on a smaller model).cs_loginwhen a cloud tool needs it. The call opens the browser from the server and returns within 15 seconds; if the sign-in has not finished by then it returnsstatus: pendingwith the URL so you can open it yourself, and the next cloud call (orcs_login_status) picks the token up. That is what makes sign-in work from clients that cap tool-call duration or run the server where no browser can be launched. Device code (mode: device_code) is the alternative where the tenant allows it; many block it by Conditional Access policy.cs_guide <topic>when you want the walkthrough for one job rather than inventing a sequence:getting-started,instructions,knowledge,tools,topics,evaluations,publish-and-test,drift,transcripts,solutions,administration,troubleshooting. Each names the tool per step, the portal steps that cannot be automated, and the next steps for your workspace. Six MCP prompts (new agent, add knowledge, add tool, write instructions, review and push, check drift) wrap the same walkthroughs in clients that show prompts as commands.
Approval before anything changes
The server never changes a live Copilot Studio environment on its own. Every tool that can
(cs_push, cs_publish, cs_run_evaluation, cs_import_solution, cs_deploy_solution,
cs_create_agent with an environment, the delete tools, the flow and admin tools that write, and
the environment-changing pac wrappers) returns a dry run describing what it would do, and does
nothing else, until it is called again with confirm: true. The calling agent is instructed, in the
MCP handshake, to show that dry run and pass confirm only after you agree; one approval covers one
call. Writing YAML, editing, reviewing and validating are local file operations and need no
approval; sending them to Copilot Studio does.
For a hard lock, set CPS_READ_ONLY=1 in the server's environment: the environment-changing tools
are then not registered at all, so no confirmation can reach the environment, while authoring,
validation, review and the read-only tools keep working. cs_init reports the mode and which tools
are withheld. test/policy.test.js fails if a tool that declares confirm is missing from that
list, so the two layers cannot drift apart.
Three more behaviours you will meet in every workflow:
A question instead of an error. When a call cannot proceed because something has not been decided (which connector, which operation, which agent), the tool returns
needsInput: truewith what it needs, why, the real choices when the server can list them, and the tool that lists more. Nothing is written; the calling agent asks you and calls again. This works in every client, including those without MCP elicitation.Long calls run in the background. MCP clients cap a tool call at about a minute. Tools that can run longer (
cs_pull_solution,cs_create_auth_profile, environment provisioning, every pac wrapper) acceptbackground: true, return ajobIdat once, andcs_job_statusreports the phases and the result from an on-disk record that survives a server restart. A tool decides whether it may change anything before it starts a job, so the confirm contract is unaffected.Writes are never retried. A read that fails on a transport error or a 429/5xx is retried with backoff and honours
Retry-After; a publish or an import that timed out may already have been applied, so it is reported, not repeated.
Two accounts: maker and admin
Making agents and administering the tenant are usually different accounts. pac keeps one active authentication profile per machine, so create one profile per account and let the server switch:
pac auth create --name maker --environment <environment id or url>
pac auth create --name admin --environment <environment id or url>Or from the session: cs_create_auth_profile with name, environment and background: true,
because pac opens its own browser and waits for the sign-in (cs_job_status reports when the
profile exists). cs_list_auth_profiles shows the profiles and which is active.
Core sync and solution tools use CPS_PAC_PROFILE; admin commands and tenant backup use
CPS_ADMIN_PROFILE; every pac wrapper and cs_pac also accept an explicit profile. When the
server selects a profile it restores the previous one afterwards, and every pac call in the process
shares one queue, so multi-step operations (bootstrap, solution pull and deploy, snapshots) hold
the profile for the whole run. Other server instances and terminal pac commands are outside that
coordination. The MSAL sign-in used by the API-based tools is separate again and independent of pac.
Build a new agent
From an empty folder to a published agent you can talk to. Each step is one tool call; the steps that change the environment show a dry run first.
Pick the environment.
cs_list_environments(needscs_login), or take the environment id from the Copilot Studio URL.Pick or create the solution.
cs_list_solutionsshows what exists; an existing solution works as long as it is unmanaged and you use its publisher prefix. To start a solution for your agents:cs_create_solution uniqueName=contoso_Agents publisherPrefix=contoso confirm=true.Create the agent inside it.
cs_create_agent name="Contoso Support" publisherPrefix=contoso projectDir=./contoso-support environment=<id> solutionName=contoso_Agents confirm=true(addcreateSolution=trueto fold step 2 in). The server scaffolds locally withpac copilot init, packs with the solution name, imports, then clones the live agent back soprojectDiris a sync-connected workspace with the default system topics. Withoutenvironmentyou get a local scaffold only, which can pack settings, agent and topics but not knowledge, tools or flows.Say what the agent is for.
cs_generate_instructions purpose="Answer IT questions and create ServiceNow tickets" audience="Employees" tone="Friendly, brief" boundaries=["never reset passwords"] modelName="Agent instructions"drafts the instructions with an AI Builder prompt (cs_list_promptsshows the prompts in the environment; create a "write agent instructions" prompt once in AI Builder if you have none). Review the draft, call again withapply=trueto write it intoagent.mcs.yml; laterrefine=truewith achangeRequestrevises what is there. Or write them yourself withcs_update_agent, which also sets response instructions and mode, conversation history, capabilities, moderation, model and conversation starters (the full map).Give it something to work with.
cs_add_knowledge_sourcefor a public website, SharePoint, a Graph connector or uploaded files;cs_add_topicfor deterministic conversations built from trigger phrases plus message, question, condition, set-variable, redirect, HTTP, flow, generative answers (optionally scoped to named knowledge sources), adaptive card, transfer and end nodes;cs_add_toolfor anything the agent should call (the tools workflow).cs_add_triggerandcs_add_variablecover event triggers and global variables.Review and validate.
cs_review_agentis a rules-based read of the whole workspace with a 10-point score: missing escalation or fallback, weak tool descriptions, overlapping trigger phrases, private knowledge with no authentication, secrets in files. Each finding names the rule and the fix.cs_validatethen checks every file against the authoring schema (744 definitions) and across files: connection references that nothing binds, catalog operations that do not exist, redirects to topics that are not there.Push.
cs_push confirm=trueis the portal's Save: the draft agent now shows your topics, knowledge and tools. The dry run runs validation and the quick drift check first, and the push is refused when a colleague changed the same component in the portal since your last pull. Tools with a connection reference need one portal step: open the tool under the agent's Tools, Connect, thencs_pullto bring the binding down.Publish and talk to it.
cs_publish confirm=true, thencs_chat utterance="my laptop is slow". The testing workflow turns that into repeatable checks.
flowchart TD
A["cs_init"] --> B["cs_list_solutions<br/>pick one, or cs_create_solution"]
B --> C["cs_create_agent<br/>environment + solutionName + confirm"]
C --> D["cs_generate_instructions<br/>AI Builder prompt, then apply"]
D --> E["cs_add_topic / cs_add_knowledge_source / cs_add_tool<br/>(cs_list_connectors, cs_describe_connector)"]
E --> R["cs_review_agent"]
R --> H["cs_validate"]
H -- errors --> E
H -- clean --> I["cs_push confirm"]
I --> J{"tool needs a connection?"}
J -- yes --> J1["portal: authorise once"] --> J2["cs_pull"] --> K
J -- no --> K["cs_publish confirm"]
K --> L["cs_chat"]GitHub Copilot harness agents (cs_create_agent with authoringMode: cli-copilot) are a smaller
surface: init, pack, import, instructions and chat. Topics and evaluations are standard-harness
features.
Work on an existing agent
Most agents already exist, often made in the portal. The loop is clone, change, review, merge, push.
Clone it.
cs_list_agents(through pac or Dataverse), thencs_clone_agent bot=<id or schema name> outputDir=./support-agent. The result is a sync-connected workspace withagent.mcs.yml,settings.mcs.yml,topics/,knowledge/,actions/,trigger/,variables/,workflows/and the connection references.cs_describe_workspaceinventories it and ends with next steps.Change it. Components are found by name, file stem or path.
cs_edit_topicchanges trigger phrases, priority and nodes (by position or id);cs_edit_toolchanges descriptions, inputs and the connection;cs_edit_knowledgechanges a site or a trigger condition;cs_remove_componentdeletes a topic, knowledge source, tool, trigger or variable and prunes the connection reference nothing else uses, noting any redirect left dangling.cs_update_agentandcs_update_settingscover the agent's own settings. Adding works as in the new-agent flow. Every edit keeps the file header the extension expects.Review and merge.
cs_review_agent, thencs_pullto bring down what colleagues changed in the portal (pac's three-way merge), thencs_validate.Push.
cs_push confirm=true. If a portal change and a local edit touch the same component the push is blocked;cs_pullresolves it,force: trueoverrides it.Commit. Keep the workspace in git and commit after every pull (the tool result reminds you). Portal drift then shows up as a diff you can review: accepting it is a commit, rejecting it is a push of the local version.
Around that loop: cs_delete_agent and cs_delete_solution remove things from the environment
(confirm); cs_extract_agent_template and cs_create_agent_from_template turn one agent into a
template for more; cs_extract_translations and cs_merge_translations do the localisation round
trip (.resx or .json, with whatIf); cs_quarantine_agent takes an agent out of service and back.
Give the agent tools
Copilot Studio agents can call any connector in the environment (more than a thousand Microsoft-published ones plus custom connectors), MCP servers exposed through connectors, cloud flows, AI Builder prompts, other agents, and a few rarer kinds. The server knows the kinds from the YAML schema and the instances from the environment, which is the only source that knows what exists there.
Find the connector.
cs_list_connectors search=ServiceNowlists the environment's connector registry, the same list the portal's Add a tool shows, with MCP servers flagged. Without a sign-in it falls back to an offline seed generated from the public connector reference (display name toshared_id, no operations): a starting point, not proof the connector is enabled for you.Find the operation.
cs_describe_connector connector=shared_service-now operation=incidentturns the connector's OpenAPI definition into operations withoperationId, required and optional parameters and response fields;x-ms-agentic-protocol: mcp-streamable-1.0marks MCP endpoints. Definitions are cached under.cs-catalog/<environment>/so later calls are offline.Add the tool.
cs_add_tooltakes a typed spec for a connector action, an MCP server, a cloud flow, an AI Builder prompt (cs_list_promptsshows them), a connected agent or a child agent, and arawtype for the rest (AI plugin, Bot Framework skill, client action, computer-use agent). With the definition cached it checks theoperationId, fills the automatic inputs from the operation's required parameters, and writes the YAML underactions/plus a connection-reference stub. If you have not named a connector or operation yet the call comes back as a question with the ranked candidates.Connect it, once, in the portal. A connection is an authorised link that only the portal can create (the one exception is a service-principal Dataverse connection, which
cs_create_connectionmakes). Aftercs_push, open the tool under the agent's Tools, Connect, thencs_pull.cs_validatewarns about tool files whose operation is not in the cached definition, andcs_review_agentflags tools whose description will not let the orchestrator pick them.
A unit test compares the schema's list of tool kinds with the server's table, so a schema update
that introduces a new kind fails the build until the kind is classified. Flows as tools are either
a scaffold (cs_add_flow, experimental) or a real flow built with the
flow builder and referenced from the agent.
Publish and test
Publish.
cs_publish confirm=trueis the Publish button, throughpac copilot publishor the DataversePvaPublishaction polled untilpublishedonmoves.Chat.
cs_chat utterance="..."sends one utterance to the published agent and returns the reply; pass theconversationIdback for the next turn. Withtransport: autothe server reads the agent's authentication mode: no-auth and manual-auth agents go through DirectLine (the token endpoint of a published agent is anonymous, so no app is needed); an agent with integrated Entra authentication goes through the Copilot Studio client SDK and needs your own app id with theCopilotStudio.Copilots.Invokescope (clientId, orCPS_CLIENT_ID).Make it repeatable.
cs_run_conversation_testsruns a YAML file of utterances and expectations through the same chat path and reports what failed. Expectations cover the wording and what the agent did:usedTool,notUsedTool,usedTopic,notUsedTopicandcitedKnowledgeread the topic, tool and knowledge attribution from the activities, so a test can tell a real tool call from an answer that merely reads correctly. Every result, and everycs_chatreply, reports the observed topic, tool and citations; an expectation that cannot be judged (no attribution in the activities) says so rather than failing the agent. The attribution key names come from documentation and are unverified live;docs/test-verification.mdis the runbook that settles them.Evaluate. The portal's Evaluation feature runs a test set of questions against the agent and scores each answer. The one thing its API cannot do is create the test set, so the loop is:
cs_create_test_set_csv suggestFromWorkspace=truewrites the CSV in the portal's import format (max 100 cases), seeded from your topics and knowledge.Import it once in the portal's Evaluation tab.
cs_list_test_sets, thencs_run_evaluation confirm=true wait=true, thencs_get_evaluation_runfor per-case results with pass and fail buckets;cs_list_evaluation_runsfor the history.
flowchart TD
A["cs_create_test_set_csv"] --> B["portal: Evaluation > Import CSV"]
B --> C["cs_list_test_sets"] --> D["cs_run_evaluation confirm wait"]
D --> E["cs_get_evaluation_run"] --> F{"failures?"}
F -- yes --> G["fix topics / instructions / knowledge"] --> H["cs_push confirm"] --> D
F -- no --> I["cs_publish confirm"]Learn from production conversations
Once people use the agent, the transcripts are the best source of test cases and of the questions
it cannot answer. Copilot Studio stores every session in the Dataverse conversationtranscript
table; the server reads it and never writes.
cs_list_transcriptslists sessions in a window: when, how many turns, the first question, the topics and tools that fired, how it ended.cs_get_transcriptreturns one session's full turn list with the topic and tool attributed to each turn.cs_summarize_transcriptsaggregates a window: outcomes, escalation rate, sessions that matched no topic, the top topics and tools, and the questions behind the failures.cs_test_set_from_transcriptsbuilds the Evaluation import CSV from questions people actually asked, failures first, so the next evaluation run covers what went wrong.
Copilot Studio does not report whether a conversation succeeded. The outcome is this server's
reading of the transcript (an escalation, the agent saying it could not answer, a user turn with no
reply); resolved means nothing marked the session as failed, not that the user was satisfied.
Every result repeats that caveat, and cs_guide transcripts walks the loop from a summary to one
transcript to a regression test set. Transcripts hold what users said to the agent, so the
signed-in user needs a role that grants read on that table and results are customer data.
Unverified against a live tenant.
Keep the workspace and the portal in sync
Makers can keep editing an agent in Copilot Studio after it was cloned; nothing stops them and the
platform sends no notification. Every portal edit lands in Dataverse rows: the bot row for
settings and instructions, and one botcomponent row per topic, knowledge source, tool, trigger
and variable, each with a modified-on stamp and the user who changed it. The server uses those rows
to see drift without a re-scan, and a clone to confirm it when the details matter.
Sync stamp.
cs_clone_agent,cs_pull,cs_pushandcs_create_agent(withenvironment) write.mcs/cs-sync.json: a fingerprint of every workspace file and, when a Dataverse sign-in is cached, the modified-on stamp of every component.cs_describe_workspaceshows the last sync.Quick check.
cs_check_drift(defaultmode: quick) reads the bot row and its component rows and compares them with the stamp: which components were modified, added or removed in the portal, by whom and when, whether the agent settings changed, and whether the live agent has unpublished changes. Each component is mapped to its workspace file; when that file also changed locally the entry is a conflict. Seconds, no pac; needscs_login.Full check.
cs_check_drift mode=fullrunspac copilot cloneinto a temporary folder and classifies every file three ways against the stamp:local-modified,remote-modified,both-modified(conflict), added or deleted on either side, with unified diffs. Use it when the quick check reports drift and you want the exact content, or when there is no Dataverse sign-in (only the pac profile is needed). Uploaded knowledge files are covered here, not in the quick check.Push preflight. The
cs_pushdry run includes the quick check, so the caller sees "three components changed in Copilot Studio since your last pull" before confirming. Withconfirm, the push is blocked when a portal change and a local edit touch the same component;cs_pull(pac's three-way merge) resolves it andforce: trueoverrides it.Git as the ledger. Commit after every
cs_pull;cs_check_driftreports whether the workspace is in a repository and how many of its files are uncommitted.
Limits. The quick check does not see connections (a maker connecting a tool is expected, and
connection ids are ignored in every comparison), uploaded knowledge files, channel configuration or
the security group. When the stamp has no per-component baseline (no Dataverse sign-in at sync
time) it falls back to the sync time with a two-minute margin, so edits made right after a sync
count as the sync itself. The component query has not been verified against a live environment
yet; see docs/STATUS.md.
Build cloud flows
Flows are built from a step spec, the way topics are, so you do not have to write Logic Apps JSON
by hand. cs_build_flow_definition composes the definition locally and returns it together with
the connection references it needs; cs_create_flow takes the same spec and creates the flow in an
environment or a solution; cs_update_flow takes it and replaces the definition of an existing
unmanaged flow, keeping its connection references.
A spec is a trigger plus steps that run in order:
Trigger | For |
| the flow a Copilot Studio agent calls as a tool, with typed inputs and a response |
| started by a person or by an HTTP request |
| a schedule |
| a connector event, such as a Dataverse row being created |
| any other trigger, written verbatim |
Step | Emits |
| a connector operation ( |
| an HTTP call |
| branching, looping and grouping, with their own nested steps |
| variables and intermediate values |
| end the run with a status |
| what an agent-callable or HTTP flow answers with (added automatically when you give |
| any other action, written verbatim |
The builder chains runAfter so each step waits for the previous one, normalises action names the
way Power Automate does, and collects one connection reference per connector used, reusing it
across steps. Expressions are Logic Apps expressions, not Power Fx: @{triggerBody()?['orderId']},
@body('List_rows')?['value']. Connector ids and operation ids come from cs_list_connectors and
cs_describe_connector; an operation's parameters are exactly the parameters of a connector
step.
Around the builder: cs_list_flows shows the flows in the environment with state, owner and
connection references; cs_get_flow returns one with its full definition; cs_delete_flow removes
one for good; cs_list_flow_runs, cs_get_flow_run and cs_run_flow read the run history and
start a manual run through the Power Automate service (a separate sign-in, cs_login scope='flow';
the signed-in user must own or co-own the flow).
Bind the connections. A connection reference names a connector; a connection is one person's
authorised account for it, and until the two are joined the flow cannot run. cs_bind_flow_connection
joins them: with one reference and one usable connection it needs nothing but the flow id, and it
asks which when there is a choice. It writes whichever of the two shapes the flow uses - a flow
built outside a solution names its connection directly, while one that arrived in a solution points
at a connectionreference row - and activate: true turns the flow on in the same call.
cs_set_flow_state turns one on by itself once it is bound.
Work out why a run failed. The run list says a run failed and nothing more.
Tool | Answers |
| Why did this run fail? A failed connector action carries no error message of its own - the message is in the action's outputs, behind a link that expires after a few days - so this fetches it, says whether the fault is the connector, an expression or a timeout, and shows the inputs the action was called with next to the outputs of the actions that ran just before it. |
| It worked yesterday. Diffs the failed run against the most recent successful one and names the action where they part company. With |
| It fails sometimes. Failure rate, duration median and 90th percentile, and which actions the failures land on. One action responsible for most of them is a broken step; failures spread across many point at the connection, throttling or the system being called. |
A trigger that failed means the flow never ran at all, so the fault is in the trigger's connection or its parameters rather than the logic. Run detail ages out: inputs and outputs are kept for a limited time, so diagnose a failure while it is recent.
Two things the builder cannot do for you. The connections themselves must exist in the target environment before anything can be bound to them, which is why a new flow is created switched off. And the definitions follow the Logic Apps schema and exported solutions rather than a verified round trip, so import one and open it in Power Automate before trusting the shape.
Ship a solution to another environment
Per-agent sync stays bound to the environment the agent came from. Moving to test or production is a solution export and import, and the server makes that a pull, a settings file and a deploy.
See what you are moving.
cs_list_solutions, thencs_describe_solutionexports, unpacks and inventories: agents, bot components, flows, connection references, environment variables, custom connectors.Pull it.
cs_pull_solutionexports the solution unmanaged and managed, unpacks it tosrc/, writessolution.json(the manifest the deploy reads), createsdeployment-settings.jsonand clones every agent intoagents/. A full pull runs for minutes, so passbackground: trueand follow it withcs_job_status; the outcome also lands inpull-job.jsonin the target directory.Map the target.
cs_list_connectionson the target environment shows the connections that exist there;cs_create_deployment_settingsmaps each connection reference to one of them, sets the environment variable values for the target and, per agent, the Entra security group that may use it.Deploy.
cs_deploy_solution confirm=trueimports into the target with the settings file and runspac copilot publishon every agent (publishAgents, default on). It refuses to import while any connection reference is unmapped unless you passallowUnmapped: true. If you editedsrc/by hand,cs_pack_solutionfirst.
Quality gates and alternatives on the same path: cs_check_solution runs Solution Checker before a
deploy; cs_set_solution_version, cs_solution_online_version and cs_upgrade_solution handle
release numbering and staged upgrades; cs_publish_customizations publishes everything in an
environment; cs_list_pipelines and cs_deploy_pipeline use Power Platform pipelines instead of
a direct import; cs_init_solution_project, cs_clone_solution, cs_sync_solution,
cs_add_solution_reference and cs_add_solution_license keep a source-controlled solution
project (.cdsproj); cs_add_solution_component adds an existing component to a solution.
What no tooling carries across
Plan for these before calling the copy "1:1":
Connections are not part of a solution. A solution carries connection references; the connections themselves (the authorised links to SharePoint, Outlook, Dataverse, MCP servers, ...) must already exist in the target environment, created and consented by a user there.
cs_create_connectionis the one exception and only covers service-principal Dataverse connections. WithallowUnmapped: truethe tools stay unbound until someone binds them in the target portal.Cloud flows land switched off when their connection references cannot be resolved. Bind the connections, then
cs_list_flowsshows which are not activated andcs_set_flow_stateswitches each on; the portal is not needed for that step.Environment variables need target values. The settings file lists every variable; leave a value empty and the target inherits the default from the solution, which is usually a dev value.
Who can use the agent is per environment. The settings file has a
CopilotAgentssection with anAadGroupIdper agent (verified with pac 2.11.2). Map it to the target's Entra group (copilotAgentsincs_create_deployment_settings) or set access in the target portal after import; an all-zero id means no group is set.Some agent content lives outside the solution. Uploaded knowledge files, Dataverse tables used as knowledge, SharePoint permissions, and channel configuration (Teams, web, Microsoft 365 Copilot) are environment-specific. After import, check knowledge sources and re-publish to channels in the target portal.
Managed vs unmanaged.
cs_pull_solutionexports both. Deploy managed for downstream environments and keep unmanaged only for development; a managed import cannot be edited in place in the target.Per-agent sync does not cross environments. Workspaces from
cs_clone_agentorcs_pull_solutionpush back to their source environment only. Edit theagents/<name>workspace, push to the source, then pull and deploy the solution again.
Compare environments across DTAP
When the same solution is promoted through development, test, acceptance and production, the question is whether each stage still holds what the previous one holds. The platform has no cross-environment diff, but every input is reachable, so the server captures each environment into a snapshot folder and compares snapshots offline.
Snapshot each stage with
cs_snapshot_environment(or all at once withcs_compare_environments, which takes an ordered chain and compares each adjacent pair). A snapshot folder contains:snapshots/TEST/ snapshot.json label, environment, time, solution version and managed flag, agents with publish state, flows, connection references, environment variables, notes agents/<Agent name>/ the agent as YAML, from pac copilot cloneAgents are cloned rather than exported as a solution, because a managed solution cannot be exported from test or production. Flows, connection references, environment variables and publish state come from Dataverse and are included when you are signed in with
cs_login; otherwise the snapshot notes that they were skipped.Compare adjacent stages with
cs_compare_snapshots(DEV vs TEST, TEST vs ACC, ACC vs PROD). Each comparison writes<A>-vs-<B>.mdand.json.Read the verdict. A report starts with
DRIFTorno drift, then lists the drift, the expected differences, and tables per layer with unified diffs for changed agent files.Act on it. Drift in agent YAML means the later stage is behind or was edited in place: promote again with the solution flow above. Unbound connection references, missing flows, or variables without a value are deployment-settings problems: fix the settings file and redeploy.
Keep history. Snapshot folders are plain files; commit them (without
.mcs/state) to get a timeline per stage.
What counts as drift, and what is an expected difference between stages:
Layer | Drift | Expected difference (reported, not drift) |
Solution | version differs, missing in a stage | managed in later stages, unmanaged in development |
Agent YAML (topics, instructions, knowledge, tools, triggers, variables) | any changed, added or removed file after normalisation | ids, audit info, version fields, connection ids inside |
Publish state | modified after last publish in any stage (unpublished changes) | |
Flows | missing in a stage, on/off state differs | |
Connection references | missing, connector differs, unbound in a stage | bound to a different connection per stage |
Environment variables | missing, no value in a stage | different values per stage (drift only with |
Authentication mode | differs between stages |
Pipeline gate. cs_compare_snapshots and cs_compare_environments accept failOnDrift; the
tool result is then an error, which a scripted MCP client or a pipeline step can turn into a failed
job. A typical gate before promoting TEST to ACC:
cs_snapshot_environment label=TEST environment=<test id> dir=snapshots/TEST solution=<name>
cs_snapshot_environment label=ACC environment=<acc id> dir=snapshots/ACC solution=<name>
cs_compare_snapshots a=snapshots/TEST b=snapshots/ACC failOnDrift=trueCaveats: all stages must be reachable from the active pac auth profile (for chains that span
tenants, run pac auth select between stages and snapshot them one by one); whether
pac copilot clone succeeds on a managed agent is unverified live (the fallback is reading the same
component definitions through the Dataverse Web API); uploaded knowledge files and channel
configuration are listed by name and size only; without a Dataverse sign-in the comparison covers
solution version and agent YAML only, and the report says so.
Administer the tenant
Administration runs as the admin account (two accounts): pass
profile, or set CPS_ADMIN_PROFILE once. Every change goes through the same dry run and
confirm; reset, delete, copy and restore destroy or overwrite whole environments, and the dry run
says what will be lost.
Back the configuration up to files.
cs_backup_tenantwrites the whole tenant configuration to a folder: tenant settings, environments, DLP policies, environment groups, service principals, registered applications, templates, and per environment its details, solutions, agents, connections, security roles and platform backups. Raw output is kept next to parsed rows, and a capture that fails is isolated so the rest of the backup still lands.Read and change the tenant. Environments and their operations in progress, tenant settings (read to a JSON file, change one), DLP policies (which connectors may be combined), environment groups, security roles, service principals and registered applications, managed-environment governance, administration mode and backup retention, and the environment lifecycle: create, copy, back up, restore, reset, delete. Each is one
cs_admin_*tool (list).Onboard a team into a new environment.
cs_admin_create_environment(slow; pair it withbackground: trueandcs_job_status), thencs_admin_assign_userswith a CSV:UPN,Security Roles,Business Unit alice@contoso.com,"System Customizer,Basic User",Sales bob@contoso.com,Environment Maker,pac takes one user and one role per call, so that roster is five calls; the tool expands it, shows you every user-and-role pair in the dry run, and runs them under one approval. Rows are independent, so a mistyped UPN is reported and the rest still run. Prefer
cs_admin_assign_groupwhen the roster is really a group: binding an Entra group to a role is one call however many people are in it, and new joiners inherit access. Role names are per-environment (cs_admin_list_security_rolesagainst the new one), and a user who has not been provisioned into the environment yet cannot hold a role there.The Microsoft 365 agent catalogue.
cs_list_agentsreads one environment'sbotstable and stops at the Power Platform boundary. The catalogue (Microsoft Graph, a separate sign-in withcs_login scope='graph') is tenant-wide and answers the question that followscs_publish: did the agent actually reach anyone?cs_list_org_agentsreports who each agent is available to, where it is deployed and whether it is blocked, filtered by platform, host, element type or last-modified date;cs_get_org_agentreturns one entry in full;cs_block_org_agentblocks an agent for everyone in the tenant or lifts the block, andcs_reassign_org_agenthands it to a new owner when the old one leaves (bothconfirm). Needs a Microsoft Agent 365 licence, is global-cloud only, is unverified against a live tenant, and block and reassign exist only on Graphbeta.
Every pac command without a tool of its own is reachable through cs_pac: read-only commands run
immediately, the others return a dry run and need confirm. The pac groups outside Copilot Studio
work (application, canvas, catalog, code, data, managed-identity, model, modelbuilder, package,
pages, pcf, plugin, power-fx, telemetry, test, tool) are deliberately left there.
Agent settings this server can write
An agent's settings live in two files, and the server reads, validates and pushes both. The table
maps what the portal shows to the field and the tool argument that writes it. Everything here is a
local file change; cs_push applies it, and cs_publish makes it live.
agent.mcs.yml (the agent definition), written by cs_update_agent:
Portal | Field | Argument |
Instructions |
|
|
Responses: how answers are worded and formatted |
|
|
Responses: response mode |
|
|
Conversation history the agent sees |
|
|
Capabilities: web browsing, code interpreter, image generation, Teams / SharePoint / email / meeting / people search |
|
|
General knowledge: may the model answer beyond your knowledge sources |
|
|
Content moderation |
|
|
File analysis, semantic search |
|
|
Model |
|
|
Conversation starters |
|
|
Display name |
|
|
Values are checked against the authoring schema, so a response mode or moderation level outside the allowed set is refused rather than written.
settings.mcs.yml (how the agent runs), written by cs_update_settings with dot paths, for
example {"configuration.settings.GenerativeActionsEnabled": true}:
Portal | Path |
Generative orchestration on or off |
|
Authentication |
|
Language |
|
Agent can be called by other agents |
|
Analytics, telephony, voice, network |
|
cs_update_settings refuses to change authoringModel, recognizer.kind and template,
because the tooling depends on them. cs_lookup_schema shows any other field the schema allows,
and cs_validate checks whatever you write by hand.
One caveat: these field names come from the authoring schema, not from a round trip through a live
agent, so which portal control maps to which field is inference. Set one in the portal, run
cs_clone_agent and compare if you need certainty.
Authentication and app registration
The server signs users in with an MSAL public client (interactive browser or device code). It
never uses client secrets, so every permission it needs is a delegated permission acting as the
signed-in user. Application permissions are listed below only where Microsoft offers them, for
people who build a headless pipeline on top of the same APIs. How cs_login behaves inside an MCP
client is described under The first session.
Do you need your own app registration?
Situation | App registration needed? |
| No. |
Cloud tools with the default client id ( | No. The server uses the first-party VS Code client id |
Same tools, but your tenant blocks that id (app consent policy, conditional access, "user assignment required") | Yes. Create the registration below and set |
| Yes, always. The first-party id does not carry |
Headless CI (service principal, no user) | Not supported by this server today (public client only). For pipelines use |
Permissions for your own app registration (Entra ID > App registrations > API permissions > "APIs my organization uses"):
Used by | API to pick in Entra | Permission | Delegated or application | Notes |
| Power Platform API (app id |
| Delegated is what this server uses. An application permission of the same name exists for confidential clients (Microsoft 365 Agents SDK); not used here. | Admin consent is normally required. Redirect URI |
| Power Platform API | Token scope | Delegated only. Power Platform API has no application permissions; service principals get access through RBAC roles instead. | Verified with the first-party id by Microsoft's own tooling. Not yet verified with a custom registration; if calls return 403, the signed-in user needs maker access to the agent. |
| PowerApps Service (app id |
| Delegated. | Calls the BAP environments API ( |
| Dynamics CRM (Dataverse, app id |
| Delegated. There is no application permission; server-to-server access to Dataverse means an application user with a security role in each environment. | The user still needs a Dataverse security role that can read and publish bots (System Customizer or a Copilot Studio maker role). The drift checks only read the |
| Microsoft Flow (Power Automate service, app id |
| Delegated. | A separate resource from Dataverse and the Power Platform API, so it needs its own consent: sign in with |
| Microsoft Graph (app id |
| Delegated is what this server uses; an application permission of the same name exists for reads. | The Microsoft 365 agent catalogue, a different resource again: sign in with |
| Microsoft Graph |
| Delegated only. Microsoft offers no application permission for these two actions. | Same licence and cloud limits as above; sign in with |
| none | none | not applicable | The DirectLine token endpoint of a published agent is anonymous. |
| none | none | not applicable | Microsoft's own app; |
Steps for your own registration:
Entra ID > App registrations > New registration. Single tenant. Under Authentication add the platform Mobile and desktop applications with redirect URI
http://localhost(the loopback MSAL uses forcs_logininteractive). Set Allow public client flows to Yes if you plan to usecs_loginwithmode: device_code.Add the permissions from the table. If Power Platform API does not appear when you search by name or by the id above, its service principal is missing from your tenant; create it with
az ad sp create --id 8578e004-a5c6-46e7-913e-12f58912df43(orNew-MgServicePrincipal -AppId 8578e004-a5c6-46e7-913e-12f58912df43) and search again.Grant admin consent for the tenant, or let each user consent interactively on first sign-in.
Put the ids in the MCP server environment:
CPS_CLIENT_ID=<application (client) id>andCPS_TENANT_ID=<directory (tenant) id>.cs_chatalso acceptsclientIdper call.
Configuration
All environment variables are optional:
Variable | What it does |
| the agent workspace to start in (VS Code: |
| the Entra tenant and app registration for |
| defaults for cloud tools when the workspace carries no sync metadata; explicit arguments win, then workspace metadata, then these, then a BAP lookup |
| the pac auth profile for maker commands and for admin commands (two accounts) |
| withhold every environment-changing tool (approval) |
| trim the tool list: presets and comma-separated names with |
| override the token scopes for the Power Automate service and Microsoft Graph |
| token cache location, the pac executable, the .NET root |
Running on a smaller model
The full tool list is 142 tools, about 50k tokens of schema before any work starts. A frontier
model copes; a smaller one spends most of its context on the menu and chooses worse from it. Set
CPS_TOOLS to a preset in the server's environment, or let the user choose during the session:
cs_init returns a toolPresets block with the question, the option table and a live count per
preset, and cs_set_tool_preset applies the answer.
Preset | Tools | When to use it |
| 142 | everything; a large model, or you do not know yet what the task needs |
| 34 | build or change one agent and get it live: the usual choice |
| 25 | write and check files only; no sign-in, nothing reaches an environment |
| 44 | tenant administration as the admin account, plus |
| 25 | pull, deploy and compare solutions, and bind the flows an import left switched off |
Nothing is removed: a preset only changes which tools are offered, and cs_init, cs_guide,
cs_set_tool_preset and cs_job_status survive every preset so a session can always change its
mind. cs_pac is in core, admin and solutions so any pac command a preset hides is still
reachable, and cs_init says that a missing tool is hidden rather than absent. Presets compose
with each other and with globs: CPS_TOOLS=core,cs_admin_*, or
CPS_TOOLS_EXCLUDE=cs_*_pipeline,cs_env_*,cs_*_auth_profile. The SDK sends
notifications/tools/list_changed on a switch, so a client that honours it sees the shorter list
at once; one that caches the list needs a restart. Runtime switching can only narrow what was
registered at startup, so leave CPS_TOOLS unset if you want every preset available to choose
from.
Checking that your model picks the right tool
A tool list this long is a routing problem: the descriptions decide whether "why did my flow fail
last night?" reaches cs_explain_flow_run or something that answers a different question. The
package ships the check, so you can measure it against your own preset, your own model and your
own phrasings rather than trusting the numbers here:
npx copilot-studio-mcp-routing-eval --dry-run # free: shows the corpus and the cost
npx copilot-studio-mcp-routing-eval --preset core --repeat 3 --yes
npx copilot-studio-mcp-routing-eval --cases ./my-questions.json --yesIt puts the tool list in front of a model exactly as your client sees it, one utterance at a time,
and scores the first tool named. --cases takes your own file in the shape of the bundled
reference/routing-cases.json, which is rather the point: the questions your users actually ask
are better evidence than the ones shipped here. With ANTHROPIC_API_KEY set it calls the Messages
API with the tool list as a cached prefix and a run costs cents; without one it falls back to the
claude CLI and the sign-in that machine already has. Either way a run calls a model once per
case and spends real money, so nothing happens without --yes.
Read it with --repeat 3, never a single run. Measured on Haiku 4.5, the score moves by two
cases between runs of an identical build, and a third of the cases answer differently each time.
One run will happily tell you a change helped when it did not. The report separates the cases that
are always misrouted, which are worth acting on, from the ones that flap, which prove nothing.
The handshake instructions are written for a smaller model: one rule per line, an explicit trigger before each instruction, and a section naming the failures seen in the first live run (a call cut off at the client's ~60s limit, a tool missing because the server binary was stale, a cloud tool failing for want of a sign-in, pac reporting failure while exiting 0) with the action for each.
What is and is not possible
Capability | How | Status |
Agent as files, sync both ways |
| official, GA |
Topics, knowledge, tools, triggers, flows as YAML | workspace layout of the VS Code extension and | official |
Local validation | JSON schema from microsoft/skills-for-copilot-studio (MIT) + structural checks | this server |
Run evaluations, read results | Power Platform API | official, GA, standard harness |
Chat with the published agent | DirectLine v3 (no-auth / manual-auth agents) or Copilot Studio client SDK (Entra SSO) | official |
Publish |
| official |
Read, create, change and delete cloud flows | Dataverse | official API, shapes unverified live |
Bind a flow's connections |
| official API, shapes unverified live |
Flow run history, start a run | Power Automate Process Simple API | the service the portal calls, unverified live |
Explain a failed run, diff it against one that worked, score a flow's reliability | the same API's per-run actions route, plus the SAS-signed content links it returns | this server, unverified live |
Portal drift since the last sync |
| this server |
Tenant configuration to files |
| this server |
Hard limits the server works around rather than hides:
Evaluation test sets cannot be created through the API.
cs_create_test_set_csvwrites the CSV the portal imports (max 100 cases); after one import, runs and results are automated.Connector, MCP and prompt tools need a connection that only the portal can authorise.
cs_add_toolwrites the YAML and the connection-reference stub and returns the portal step. The one exception is a service-principal Dataverse connection, whichcs_create_connectioncan create. The same limit is why a new cloud flow is created switched off: bind its connections, thencs_set_flow_state.Evaluations and topic YAML are standard-harness features. GitHub Copilot harness agents (
--authoring-mode cli-copilot) get init / pack / import / instructions / chat only.Copilot Studio does not report whether a conversation succeeded. The transcript tools derive an outcome from the activities. Treat the rates as a place to look, and read the transcript before acting.
A workspace that was never connected to an environment packs less. Verified against pac 2.11.2:
pac copilot packon a workspace frompac copilot initwithout--environmentpackages settings, agent and topics only and rejectsknowledge/,actions/,tools/,trigger/,variables/,workflows/andconnectionreferences.mcs.yml. Those folders are handled bypac copilot pushfrom a sync-connected workspace (clone, or init with an environment). The authoring tools tell you when you are in a pack-only workspace.
How this differs from Microsoft's own pac MCP server
The Power Platform CLI ships a built-in MCP server (pac copilot mcp --run, preview, named
"Power Platform Management MCP Server"). It is a natural-language front end to pac itself: each
of its tools runs one pac command. Probed on pac 2.11.2 it exposes 70 tools, of which exactly one
is about Copilot Studio (copilot_publish); 51 are tenant administration, managed identity,
model-driven apps and generated pages, Power Pages, code apps and code generation.
pac MCP server ( | copilot-studio-mcp (this repo) | |
Purpose | run pac commands in natural language; tenant and environment administration | build, test, ship and maintain Copilot Studio agents from the editor |
Copilot Studio commands |
| init, clone, pull, push, pack, publish, status, list, delete, templates, translations, quarantine, AI Builder instructions |
Authoring | none | topics, knowledge sources, tools (connector / MCP / flow / prompt / agent), triggers, variables, and the agent's own settings as YAML; day-two edit and remove; schema validation (744 definitions); rules-based review with a score |
Testing | none | evaluation test sets and runs (Power Platform API), chat through DirectLine or the client SDK, local conversation tests, production transcripts |
ALM | solution list, export, import, check | pull a whole solution with a deployment settings file and redeploy it 1:1, Solution Checker, versioning, staged upgrades, pipelines, DTAP snapshots and comparison |
Drift | none | portal changes since the last sync (quick Dataverse check, full clone diff) and a push preflight that blocks on conflicts |
Safety | no dry run in the server; the client's approval prompt is the only gate | every environment-changing tool returns a dry run until |
Tenant administration | admin commands as native tools | the admin commands plus |
Cloud flows | none beyond raw pac | list, read, create, rebuild, switch on or off, run history, and a step-based definition builder |
Guidance | tool descriptions | usage instructions in the handshake, |
Other pac groups | managed-identity, model, pages, code, modelbuilder as native tools | reachable through |
Sign-in | pac auth profile | pac auth profile, plus MSAL for the APIs pac does not cover (evaluations, Dataverse reads, environments, chat) |
Tool list | fixed | presets and |
Both are stdio servers and can be registered side by side: pac's for tenant administration, this one for agent work. One practical note: pac's server prints a non-JSON line on stdout at startup, which strict MCP clients may reject.
Sources: Use Power Platform CLI with built-in MCP server
and a tools/list probe of pac 2.11.2 (2026-09-07).
How it fits together
flowchart LR
VS["VS Code / GitHub Copilot"] --> TOOLS
CC["Claude Code"] --> TOOLS
subgraph SERVER["copilot-studio-mcp"]
TOOLS["MCP tool call"] --> SYNC["Sync layer: pac copilot, pac solution, pac admin"]
TOOLS --> AUTH["Authoring layer: YAML + schema validation, flow builder"]
TOOLS --> CLOUD["Cloud layer: evaluations, publish, chat, flows, drift"]
end
AUTH --> WS["Agent workspace on disk: topics, knowledge, actions, workflows"]
SYNC --> WS
SYNC --> DV["Dataverse / Copilot Studio"]
SYNC --> BACKUP["Tenant backup and solution folders on disk"]
CLOUD --> PPAPI["Power Platform API"]
CLOUD --> DV
CLOUD --> FLOW["Power Automate service: flow runs"]
CLOUD --> DL["Published agent: DirectLine or SDK"]Verifying against a real tenant
The cloud workflows were built from documentation and the published schema; phases A to F
received a first live verification on 2026-09-08. docs/verify.md is the current follow-up list.
docs/live-verification.md is the full runbook: phases A to D are read-only and retire most of the
open questions without touching the tenant, E to G write and say so. docs/verification-template.md
is the results file to fill in, and scripts/redact-verification.mjs replaces GUIDs, org URLs,
emails and tokens with stable pseudonyms so a result can be shared from a public repo.
docs/STATUS.md is the full historical record. docs/test-verification.md is the runbook for the
feedback loop (static checks, behavioural tests, transcripts, closing the loop); its phase 1
settles whether live activities carry the topic, tool and citation attribution the conversation
tests read.
Development
git clone https://github.com/jgt87/copilot-studio-mcp.git
cd copilot-studio-mcp
npm install
npm run build # dist/index.js is the server: register it as "command": "node", "args": ["<repo>/dist/index.js"]
npm test # build + unit tests (fixtures, no network)
node scripts/smoke.mjs # drive the built server over stdio
node scripts/oracle-pack.mjs # pac copilot init + authoring tools + pac copilot packreference/bot.schema.yaml-authoring.json and reference/templates come from
microsoft/skills-for-copilot-studio (MIT, see reference/LICENSE.skills-for-copilot-studio.txt).
Fixtures under test/fixtures/pac-* were generated with pac copilot init.
MIT licensed.
Available Tools
142 toolscs_add_flowScaffold a cloud flow (experimental)C
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| inputs | No | ||
| actions | No | Extra Power Automate actions (name -> definition) inserted before the response | |
| addTool | No | Also create actions/<name>.mcs.yml invoking this flow | |
| outputs | No | ||
| overwrite | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the behavioral burden. It flags 'EXPERIMENTAL' but says nothing about overwrite semantics, permissions, whether it pushes to the portal, or any side effects. The mention of 'verify with cs_pack and in the portal after push' implies a local-file workflow, but this is understated and could mislead an agent into thinking the flow is live immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the experimental warning, then states the core action. It packs a lot of information without fluff, though the format references are dense. It earns a 4 for efficiency, not for clarity of usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with nested objects and no output schema, the description is far from complete. It doesn't explain how inputs/actions/outputs are structured, what the response is, or how overwrite behaves. The verification step is useful but not a substitute for usage semantics. An agent would need to inspect the schema and possibly sibling tools to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, and the description does not compensate. It only references 'Name' implicitly. Inputs, outputs, actions, overwrite, and workspace are left undefined. The schema descriptions for addTool and workspace are present but minimal, and the description adds no further meaning for the array/object parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('write'), resource (workflows/<Name>/metadata.yaml + workflow.json), and the exact trigger ('when an agent calls the flow') and response. This clearly distinguishes it from siblings like cs_create_flow or cs_build_flow_definition, which operate on live flows or build definitions. The experimental tag is upfront.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It doesn't mention that it creates local scaffold files vs. modifying an existing flow, nor does it compare with cs_update_flow or cs_create_flow. The only hint is the verification step, but that's post-action, not a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_knowledge_sourceAdd a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| site | No | ||
| files | No | Absolute paths of documents (pdf, docx, txt, ...) | |
| overwrite | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No | ||
| connectionName | No | ||
| includeSubPages | No | ||
| triggerCondition | No | Power Fx condition restricting when this source is searched | |
| contentSourceDisplayName | No | ||
| connectionEnvironmentVariable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses some behavioral nuances beyond a generic 'add' operation: for kind 'files' it states that documents are copied into knowledge/files for upload on a future push, and for 'graph-connector' it specifies using an environment variable. It does not mention permissions, reversibleness, logged side effects, or how the YAML is persisted/modified. Since annotations are empty, the description carries the full burden and only partially fulfills it, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently fronts the core action (Add knowledge as YAML) and packs specific constraints into a compact caveat. There is no repetition of schema content and every clause it joists against the actual parameter values (public-site, sharepoint, etc.). It is appropriately sized, holds zero filler, and places the most actionable information at the beginning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no annotations and no output schema, the description does not explain or prepare the agent for each parameter's purpose, the actual side effects of invocation, or any other prerequisites. It covers only the kind parameter semantics plus a few behavior notes, leaving the agent with significant unknowns (e.g., what 'site' expects, what 'overwrite' affects, how 'includeSubPages' works, when the YAML files are written, etc.). Therefore it falls short of the level of completeness needed for an agent to reliably invoke the tool in varied scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 25% of parameters described in the schema, the description helps to enrich the meaning of the 'kind' parameter (e.g., 'public-site' is a Bing-scoped website with max 2 path levels), which directly clarifies the enum keywords. However, it does not clarify or map many other parameters like 'site', 'overwrite', 'includeSubPages', 'contentSourceDisplayName', or 'connectionEnvironmentVariable', so the added meaning is concentrated on just one dimension and only partly compensates for the overall low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb (Add), resource (knowledge), and the format ('as YAML'), and differentiates from siblings like cs_edit_knowledge by defining it as an add operation. It also enumerates the four supported 'kind' values with specific constraints, making the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-not guidance by stating that Dataverse, AI Search, and SQL knowledge are portal-only and therefore cannot be used with this tool. It also gives usage constraints for each kind (e.g., 'max 2 path levels', 'via environment variable'), which clearly informs when this tool is appropriate. It does not name a specific alternative tool for editing existing knowledge sources, so a single 5 is not warranted, but the context is strong and includes an explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_solution_componentAdd a component to a solutionA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| component | Yes | Schema name or id of the component | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| solutionName | Yes | Solution unique name | |
| componentType | Yes | Component type code or name (e.g. 29 for a flow / workflow, 10088 for a connection reference, 380 for an environment variable definition) | |
| timeoutSeconds | No | Default 600 | |
| addRequiredComponents | No | Also add the components it depends on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description correctly takes on the burden of disclosing behavioral traits. It explicitly states that the tool mutates a live environment and that confirm: true is required for an actual change, otherwise it is a dry run. This is a critical, non-obvious behavior that is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no fluff. The primary purpose is front-loaded, followed by the command invocation and the critical mutation caveat. Every sentence adds value, and the structure is clean and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, no output schema, no annotations), the description covers the essential operational behavior (mutation, dry-run, command). However, it omits information about return values or success/failure indicators, which would be useful given the absence of an output schema. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage of all 11 parameters with clear descriptions, so the baseline is 3. The description adds minimal extra meaning beyond the schema—it restates the component identification method ('by schema name or id') and repeats example type codes already present in the schema. It does not significantly enhance understanding of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add an existing component) and the resource (an unmanaged solution), with a list of example component types. It is specific enough to identify the tool's purpose, though it does not explicitly contrast it with sibling add-tools like cs_add_solution_reference or cs_add_solution_license.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no guidance on when to use it versus alternative add-solution tools. It mentions running the pac command and the requirement for confirm, but these are operational details, not usage context. There is no 'when to use' or 'when not to use' information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_solution_licenseAdd license plan files to a solution projectA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 | |
| planMappingFile | Yes | CSV: Service ID, Component name | |
| planDefinitionFile | Yes | CSV: Service ID, Display name, More info URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds useful context: 'Local file change only' (non-destructive to remote state) and 'Runs pac solution add-license with the active pac auth profile' (delegation and auth dependency). It does not disclose failure behavior, reversibility, or what happens after the files are attached, which matters for a file-mutating tool with no annotation safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with zero waste: purpose is front-loaded, followed by the cwd prerequisite, the local-only guarantee, and the pac delegation detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and no annotations, the description covers purpose, prerequisite, and behavioral scope well. The main gap is that it does not disclose the return value (no output schema exists, so the description would need to state it), nor the effect of the background parameter on jobId behavior. Otherwise it is complete for an attachment-style command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including the CSV column layouts for planMappingFile and planDefinitionFile. The description reinforces the cwd requirement ('Run in the solution project folder') but adds little beyond the schema. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Attach license plan definition and mapping CSV files to a solution project (ISV licensing).' This clearly differentiates it from sibling tools like cs_add_solution_component and cs_add_solution_reference, which target different artifact types within a solution. The title reinforces the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage condition — 'Run in the solution project folder (cwd)' — and scopes it to ISV licensing. However, it does not explicitly name alternatives or state when NOT to use this tool versus siblings such as cs_add_solution_component, cs_add_solution_reference, or cs_pack_solution. The context is implied rather than stated as exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_solution_referenceAdd a project reference to a solution projectA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| path | Yes | Path of the referenced project | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it discloses the key behavioral traits: it modifies a local .cdsproj file only, must be run from the solution project folder, and shells out to pac solution add-reference. It does not detail error behavior or exact file changes, but the safety scope and execution model are clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each supplying useful information: purpose, required working directory, side-effect scope, and underlying command. No redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers the main behavioral contract (local file change, folder requirement, command used) and the schema covers all parameters. It could add the shape of the command's result or failure modes, but nothing essential for invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies: the schema already documents cwd, path, profile, background, and timeoutSeconds. The description adds little beyond noting the cwd requirement and active profile, so no extra parameter credit is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: reference another project (plug-in, PCF, ...) from a .cdsproj so it is packed into the solution. This is clear and aligns with the title, but it does not explicitly differentiate from closely related siblings such as cs_add_solution_component, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable context: run it in the solution project folder (cwd), it is a local file change only, and it invokes the pac add-reference command with the active pac auth profile. It doesn't name alternatives or exclusions, but the context is concrete enough for an agent to know the intended invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_toolAdd a tool (connector, MCP server, flow, prompt, agent, or raw)A
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| action | No | type raw: full TaskAction object with kind | |
| flowId | No | ||
| inputs | No | ||
| outputs | No | ||
| aiModelId | No | type prompt: AI Builder model id | |
| overwrite | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| connectorId | No | shared_<name> or a display name from the catalog | |
| description | Yes | Also used as modelDescription unless overridden; the orchestrator routes on it | |
| operationId | No | ||
| botSchemaName | No | type connected-agent | |
| connectionMode | No | Invoker = end user's connection; Maker = the maker's shared connection | |
| modelDescription | No | ||
| inputsFromCatalog | No | Default true: when no inputs are given and the connector definition is cached, add automatic inputs for the operation's required parameters | |
| connectionReference | No | Existing logical name from connectionreferences.mcs.yml | |
| gptComponentSchemaName | No | type child-agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does substantial work: it discloses that the tool writes a connection-reference stub, returns a portal step for connector/MCP types, checks operationId against a cached catalog, and auto-fills required inputs unless inputs are given. It does not state whether overwrite is destructive or what happens on validation failure, but the disclosed behaviors go well beyond a bare 'Add a tool'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but organized as a type-by-type list, which is appropriate for an 18-parameter tool. It front-loads the core artifact and then groups related information. It is long, but nearly every clause carries routing or behavioral information; only minor redundancy exists between the title and the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 18-parameter tool with no output schema and no annotations, the description covers the main decision axes: which type to choose, which identifiers to supply, and the connection caveat. It does not explain the return value or the portal step in detail, and it leaves outputs/overwrite semantics to the schema, but the essential calling context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, and the description compensates for the gap by explaining the meaning of type-specific identifiers (connectorId, operationId, aiModelId, botSchemaName, gptComponentSchemaName) and the inputsFromCatalog default. It does not elaborate on outputs, overwrite, or modelDescription, but the type-routing explanation adds real value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete artifact ('Create actions/<name>.mcs.yml') and then enumerates every supported type with its required identifiers, which fully disambiguates this from sibling tools like cs_add_flow, cs_add_topic, and cs_edit_tool. The verb 'Create' plus the explicit file target makes the tool's function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives per-type selection guidance ('type 'connector': ... use cs_list_connectors / cs_describe_connector to find them', 'type 'prompt': ... cs_list_prompts'), tells when inputs are auto-filled from the catalog, and warns that connector/MCP tools need a portal-authorized connection. This is explicit when-to-use and how-to-route guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_topicAdd a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| actions | Yes | ||
| priority | No | ||
| overwrite | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No | ||
| triggerKind | No | System trigger instead of phrases | |
| triggerPhrases | No | User phrases that start the topic (OnRecognizedIntent) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds some behavioral context: it says it 'Validates the result' and gives a workflow cue via 'Push to apply.' However, it does not disclose side effects such as overwrite behavior, workspace path resolution, what happens when validation fails, or whether the tool itself pushes changes or only stages them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description gets to the point quickly and each clause adds information: the resource being created, the spec shape, validation, and the push action. It is slightly dense because of the long node-type list, but there is no filler or repetition holding back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters including a large action schema, no output schema, and no annotations. The description does not explain expected return values, failure modes, whether the push must be done with a separate tool, or workspace/overwrite semantics, so a caller must guess or rely entirely on the schema for an invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains trigger phrases vs a system trigger and lists the expected action node types, which the role of the 'actions' array at a high level. But with only 38% schema coverage it doesn't compensate for undocumented concerns like 'overwrite', 'priority', 'description', or the workspace parameter, and the node list is incomplete (missing card, transfer, endConversation) even though the schema supports them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a precise verb and resource ('Create topics/<name>.topic.mcs.yml') and names the main ingredients of the declarative spec. It clearly distinguishes the creation function from siblings like cs_edit_topic by using 'Create' and mentioning the file path pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or mention of alternatives. The tool name and 'Create' imply new-topic use, but the description does not tell the agent when to prefer this over cs_edit_topic, cs_add_trigger, or other mutation tooling, and it omits final state requirements like when a push is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_triggerAdd an event triggerB
Create trigger/.trigger.mcs.yml pointing at a cloud flow that starts the agent (WorkflowExternalTrigger).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| flowId | Yes | ||
| overwrite | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that a trigger file is created, but does not mention side effects, prerequisites such as whether the cloud flow must already exist, what happens on overwrite, or whether the operation is reversible. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler. It front-loads the file-creation action and then adds the key integration detail about WorkflowExternalTrigger. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, absence of an output schema, and sparse schema documentation for most parameters, the description is too minimal to be complete. It does not cover behavior around overwrite, workspace resolution, required prerequisites, or return values. An agent would likely need to open the schema or guess about important edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate for the undocumented parameters. It does add meaning for 'name' by showing it becomes part of the file path, and for 'flowId' by indicating it references the cloud flow. However, overwrite and description remain completely unexplained, leaving the compensation incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool creates a trigger file named trigger/<name>.trigger.mcs.yml and associates it with a cloud flow via WorkflowExternalTrigger. This is a specific verb-resource pair and makes the tool's core function clear. However, it does not explicitly distinguish itself from sibling tools like cs_add_flow or cs_add_tool, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'pointing at a cloud flow that starts the agent (WorkflowExternalTrigger)' implies the tool should be used when an event trigger backed by an external cloud flow is needed. There is no explicit guidance about when not to use it or which sibling alternative might be more appropriate, but the intended context is reasonably inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_add_variableAdd a global variableC
Create variables/.variable.mcs.yml (GlobalVariableComponent, conversation scope).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| overwrite | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No | ||
| aiVisibility | No | ||
| defaultValue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the file creation and component type, but does not mention whether overwrite behavior is default, what happens if the file exists, whether the variable is immediately available, or any side effects. The 'overwrite' parameter hints at behavior but the description itself doesn't explain it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loads the key action and resource. It earns its place by specifying the exact file path and component type, though it could add a bit more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and no annotations, the description is too sparse. It doesn't explain the meaning of key parameters like 'overwrite' and 'aiVisibility', doesn't describe return values or success/failure behavior, and doesn't clarify the workspace context. An agent would need to infer too much to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description must compensate, but it only explains the 'name' parameter via the file path template. The 'overwrite', 'workspace', 'description', 'aiVisibility', and 'defaultValue' parameters are not explained in the description, and the schema provides minimal descriptions for them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('variables/<name>.variable.mcs.yml') and identifies the component type (GlobalVariableComponent) and scope (conversation). It is clear what the tool does, though it doesn't explicitly distinguish it from sibling tools like cs_add_topic or cs_add_tool beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no context about when a global variable should be created this way. The file path implies it operates within a workspace, but no explicit usage conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_add_environment_to_groupAdd an environment to a 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id, url, unique or partial name | |
| timeoutSeconds | No | Default 600 | |
| environmentGroup | Yes | Environment group name or id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It explicitly states that the tool 'Changes tenant configuration' and 'Mutates a live environment,' and that confirm:true is required to actually perform the change, otherwise it returns a dry run. It also names the underlying command ('pac admin add-group') and the use of the active profile. This is transparent about mutation and the dry-run behavior. It could add detail on reversibility or side effects, but the key behaviors are well disclosed. The repetition of confirm:true is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and effect, then the confirm requirement, then the implementation detail. It is concise and avoids fluff. The only redundancy is stating confirm:true twice, which is slightly repetitive but not harmful. Overall, it is well structured and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 7 parameters (1 required) and no output schema, the description covers the essential operational context: what it does, the effect on the environment, the confirm requirement, and the underlying command. It does not mention prerequisites like the existence of the environment group or that the environment must be specified, but the schema clearly marks environmentGroup as required and environment as optional. It also does not describe return values, but no output schema exists. The description is sufficiently complete for an agent to call it correctly, though it could benefit from noting that the group must already exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does reinforce the meaning of the confirm parameter by stating it is required for actual changes and that without it the tool is a dry run, which aligns with the schema. It also mentions 'active pac auth profile,' which matches the profile parameter's default behavior described in the schema. However, the description adds little new semantic meaning beyond what the schema already documents, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Put an environment into an environment group, which applies that group's rules to it.' This uses a specific verb (put/add) and a precise resource (environment into environment group). It distinguishes the tool from siblings like cs_admin_list_environment_groups by defining the mutation effect. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that this is a tenant configuration change and a live-environment mutation, and it stresses the confirm:true requirement for actual changes (with a dry run otherwise). However, it does not explicitly compare with alternative tools or state when to use this vs. another admin tool. Since there is no direct sibling that removes from a group or lists groups, the guidance is implicit rather than explicit. The confirm requirement is a clear usage instruction, but broader selection guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_assign_groupAssign a group to an environmentA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| role | Yes | Security role name or id | |
| group | Yes | Entra group object id | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| teamType | Yes | Team type (Owner, Access, AadSecurityGroup, AadOfficeGroup) | |
| groupName | Yes | Name of the Dataverse team to create | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| businessUnit | No | Business unit id | |
| membershipType | Yes | Membership type (MembersAndGuests, Members, Owners, Guests) | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses that the tool mutates a live environment, requires confirm: true, and performs a dry run otherwise. It also reveals the underlying pac command and profile usage, giving clear behavioral expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the purpose and critical mutation warning. However, it is redundant: it repeats the same confirm requirement twice ('Changes a live environment...' and 'Mutates a live environment...'), which could be condensed into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters and no output schema, the description covers essential context: purpose, mutation risk, confirm requirement, and the underlying command. Parameter details are handled by the schema, and return values are not specified, which is acceptable. It omits alternative tool guidance but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context about the confirm flag and dry-run behavior but does not significantly enhance the schema's parameter descriptions. The underlying command is mentioned, but individual parameters are well documented already.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool gives an Entra group a security role in an environment via a Dataverse team. It specifies the exact action and resource, and distinguishes from sibling user-assignment tools by focusing on groups. Not tautological or vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for group-based role assignment and notes the confirm requirement for live changes, but does not explicitly mention alternatives or when not to use this tool. It lacks routing to sibling tools like cs_admin_assign_users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_assign_userAssign a user to an environmentB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| role | Yes | Security role name or id (cs_admin_list_security_roles) | |
| user | Yes | Object id or UPN, or the application id for an application user | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| businessUnit | No | Business unit id | |
| timeoutSeconds | No | Default 600 | |
| applicationUser | No | The user is an application (service principal) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It clearly states the tool changes a live environment and requires confirm: true to execute, and that without confirm it is a dry run. This is repeated for emphasis. However, it does not disclose other potential behaviors such as whether existing role assignments are overwritten, error handling, or side effects beyond the mutation. The core destructive nature is disclosed, but the description is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) but redundant: the confirm requirement is stated twice in almost identical terms. It also includes a note about the pac auth profile which, while useful, is not essential to the core action. The structure is acceptable but could be tightened by removing duplication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (10 parameters, mutation, no output schema, no annotations). The description covers the critical safety aspect (confirm requirement) but omits many details an agent might need: return format (no output schema), behavior on invalid user/role, interaction with environment parameter, and differentiation from bulk assignment. It is not fully adequate for a mutation tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description does not add any semantic detail beyond the schema; it only mentions 'user' and 'role' implicitly. It does not clarify parameter relationships, defaults, or specific formats beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action: 'Give a user (or an application user) a security role in an environment.' It specifies the resource (security role) and the target (user/application user) in an environment, and distinguishes itself from the sibling 'cs_admin_assign_users' by implying singular vs. bulk assignment. The mention of running 'pac admin assign-user' adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like cs_admin_assign_users. It notes that it mutates a live environment and requires confirm, which is a caution but not a usage guideline. It does not mention any exclusions or conditions that would route an agent to a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_assign_usersAssign security roles to a roster of 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.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | No | Path to a CSV roster. Header row needs a user column (user, upn, email) and a roles column (roles, role); several roles in one cell separated by comma, semicolon or pipe. Optional businessUnit and applicationUser columns. A user on several rows accumulates their roles. | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile of the admin account; default CPS_ADMIN_PROFILE, then the active profile | |
| background | No | Run in the background and return a jobId immediately, then poll cs_job_status. MCP clients cut a tool call off after about 60 seconds; this operation can take much longer, and without this the work is orphaned rather than cancelled. | |
| assignments | No | Roster inline instead of a CSV file | |
| environment | Yes | Environment id or URL to assign the roles in | |
| businessUnit | No | Business unit for rows that do not name one | |
| continueOnError | No | Default true: one failed row does not abort the roster. false stops at the first failure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states this is a mutating operation ('Changes a live environment: requires confirm: true'), explains the dry-run behavior without confirm, notes that rows are independent (errors don't abort remaining rows), mentions the single approval mechanism, and warns that it runs as an admin account requiring a specific profile. It also discloses that it is unverified against a live tenant, which is a critical trait. This is exemplary given zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and informative, covering all critical aspects in a single paragraph. Every sentence serves a purpose: purpose, difference from siblings, dry-run behavior, error handling, mutation requirement, profile handling, alternative tool preference, and verification status. It is front-loaded with the main purpose and usage, and the length is appropriate for the tool's complexity (8 parameters, multiple behavioral nuances). No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and 8 parameters, the description covers everything an agent needs to call this tool effectively: the two input methods (csv and assignments), the confirm requirement, background execution for long operations, profile handling, and the alternative tool. It also mentions error behavior and dry-run. The only minor gap is the exact return format of the dry-run plan, but the description says 'you can read the whole thing before any of it happens', which is adequate. Given the tool's complexity, this is remarkably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. However, the description adds valuable context beyond the schema: it explains the CSV header format (user/upn/email, roles/role), how multiple roles are separated, and that users can accumulate roles across rows. It also clarifies the 'confirm' flag's role in making actual changes and the 'background' flag's purpose in avoiding MCP timeout issues. This goes well beyond the schema descriptions and helps the agent correctly construct input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('assign'), resource ('security roles'), and recipient ('roster of users'), and clearly distinguishes itself from the sibling cs_admin_assign_user (single user) and cs_admin_assign_group (group-based). The description explicitly mentions 'many users' and 'one environment', making the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts with cs_admin_assign_group (when the roster is a group) and mentions when to use it. It also provides guidance on the confirm flag (dry run vs live), how to handle large rosters (background), and the need to set the admin profile. The description says 'Prefer cs_admin_assign_group when the roster is really a group' and explains the benefit, leaving no ambiguity about when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_backup_environmentBack up an 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| label | Yes | Backup label | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 3600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries the burden and does well: it discloses mutation of a live environment, the confirm requirement, the dry-run fallback, and that it runs pac admin backup with the active pac auth profile. The main downside is duplicating the same mutation warning rather than adding further behavioral detail such as impact or output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, but it contains redundant phrasing: 'Changes a live environment: requires confirm: true' and 'Mutates a live environment: requires confirm: true (a dry run otherwise)' say roughly the same thing. One sentence could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters fully described in the schema and no output schema, the description adds the essential manual-vs-file backup distinction, the underlying command, and the critical confirm/dry-run behavior. It is complete enough for an agent to call the tool correctly, though return behavior is only hinted at via dry-run wording.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mostly reinforces what the schema already documents about confirm and profile, adding only the underlying pac admin backup command context. It doesn't meaningfully clarify label, environment, background, or timeout beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action: taking a manual backup of an environment, and immediately contrasts it with the file backup that cs_backup_tenant writes. This makes the tool's purpose unambiguous and differentiates it from a closely named sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly tells the agent this is the platform backup, not cs_backup_tenant's file backup, and explains the confirm/dry-run behavior. It doesn't explicitly enumerate when not to use it relative to all backup-related siblings, but the primary alternative is named and the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_copy_environmentCopy one environment over anotherA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Name for the target environment | |
| type | No | Copy type (for example MinimalCopy, FullCopy) | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| skipAuditData | No | Do not copy audit data | |
| timeoutSeconds | No | Default 14400 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) | |
| sourceEnvironment | No | Environment to copy from | |
| targetEnvironment | No | Environment to overwrite |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the destructive nature ('Everything in the target is replaced'), the confirm safety gate, the dry-run default, that it mutates a live environment, and the underlying command/auth mechanism. It stops short of documenting async/background termination or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core action, but it is redundant: 'requires confirm: true' appears twice, and the final sentence 'Mutates a live environment' largely overlaps with 'Everything in the target is replaced.' Two of the three sentences could be merged without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The safety-critical context is well covered: destructive scope, confirm gating, dry-run behavior, and execution mechanism are all stated. However, with 12 parameters, no output schema, and no description of what the call returns (e.g., status message, jobId, or async behavior), an agent is left guessing about the result contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents all 12 parameters. The description reinforces the confirm parameter's role ('requires confirm: true') but adds no parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Copy a source environment onto a target environment,' plus the defining consequence 'Everything in the target is replaced.' This clearly identifies the action and makes it distinguishable from admin siblings like delete, reset, or backup, though it does not explicitly name a sibling or contrast condition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives operational guidance: to actually mutate you must pass confirm: true, otherwise it is a dry run, and the operation runs via 'pac admin copy' with the active pac auth profile. However, it never states when to choose this tool over alternatives (e.g., cs_admin_reset_environment or cs_admin_restore_environment) or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_create_environmentCreate an 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Environment name | |
| type | Yes | Production, Sandbox, Trial, Developer or Teams | |
| user | No | User to assign to the environment (object id or UPN) | |
| async | No | Run the operation asynchronously | |
| domain | No | Domain part of the environment URL | |
| region | No | Region (default unitedstates) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| currency | No | Currency (default USD) | |
| language | No | Language (default English) | |
| inputFile | No | JSON file with the arguments | |
| templates | No | Dynamics 365 templates to deploy | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 7200 | |
| securityGroupId | No | Entra security group id (required for a Teams environment) | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses tenant capacity consumption, that the tool mutates a live environment, the dry-run behavior without confirm, and reliance on the active pac auth profile. This is strong behavioral disclosure beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. The only structural weakness is the duplicated 'requires confirm: true' clause appearing in both sentences, which makes it slightly less crisp than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity mutation tool with no annotations and no output schema, the description covers the essential operational context: side effects, safety switch, dry-run mode, and auth profile. Return shape is not described, but that is an acceptable gap given the detailed input schema and clear behavioral warnings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for 17 parameters, so the baseline is 3. The description adds useful context about capacity consumption and the underlying pac admin create command, plus the profile behavior, but the confirm requirement is already accurately described in the schema. It does not substantially deepen semantics for most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a Dataverse environment in the tenant.' It also names the underlying command ('pac admin create'), which clearly distinguishes it from the admin delete, reset, copy, and restore sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The creation context is clear and the description provides a critical usage prerequisite: confirm: true is required to actually mutate a live environment, otherwise it is a dry run. It does not explicitly name alternatives or exclusionary conditions, but the purpose is unambiguous enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_create_service_principalCreate an application userA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Application name to create in Entra | |
| role | No | Security role (default System Administrator) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the transparency burden. It clearly states that the tool mutates a live environment, requires confirm: true to actually change it, and otherwise performs a dry run. It also exposes the underlying command and the use of the active pac auth profile. It does not cover auth requirements or failure behavior, but the key mutation/dry-run behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, but the second and third sentences are near-duplicates: both state that the tool mutates a live environment and requires confirm: true. This redundancy means not every sentence earns its place, and the structure could be tightened into one or two concise sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no annotations and no output schema, and it is a mutating admin command, so the description carries extra responsibility. It does explain the core use case, mutation behavior, the confirm parameter, and the auth profile context. However, it omits prerequisites such as required admin permissions and does not describe what the dry-run output looks like or how success is reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3: the schema already documents all eight parameters thoroughly. The description adds some operational context for confirm and profile behavior, but it mostly repeats what the schema already conveys and does not materially enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation: registering an Entra application and assigning it an application user with a security role. It also clarifies the intended purpose as 'the headless identity a pipeline signs in as,' which differentiates it from sibling tools like cs_admin_register_application. The underlying command is named, leaving little ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the headless identity a pipeline signs in as' implies the primary use case, and the confirm/dry-run requirement gives an operational precondition. However, there is no explicit guidance about when to prefer this tool over related sibling tools such as cs_admin_register_application or cs_admin_list_service_principals, and no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_delete_environmentDelete an 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 7200 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the irreversible nature, the requirement for confirm, and that it runs 'pac admin delete' with the active profile. This is strong behavioral disclosure for a destructive operation. It doesn't mention backup retention details beyond 'platform's own backup retention', which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first defines the scope, the second emphasizes irreversibility and confirm, the third ties it to the underlying command. It is front-loaded with the most critical info about destructiveness and confirm flag.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature and no output schema, the description provides enough for an agent to understand the critical requirements: confirm is mandatory, irreversible, and runs pac admin delete. It could mention the output or potential errors, but the complexity is moderate and the key safety aspects are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all parameters are documented in the schema. The description adds the crucial meaning of confirm (dry run without it) but doesn't elaborate on other parameters like cwd, async, profile, or timeout. Baseline 3 is appropriate as the schema covers the basics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes an environment with all its contents, and the verb 'delete' is specific and unambiguous. It distinguishes from sibling tools like cs_admin_reset_environment by emphasizing irreversibility and full deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that it mutates a live environment and requires confirm: true, implying this is for when deletion is intended. It does not explicitly list alternatives or when not to use it, but the irreversibility warning and the contrast with reset tools gives clear context. Sibling tools like reset or backup are not named, but the destructive nature is emphasized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_environment_statusOperations in progressB
Status of the tenant operations that are still running (copies, restores, resets, deletions). Runs 'pac admin status' with the active pac auth profile.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal that the tool runs 'pac admin status' and uses the active pac auth profile, which is useful, but it does not state whether the operation is read-only, what the returned status format looks like, or any auth/precondition requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The purpose is front-loaded, and the underlying command is identified concisely in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-query tool with all-optional parameters, the description provides the essential purpose and underlying command. However, without an output schema or annotations, it does not describe the return value or clarify how this tool relates to polling/status siblings, leaving moderate ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all four parameters, with 100% coverage, so the description is not required to explain them in depth. The description's mention of the active pac auth profile adds minimal information beyond the schema's existing 'profile' parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear resource ('tenant operations that are still running') and specifies the kind of information provided ('status'), with concrete examples such as copies, restores, resets, and deletions. It distinguishes itself reasonably from generic status tools through the tenant-operation scope, though it does not explicitly contrast with sibling tools like cs_job_status or cs_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to choose this tool over cs_job_status, cs_status, or other admin inspection tools. The description implicitly suggests it is for checking in-progress tenant operations, but it does not state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_applicationsList registered Entra applicationsB
Entra applications registered with the tenant for Power Platform. Runs 'pac admin application list' with the active pac auth profile.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool runs a specific pac command and uses the active auth profile, which implies a read-only listing behavior. However, it doesn't disclose output format, pagination, or whether it requires admin elevation beyond the profile mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and the underlying command. The second sentence adds the execution mechanism. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list command with 100% schema coverage, the description is mostly adequate. However, with no output schema and no annotations, it could usefully mention what the output contains (e.g., application IDs, names) and whether any prerequisites like being signed in are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds context that the profile is the admin account for tenant commands and that cwd is for project commands, but this is largely restating schema info. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Entra applications registered with the tenant for Power Platform, and identifies the underlying command ('pac admin application list'). It is distinguishable from siblings like cs_admin_list_service_principals and cs_admin_register_application, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it's a read-only admin listing command for tenant-registered Entra applications. It mentions it runs with the active pac auth profile, but doesn't explicitly state when to prefer this over alternatives like cs_admin_list_service_principals or cs_admin_list_app_templates, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_app_templatesList Dynamics 365 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| region | No | Region name (default unitedstates) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses that it runs 'pac admin list-app-templates' with the active pac auth profile, which is useful, but it does not explicitly state read-only behavior, output shape, or any side-effect-free guarantee beyond what 'list' implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and scoped by region, followed by the underlying command. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, scope, and command, and the schema covers all parameters. However, with no annotations and no output schema, it does not describe the return format or explicitly confirm there are no side effects, leaving a moderate gap for an agent deciding how to use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented. The description adds no parameter-specific meaning beyond 'per region' and the active auth profile, both of which are also reflected in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Dynamics 365 application templates available per region, with a concrete underlying command. It names a distinct resource not covered by any sibling admin list tool, so an agent can differentiate it from cs_admin_list_environments, cs_admin_list_applications, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: these are templates used when creating an environment, and results are region-specific. It does not explicitly name alternative tools or state when not to use it, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_backupsList environment 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the underlying command and that it uses the active pac auth profile, which is useful. However, it does not explicitly state that this is a read-only operation, nor does it mention any side effects, output shape beyond labels/dates, or failure behavior. The command name implies listing only, but an explicit safety statement would strengthen it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose, the restore relationship, and the underlying command are all front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation, the description is largely complete: it names the returned data (labels and dates), the command, and the restore context. Although there is no output schema, the description compensates by naming the key output fields. It could mention that no parameters are required and that the operation is read-only, but the schema covers required parameters and the command name makes the read-only nature reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a meaningful description and no defaults are undocumented. The tool description adds only contextual framing (environment backups, active profile) rather than new parameter-level detail, which is acceptable at the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (environment backups) and the data returned (labels and dates), and explicitly ties it to 'pac admin list-backups'. It also distinguishes itself from the related restore tool by stating these are exactly 'what cs_admin_restore_environment can restore'. This is a specific, unambiguous purpose with sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this tool lists restorable backups for an environment loose, and names cs_admin_restore_environment as the companion tool. It does not explicitly state when not to use it or alternative listing tools, but the intended use-case is clear enough for an agent to select it over backup/restore siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_dlp_policiesList 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently states the underlying command ('pac admin dlp-policy list') and the auth profile dependency. It does not mention output format, pagination, or permission requirements, though the list command implies a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The definition of DLP policies is front-loaded and helpful, followed by the exact command and auth context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple list operation with all parameters self-documented in the schema. The description provides essential context about what DLP policies are and the command executed. It does not describe the return shape, but the tool name and command strongly imply a list of policies, and no output schema exists to set a higher bar.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (list) and resource (DLP policies) and adds useful context about what DLP policies are (connector groups that decide which connectors an agent or flow may combine). It does not explicitly differentiate from the sibling cs_admin_show_dlp_policy, but the command and scope ('in the tenant') make the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: listing all tenant-level DLP policies via a specific pac command. It provides context about the tenant scope and active auth profile, but it gives no explicit guidance on when to prefer this over alternatives like cs_admin_show_dlp_policy or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_environment_groupsList 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it runs 'pac admin list-groups' with the active pac auth profile, which is useful but doesn't reveal whether the operation is read-only, what the response format is, or any side effects. For a listing command, it likely returns data without mutations, but this is not stated. This is a significant gap given zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It leads with the core purpose, then adds the underlying command and auth detail. Every word earns its place. It's optimally concise for a straightforward listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool, the description covers what it lists and how it runs, but it omits behavioral specifics like output format, pagination, or read-only nature. Since there is no output schema and no annotations, an agent might not know what to expect from the call. It's not a complex tool, so it's minimally complete but lacks the transparency that would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so all four parameters (cwd, profile, background, timeoutSeconds) are already documented. The tool description adds no extra parameter information. Baseline of 3 is appropriate because the schema does the heavy lifting, and the description doesn't introduce any ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it lists environment groups in the tenant and specifically ties them to managed-environment rules. It distinguishes from sibling tools like cs_admin_list_environments by focusing on groups, not environments. It also names the underlying command, making the action concrete. However, it does not explicitly contrast with any sibling, so it loses a point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for managed-environment rules, which suggests when to call it. But it provides no explicit guidance on alternatives, exclusions, or when not to use it. For example, it doesn't say to use cs_admin_list_environments for a plain environment list. This is implied rather than stated, so it's adequate but not strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_environmentsList environments (admin)A
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Only environments whose name contains this text | |
| type | No | Only environments of this type (Production, Sandbox, Trial, Developer, Teams) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| application | No | Only environments with this application installed | |
| environment | No | Only environments whose name or id contains this text | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the underlying command ('pac admin list'), the dependency on the active pac auth profile, and the read-only listing nature. It does not discuss failure modes or auth prerequisites, but it provides meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads scope and output fields, then mentions filters and the underlying command, with every clause contributing useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list command with a fully documented schema, the description covers the essential semantics and names return fields. It lacks explicit routing guidance against cs_list_environments and does not describe output format details, but it is otherwise complete enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description summarizes filters and the underlying command, but does not add meaning beyond what the schema already documents for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (list), resource (environments), scope (every environment in the tenant), and the output fields (type, region, state). It also distinguishes the tool from the non-admin sibling cs_list_environments by explicitly saying 'as the admin centre lists them'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for tenant-wide admin listing, using the active pac auth profile. It does not explicitly name alternatives or exclusion criteria, but the admin-centre framing makes the intended use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_security_rolesList 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| businessUnit | No | Filter by business unit name or id | |
| timeoutSeconds | No | Default 600 | |
| includeChildRoles | No | Include child roles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the underlying command ('pac admin list-roles') and that it uses the active pac auth profile, and clarifies child roles are optional. It doesn't explicitly state the operation is read-only or note any permission requirements, though 'list' strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the purpose and scoping, then add the command and auth-profile context. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-oriented list command, the description plus fully documented schema covers invocation: environment, optional child roles, profile, and background execution are all present. It doesn't describe return shape, but the output of a list-roles command is reasonably predictable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters. The description adds only the contextual link to assignment tools and the optional-child-roles behavior, which is useful but not parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('list security roles in an environment') and adds the key semantic that these roles are exactly what cs_admin_assign_user and cs_admin_assign_group can grant. This distinguishes it from other admin list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use when you need to enumerate the roles available to grant in an environment, optionally including child roles. It doesn't explicitly list alternatives or exclusions, but the assignment-tool tie-in routes the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_service_principalsList service principals with Dataverse accessA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| max | No | Maximum applications (default 20) | |
| filter | No | Application name starts-with filter | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It usefully states that it runs 'pac admin list-service-principal' and uses the active pac auth profile, covering the auth dependency. However, it does not explicitly state that it is read-only or describe any side-effect absence or output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences. It front-loads the core purpose and immediately gives the exact execution command, with no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the fully documented parameter schema and the simplicity of a list operation, the description provides enough context to select and invoke the tool. It would be stronger with explicit output-shape or side-effect disclosure, but nothing essential for calling the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a bit of command context by naming the exact pac command, but it does not enrich the semantics of max, filter, cwd, or timeout beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The definition clearly identifies the action ('List') and the specific resource: service principals with Dataverse access, described as Entra applications with an application user in Dataverse. It names the underlying command, making it distinct from sibling list tools like cs_admin_list_applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this tool is appropriate: finding application identities that can act without a person signing in. It does not explicitly name alternatives or provide when-not conditions, but the purpose is specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_list_tenant_settingsRead 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| settingsFile | No | Write the settings to this .json file | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the transparency burden. It discloses that with settingsFile it writes JSON to a path and that the file is the reference copy, and that it runs under the active auth profile. However, it does not explicitly state that this is a read-only operation (though implied by 'list'), nor does it describe the default output when settingsFile is not provided, or any permission or side-effect details. This is partial but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the primary purpose before adding the settingsFile detail. It is efficient with no redundancy, though it could be slightly more structured to separate core behavior from the file-writing nuance. Overall, it earns its sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers the main operation and the settingsFile behavior, but it leaves ambiguity about what happens when settingsFile is omitted (presumably console output, but not stated). It also does not mention authentication prerequisites beyond the active profile, or any limitations. Given the simplicity, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description adds value by explaining the purpose of settingsFile as a reference copy for source control, which is not in the schema. However, it does not elaborate on the other parameters (cwd, profile, background, timeoutSeconds) beyond what the schema states, so it provides minimal additional semantic context overall.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as reading tenant-wide Power Platform settings (governance, sharing, support, licensing) and references the underlying 'pac admin list-tenant-settings' command. It distinguishes the read intent from the update sibling (cs_admin_update_tenant_settings) by title, but does not explicitly name the alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading tenant settings but provides no explicit guidance on when to choose this over alternatives or when not to use it. It does not mention exclusions or conditions. The mention of settingsFile being a reference copy suggests a source-control use case, but this is not framed as a decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_queryRun a tenant resource 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| query | No | Resource query JSON as a string | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| queryFile | No | File containing the query JSON | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| outputFile | No | Where to save the results | |
| outputType | No | Json, List or Grid (default Grid) | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the only source of behavioral disclosure. It does say the tool runs a tenant query, wraps `pac admin query`, uses the active profile, and can write to a file—useful side-effect context. However, it does not explicitly say the operation is read-only, what happens if an output file already exists, or what the tool returns when no file is requested.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences and front-loads the core purpose before the optional file-writing behavior. It earns its place and does not spend words on generic detail, though the 'JSON, list or CSV' phrase is a small factual mismatch with the schema enum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters and no output schema, so the schema carries most of the invocation details that the description does not. The description is broadly informative but does not illuminate the actual query-language syntax, provide examples, or explain the return convention for normal vs. background execution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has meaningful documentation, so the description is not required to add much. The file-format mention is mildly useful but is also somewhat inconsistent with the `outputType` enum, which only lists `Json`, `List`, and `Grid`; `CSV` is not a valid enum value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource—'Run a tenant-level resource query (the admin centre's own query language)'—and names the underlying command `pac admin query`, distinguishing this from the many sibling cs_admin_* tools. It adds useful detail about optional file output and the active auth profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like `cs_admin_list_environments`, `cs_admin_environment_status`, or the generic `cs_pac` wrapper. The description explains what the tool does, but not when it should be chosen, when it should be avoided, or what the admin-centre query language is for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_register_applicationRegister an Entra 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| applicationId | Yes | Application (client) id | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It clearly states that the tool mutates a live environment, requires confirm: true, performs a dry run otherwise, and runs through the active pac auth profile. This is solid behavioral context, though it slightly repeats the confirm requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, and no filler. The only minor weakness is repeating 'requires confirm: true' in two consecutive sentences, which is slightly redundant but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating admin tool with no annotations and no output schema, the description covers the essential operational facts: what it does, that it mutates, how to actually apply the change (confirm: true), and that a dry run happens otherwise. Combined with fully documented parameters, an agent has what it needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds context about the confirm flag's dry-run behavior and the active profile, but it does not materially expand on parameter meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Register an Entra application with the tenant so it can be used by Power Platform.' This is distinct from the sibling cs_admin_unregister_application and clearly names the underlying command 'pac admin application register'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear — registering an Entra application for Power Platform — and notes the important confirm flag requirement. It does not explicitly name alternatives or when not to use it, but the register/unregister sibling pair and the title make the primary usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_reset_environmentReset an 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | New name | |
| async | No | Run the operation asynchronously | |
| domain | No | Domain part of the URL | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| purpose | No | Description of the environment's intent | |
| currency | No | Currency | |
| language | No | Language | |
| inputFile | No | JSON file with the arguments | |
| templates | No | Dynamics 365 templates | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 7200 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It clearly discloses that the operation mutates a live environment, deletes everything, requires confirmation, and will dry-run otherwise. It does not detail auth requirements or output, but the core destructive behavior is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences and front-loaded purpose. Minor redundancy: confirm: true and dry-run behavior are stated twice, so it is concise but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive admin operation with no output schema and no annotations, it covers the essential call contract: destructive effect, confirmation gate, dry-run behavior, and underlying pac command. It leaves return-value expectations implicit, but schema covers the remaining parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 15 parameters. The description adds only confirm/profile context already reflected in the schema, meriting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Reset an environment to an empty Dataverse instance') and clarifies scope by warning that everything in it is deleted, distinguishing a reset from environment deletion/backup/restore siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: this is for resetting a live environment, requires confirm: true to avoid a dry run, and operates under the active pac auth profile. It does not explicitly name alternatives or when-not conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_restore_environmentRestore an environment from a backupA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Name for the restored environment | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| skipAuditData | No | Do not restore audit data | |
| selectedBackup | Yes | Backup date as mm/dd/yyyy hh:mm, or 'latest' | |
| timeoutSeconds | No | Default 14400 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) | |
| sourceEnvironment | No | Environment the backup came from | |
| targetEnvironment | No | Environment to restore into (defaults to the source) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool mutates a live environment, overwrites data and customisations, requires confirm: true to execute (otherwise a dry run), and runs a specific command. This is substantial behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loaded with the core purpose. However, it repeats the confirm requirement twice (first and third sentences), which is redundant and slightly inefficient. Overall it is concise but not perfectly streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 12-parameter mutation tool with no output schema and no annotations, the description covers the essential behaviors: it mutates, overwrites, requires confirm, and is a dry run otherwise. It does not explain the return format or error scenarios, but these are not typically required for such a tool. The description is adequate for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so the description adds little beyond the schema. It repeats the confirm requirement but does not clarify parameter relationships (e.g., sourceEnvironment vs targetEnvironment) or format nuances beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Restore', the resource 'a backup into the same or another environment', and the critical effect 'Overwrites the target's data and customisations'. It also names the underlying command 'pac admin restore'. This distinguishes it from siblings like cs_admin_backup_environment and cs_admin_copy_environment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (restoring from a backup) and notes the confirm requirement for actual mutation, but it does not explicitly state when to use this tool vs alternatives or provide exclusion criteria. No comparison to other admin tools is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_self_elevateSelf-elevate to System AdministratorA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the tool mutates a live environment, requires confirm:true to actually change anything, and otherwise performs a dry run. It also reveals the underlying command and profile usage. This is strong transparency for a mutation tool, although it repeats the confirm requirement twice and doesn't mention side effects (e.g., reversibility).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but contains redundancy: it repeats 'requires confirm: true' verbatim in the third and fifth sentences, and 'Changes a live environment' vs 'Mutates a live environment' say the same thing. The information is front-loaded with the purpose, but the repetition wastes words. It could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the critical behavioral aspects: the admin prerequisite, the confirm requirement (and dry-run alternative), and the underlying command/profile. It does not explain return values (no output schema), but for a mutation tool that's likely acceptable. The environment parameter is only in the schema, not the description, but given 100% schema coverage, that's not a gap. Overall, the context is sufficiently complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 6 parameters with descriptions (100% coverage), so the description adds little beyond what the schema already provides. The mention of 'confirm: true' and 'active pac auth profile' reinforces schema entries but doesn't add new meaning. Given high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action: 'Give yourself the System Administrator role in an environment.' This is a specific verb and resource, clearly distinguishing it from any sibling tool (no other tool appears to perform self-elevation). The purpose is unambiguous and self-contained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists the required admin roles ('Needs Global, Power Platform or Dynamics 365 admin') and the critical confirm flag requirement for mutating a live environment. It also indicates the underlying mechanism (running 'pac admin self-elevate'). While it doesn't name an alternative tool, none exists among siblings, so this is acceptable. The guidance is clear about prerequisites and the confirm behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_set_backup_retentionSet the backup retention periodA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| days | Yes | 7, 14, 21 or 28 | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL | |
| timeoutSeconds | No | Default 600 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the tool mutates a live environment, requires confirmation, defaults to a dry run, and runs a specific pac command with the active profile. This is strong disclosure for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but redundant: 'Changes a live environment: requires confirm: true' and 'Mutates a live environment: requires confirm: true' repeat the same fact. The command invocation detail is useful, but the duplication weakens the structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with 9 parameters and no output schema, the description covers the essential invocation behavior: live-environment mutation, confirm semantics, dry-run behavior, and the underlying command/profile. The schema covers parameter formats, and no critical operational detail needed for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by spelling out the allowed day values and by explaining that confirm is required to actually apply changes rather than perform a dry run.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Set how many days backups of an environment are kept') and a resource with valid values. This clearly distinguishes it from sibling backup operations like creating, listing, or restoring backups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: changes to a live environment require confirm: true, and without it the tool performs a dry run. It doesn't explicitly name alternatives or exclusion cases, but the operational prerequisite is clear enough for an agent to know when to invoke it and how.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_set_governance_configEnable or edit managed environmentsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | Yes | Environment id or URL | |
| cloudFlowsMode | No | Sharing limit mode for solution cloud flows | |
| timeoutSeconds | No | Default 600 | |
| cloudFlowsLimit | No | How many people makers may share solution cloud flows with | |
| excludeAnalysis | No | Exclude this environment from the weekly usage digest | |
| includeInsights | No | Show insights on the admin centre home page | |
| protectionLevel | Yes | Standard enables managed environments, Basic disables them | |
| limitSharingMode | No | Sharing limit mode | |
| makerOnboardingUrl | No | Maker onboarding URL | |
| disableGroupSharing | No | Disable sharing with groups | |
| maxLimitUserSharing | No | How many people makers may share canvas apps with | |
| solutionCheckerMode | No | Solution checker validation mode (None, Warn, Block) | |
| checkerRuleOverrides | No | Solution checker rule overrides | |
| makerOnboardingMarkdown | No | Maker onboarding markdown | |
| suppressValidationEmails | No | Do not send validation emails |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It explicitly discloses that the command requires 'confirm: true' to avoid a dry run, mutates a live environment, and runs a specific pac command under the active auth profile. This is strong behavioral transparency for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the main purpose and is generally tight. The phrase 'requires confirm: true' appears twice, which is redundant and adds noise. With that trimmed it would be near-ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 19 parameters and no output schema, so the description needs to clarify the command's effect and preconditions. It covers the key behavioral aspects (confirm, dry run, mutation, profile) but doesn't mention return value or how it surfaces the pac command output. That's a minor gap, not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters, so baseline is 3. The description mentions sharing limits, solution checker mode, and maker onboarding, but these are already obvious from parameter descriptions. It adds no additional meaning about parameter formats, defaults, or relationships beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (turn managed environments on/off) and the governance options it configures (sharing limits, solution checker mode, maker onboarding). It distinguishes this from sibling admin tools by focusing specifically on managed environments governance, and the 'Standard'/'Basic' mapping to protectionLevel reinforces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that this changes tenant governance and mutates a live environment, which tells an agent when to reach for it. However, it doesn't explicitly state when not to use it or name alternative tools (e.g., cs_admin_update_tenant_settings). No exclusions or comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_set_runtime_stateSet environment administration modeA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | Yes | Environment id or URL | |
| runtimeState | Yes | AdminMode or Enabled | |
| timeoutSeconds | No | Default 600 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) | |
| backgroundOperations | No | Background operations state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that it mutates a live environment and requires 'confirm: true' (a dry run otherwise), which is critical behavioral information. Since no annotations are provided, the description carries the full burden, and it adequately discloses the mutating nature and the confirm requirement. It also mentions it runs a specific command, providing transparency about the underlying operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, using two sentences to convey the core purpose and the critical confirm requirement. The key behavioral note about mutation is front-loaded in the first sentencecars. However, there's slight redundancy when it says 'Changes a live environment: requires confirm: true' and then repeats 'Mutates a live environment: requires confirm: true'. This repetition wastes a bit of space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (10 parameters, 2 required) and the rich schema descriptions, the description provides the essential behavioral context (mutation and confirm requirement). However, it doesn't elaborate on return values or error scenarios, and with no output schema, the agent might not know what to expect. The description also doesn't fully explain the 'backgroundOperations' parameter's semantics, relying on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so the baseline is 3. The description doesn't add much beyond what the schema already provides for parameters like 'runtimeState' and 'backgroundOperations', but it does emphasize the 'confirm' parameter's significance. The description doesn't explain the relationship between 'async', 'background', and 'maxAsyncWaitTime' in more detail than the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to put an environment into administration mode or back, and to control background operations. It mentions the underlying command ('pac admin set-runtime-state'), which helps distinguish it from other admin tools. However, it doesn't explicitly name a sibling tool for comparison, so it's clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that it changes a live environment and requires 'confirm: true' to avoid a dry run, which gives important usage context. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like cs_admin_environment_status or cs_set_flow_state. The mention of the 'active pac auth profile' implies usage context but doesn't explicitly state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_show_dlp_policyShow one 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| policyName | Yes | Policy id (GUID); cs_admin_list_dlp_policies shows it | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the behavioral transparency burden. It does add useful context by stating the exact pac command ('pac admin dlp-policy show') and that it uses the active auth profile, and 'show' implies a read-only operation. However, it does not explicitly state that no changes are made, nor does it describe output format, error conditions, or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the tool's purpose and then provide the key execution detail (the pac command and auth profile). Every phrase adds value, and there is no redundant repetition of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward show operation with fully documented parameters sideways, the description covers the core output content ('connector classification and the environments it applies to') and the execution mechanism. No output schema exists, but the description gives enough insight into what the result contains. It is slightly incomplete in not stating any output format or edge cases, but it is largely sufficient for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all five parameters already documented in the input schemaSer the description adds no additional parameter-level meaning beyond 'policy in full' and the underlying command. The baseline of 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('show'), resource ('data loss prevention policy'), and scope ('One ... in full'), and hints at the distinguishing factor from the sibling list tool by emphasizing the full policy details. However, it does not explicitly contrast it with cs_admin_list_dlp_policies, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as cs_admin_list_dlp_policies for browsing policies or other admin tools. It mentions the underlying command and active auth profile, but offers no context for selecting this tool or what prerequisites are needed beyond a policy name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_unregister_applicationUnregister an Entra 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| applicationId | Yes | Application (client) id | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it meets it. It explicitly warns 'Changes tenant configuration' and 'Mutates a live environment: requires confirm: true (a dry run otherwise).' It also names the underlying command and that it uses the active pac auth profile, giving the agent important side-effect and safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core action, but it redundantly repeats 'requires confirm: true' in consecutive sentences and uses both 'Changes tenant configuration' and 'Mutates a live environment' to make similar points. The redundancy is noticeable; a single combined warning would have been tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich and fully documents all six parameters, including confirm, profile, and background behavior. The description adds the essential context about mutation, dry-run behavior, and the underlying pac command. It does not describe return values or error cases, but no output schema exists and the tool is well-covered for an admin unregister operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the confirm parameter's role ('requires confirm: true') and the active auth profile, but these details are already fully captured in the input schema. It does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Remove an Entra application's tenant registration.' It clearly names the exact underlying command ('pac admin application unregister'), and the presence of a sibling cs_admin_register_application makes the contrast obvious. An agent can immediately understand what this tool does and how it differs from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for unregistering an application, changes tenant configuration, mutates a live environment, and requires confirm: true to actually perform the change, otherwise it is a dry run. It does not explicitly name alternatives or when-not-to-use conditions, but the purpose and destructive nature are stated well enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_admin_update_tenant_settingsUpdate 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| settingName | No | Single setting path | |
| settingValue | No | Value for that setting | |
| settingsFile | No | A .json file of settings (from cs_admin_list_tenant_settings) | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states 'Affects the whole tenant' and 'Mutates a live environment: requires confirm: true (a dry run otherwise)', which reveals the mutation risk and the dry-run safety mechanism. It also names the underlying pac command. It does not cover permission requirements or reversibility, but the key behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and front-loads the core purpose ('Change tenant-wide settings'). It includes a useful example and critical warnings about confirm. The only minor redundancy is repeating the confirm requirement twice, which slightly detracts from conciseness but does not waste significant space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior, mutation risk, and the command invocation. However, with 8 parameters, no output schema, and no annotations, it leaves gaps: it does not describe what happens if both settingsFile and settingName are provided, does not mention the return/output behavior, and does not discuss background execution or timeout handling beyond what the schema already states. These are meaningful gaps for a complex administrative tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by providing a concrete example setting path (powerPlatform.governance.disableDeveloperEnvironmentCreationByNonAdminUsers), clarifying the format for settingName, and linking settingsFile to the sibling cs_admin_list_tenant_settings. This goes beyond simple schema repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Change tenant-wide settings' and specifies two modes: from a settings file or one setting at a time, with a concrete example path. It identifies the resource (tenant-wide settings) and the underlying pac command. However, it does not explicitly distinguish itself from sibling tools like cs_admin_set_governance_config, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool: for tenant-wide settings changes, using either a settings file or a single setting, and notes it runs with the active pac auth profile. It does not explicitly state when not to use it or name alternative tools, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_analyze_flow_healthAssess a flow's reliabilityA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lastN | No | Runs to examine; default 50 | |
| flowId | Yes | Flow id (cs_list_flows) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| sampleFailures | No | Failed runs to open for action-level attribution; default 5 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it states 'Read-only', discloses the service and auth scope used ('Power Automate service, cs_login scope flow'), and warns 'Unverified against a live tenant'. It also explains the interpretation logic behind the verdict. It does not mention API call volume, throttling behavior for large lastN, or latency, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with interpretation, usage routing, service/auth, and a caveat following in a tight paragraph. It is denser than strictly necessary and the service/auth sentence could be trimmed, but nearly every clause adds decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey the return values, and it does: failure rate, duration spread (median/p90), failure concentration, and what the verdict means. Combined with the routing rule, auth context, and verification caveat, nothing an agent needs to call and interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters including lastN, sampleFailures, flowId and the auth/workspace overrides are already documented. The description adds only indirect meaning, hinting that failures are attributed at action level (mapping to sampleFailures) but giving no format or default guidance beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific assessment ('reliability of a cloud flow across recent runs') and enumerates the concrete outputs: failure rate, duration spread with median and p90, and failure concentration by action. It also explicitly contrasts itself with cs_explain_flow_run, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule: 'Use it before cs_explain_flow_run when the complaint is it fails sometimes rather than it failed just now.' It names the alternative tool and the diagnostic condition that selects this one over it, which is exactly the routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_auth_whoShow the active pac auth profileC
Who pac is signed in as, and against which environment. Runs 'pac auth who' with the active pac auth profile.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It conveys that the command executes with the active pac auth profile, but it does not disclose whether this is a read-only query, what the output format looks like, or any side effects. For a tool with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with minimal waste, and the primary purpose is front-loaded. It is appropriately sized for a simple inquiry tool, though the second sentence ('Runs pac auth who...') is partially redundant with the underlying intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple informational tool whose parameters are fully documented in the schema and which has no output schema or nested objects. However, because there are no annotations, the description would benefit from noting that this is a read-only query and describing the returned identity/environment details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all four parameters already documented, so the baseline is 3. The description adds little beyond the schema—it only reiterates the profile selection concept that the schema already explains in detail. No additional parameter meaning is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear purpose: shows who pac is signed in as and against which environment, and identifies the underlying command (pac auth who). The resource and verb are specific. It only implicitly differentiates from siblings like cs_env_who and cs_login_status rather than naming them, so it doesn't fully earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives such as cs_env_who, cs_login_status, or cs_list_auth_profiles. No exclusions, prerequisites, or explicit context for selection. The agent must infer applicability from the title and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_backup_tenantBack up the tenant configuration to filesA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Folder to write the backup into (created; existing files with the same names are overwritten) | |
| profile | No | pac auth profile of the admin account; default CPS_ADMIN_PROFILE, then the active profile | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| environments | No | Environments to detail; default: every environment 'pac admin list' returns | |
| includeRoles | No | Default true: the security roles of each environment | |
| includeBackups | No | Default true: the platform backups of each environment | |
| maxEnvironments | No | Default 50 | |
| includeDataverse | No | Default true: flows, connection references, environment variables and agents per environment, when a Dataverse sign-in is cached (cs_login) | |
| includeEnvironments | No | Default true; false captures tenant level only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries full responsibility and does so admirably: it boldly states 'Read-only for the tenant; it only writes files', discloses admin-account execution, and explains the independent-capture behavior with skipped failures. This gives an agent a trustworthy mental model of side effects and resilience without any structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: main action and scope, safety guarantee, auth requirement, and failure fallback. It is front-loaded with the core purpose before enumerating details, and contains no filler or redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters and no output schema, the description covers purpose, safety, auth, and error behavior unusually well. The only notable gap is the lack of an explicit description of the return format beyond the mention of 'skipped' entries; an agent might wonder what the tool returns (file list, summary, etc.), but this is minor given the clarity of everything else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of parameters with descriptions, so the baseline is 3. The description adds a high-level enumeration of captured objects (e.g., DLPs, environment groups, security roles) that maps loosely to include* flags, and it repeats the profile fallback, but it does not provide significant meaning beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Write the tenant's Power Platform configuration to local files', immediately distinguishing it from the many cs_admin_list_* siblings by stating it is a backup/write-to-files operation. It enumerates the exact contents captured (tenant settings, environments, DLP policies, per-environment details, etc.), leaving no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is meant for 'reference, diffing and source control', requires an admin account ('Runs as the admin account'), and notes the partial-failure fallback ('Each capture is independent... reported in skipped'). It does not explicitly name alternative sibling tools, but the use cases and prerequisites are clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_bind_flow_connectionBind a flow's 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.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow (workflow) id (cs_list_flows) | |
| search | No | Narrow the candidate connections by display name or owner | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| activate | No | Turn the flow on after binding; default false | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| connector | No | Connector id, e.g. shared_office365, to choose the reference by connector instead | |
| reference | No | Which connection reference to bind; only needed when the flow has more than one | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| connectionId | No | The connection to bind (its name from cs_list_connections); default: the only usable one for this connector | |
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so: it discloses auto-resolution behavior, that it handles two distinct storage shapes (directly-named connection edited in place vs. a connectionreference row bound for solution flows), that it mutates a live environment and requires confirm: true, and the activation side-effect of activate: true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose and the enables-activation framing, then edge-case behavior, then the mutation confirmation requirement. No wasted clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no annotations and no output schema, the description adequately covers prerequisite (confirm), side effect (activate), and the branching behavior. It omits return/error semantics and success signaling, which are minor given the schema documents defaults and dry-run behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: it explains the reference/connectionId correlation (which is auto-resolved when singular, chosen otherwise) and the two binding paths that govern which parameters apply. It still doesn't clarify connector-vs-reference selection precedence or defaults in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (bind) and resource (a flow's connection reference), and adds the crucial scope that this is the step that enables a flow to be switched on. An agent can distinguish it from cs_set_flow_state, cs_update_flow, and cs_create_connection without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when this tool is needed and how its arguments resolve ambiguity ('Picks the reference and the connection for you when there is only one of each, and asks when there is a choice'), plus the activate-in-same-call path. It stops short of naming sibling alternatives explicitly (e.g. when to bind vs. use cs_set_flow_state or cs_update_connection), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_block_org_agentBlock or unblock an agent for the organisationA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Package id from cs_list_org_agents, e.g. P_19ae1zz1-56bc-505a-3d42-156df75a4xxy | |
| blocked | Yes | true blocks the agent for everyone, false lifts the block | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It discloses that it modifies a live tenant, requires confirm: true, needs specific permissions (CopilotPackages.ReadWrite.All), runs against Graph beta, requires a license, is global-cloud only, and is 'unverified against a live tenant'. This is exceptionally transparent about side effects and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but information-dense, front-loading the purpose before covering scope, requirements, and limitations. Every sentence contributes useful detail without padding, though it could be slightly trimmed for the permission/licensing clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a governance mutation with no output schema, the description covers the essential behavior, side effects, prerequisites, and the confirm flag. It doesn't describe the response format, but that's less critical for a mutation. The honesty about being 'unverified against a live tenant' adds completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters. The description adds some context, notably that 'confirm' is required for actual changes and that 'id' comes from cs_list_org_agents, but these are minor additions beyond the schema. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Block an agent... or lift an existing block'), identifies the resource (agent for the organisation), and distinguishes it from deployment actions ('it does not unpublish or delete the agent'). This clearly differentiates it from sibling tools like cs_list_org_agents or cs_reassign_org_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the governance scope ('across the whole tenant'), contrasts with deployment, and notes it affects all users at once. It also mentions the confirm requirement and permissions. While it doesn't name a specific alternative tool, the context makes its intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_build_flow_definitionBuild a flow definition from stepsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| steps | No | Steps in order; each waits for the previous one to succeed | |
| outputs | No | What the flow answers with (agent-callable and HTTP flows) | |
| trigger | No | Default: 'agent' (When an agent calls the flow) | |
| outputFile | No | Write the definition JSON here as well | |
| description | No | ||
| connectionReferencePrefix | No | Prefix for generated connection reference names, usually your publisher prefix |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states there are no environment side effects, that steps run in order, what the tool returns (definition, connection references, notes), and that it can write to a file. It does not detail validation or error behavior, but the key safety and output profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: purpose and scope, behavior and return value, then related-tool guidance. It is front-loaded with the core purpose and avoids filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters and no output schema, the description gives enough context to invoke it correctly: trigger default, supported step types, ordering, return contents, file-writing option, and prerequisite lookup tools. It could specify the return structure in more detail, but the input schema and this workflow guidance are sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the schema already documents most parameters. The description adds a useful human-readable summary of supported trigger kinds and step types, and clarifies the relationship between the spec and the create/update tools. It does not add much for 'name' or 'description', but the schema and obvious semantics cover those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Compose'), a specific resource ('Power Automate cloud flow definition'), and a clear scope ('without touching any environment'). It also differentiates itself from sibling tools by pointing to cs_create_flow and cs_update_flow as the tools that actually create or update the flow, and enumerates supported trigger and step types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit workflow guidance: use cs_list_connectors and cs_describe_connector first to discover connector ids and operation ids, and feed the same spec to cs_create_flow or cs_update_flow for actual flow creation/replacement. This tells an agent when to use this tool and what to do instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_chatChat with the published agentA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| maxMs | No | How long to wait for replies, ms (default 25000, kept under the client call budget) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| transport | No | auto detects the agent's authentication mode via Dataverse; directline for no-auth/manual-auth agents; sdk for Entra SSO agents | |
| utterance | Yes | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| background | No | Run in the background and return a jobId immediately, then poll cs_job_status. MCP clients cut a tool call off after about 60 seconds; this operation can take much longer, and without this the work is orphaned rather than cancelled. | |
| schemaName | No | ||
| dataverseUrl | No | ||
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| tokenEndpoint | No | Explicit DirectLine token endpoint | |
| conversationId | No | Continue an earlier conversation from cs_chat | |
| directLineSecret | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the load; it does disclose response details (replies, raw activities, sign-in URL) and the continuation mechanism. However, it does not mention long-running behavior, the background flag, authentication requirements, or failure modes, which are significant for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: the first defines the action and result, the second gives continuation guidance, and the third explains a special response. Every sentence earns its place and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, the description covers the essential invocation flow and return behavior. It lacks explicit notes on long-running options and auth, but those are partially available in the parameter schemas; the absence of an output schema is partly mitigated by describing replies, raw activities, and signInUrl.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the structured schema explains most parameters. The description adds value by clarifying the main parameter, utterance, as a single utterance, and by explaining conversationId's role in continuing the conversation; it does not address the few undocumented parameters like schemaName or directLineSecret.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Send one utterance to the published agent' and clearly states the output: 'replies (and raw activities)'. This is distinct from the many sibling tools, such as cs_review_agent or cs_get_org_agent, which are not conversation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear operational context: start with an utterance, continue with conversationId, and handle a sign-in card via signInUrl. It does not explicitly name alternatives or exclusions, so it stops short of full when-to-use/not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_check_driftDetect portal changes since the last syncA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| keepClone | No | full: keep the temporary clone and return its path | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| includeDiffs | No | full: include unified diffs (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It explicitly states 'Both are read-only,' describes quick mode reading Dataverse rows versus full mode running pac copilot clone into a temporary folder, notes auth requirements, and discloses output classifications including local-modified, remote-modified, and conflict. This is strong behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: purpose, mode mechanics, prerequisites, side effects, read-only guarantee, and next-step guidance. The most important scoping information is front-loaded, and the structure flows logically from quick to full to resolution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six optional parameters, no output schema, and no annotations, the description covers prerequisites, mode differences, read-only behavior, and follow-up actions well. It lacks an explicit return format or precise guidance on when to choose quick versus full based on user intent, leaving a small completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, above the 80% threshold, so the schema already documents most parameters. The description adds useful mode-level context, especially the default quick behavior and full-mode diff semantics, but it does not add significant meaning to individual parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find changes made directly in Copilot Studio after the workspace was last cloned, pulled or pushed.' This clearly distinguishes drift detection from sibling operations like cs_push, cs_pull, and cs_check_solution, and the explicit pointer to cs_pull reinforces the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names cs_pull as the resolution path, gives prerequisites for quick mode (cached cs_login, no pac), and explains the trade-off between quick and full modes. It does not explicitly state when not to use this tool or contrast it with sibling status/check tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_check_solutionRun Solution CheckerA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| geo | No | Checker service geography | |
| path | No | Solution zip file(s); glob allowed | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| ruleSet | No | 'Solution Checker' (default), 'AppSource Certification' or a rule set id | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| clearCache | No | Clear the tenant's checker enforcement cache | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| saveResults | No | Store the results in the environment (Solution Health Hub) | |
| solutionUrl | No | SAS URL of a solution zip instead of path | |
| excludedFiles | No | Files to exclude from the analysis | |
| timeoutSeconds | No | Default 1800 | |
| outputDirectory | No | Where to write the results | |
| ruleLevelOverride | No | JSON file with rule level overrides |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden well: it discloses that the tool mutates a live environment, requires confirm: true, performs a dry run otherwise, and only some inputs mutate. It also names the underlying pac command and active auth profile behavior, adding meaningful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, each earning its place: what it does, when to use it, how it executes, and the critical mutation caveat. The most important safety information is near the end but still clearly flagged.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with no output schema and no annotations, the description covers purpose, workflow placement, execution mechanism, and mutation behavior. The parameter schema is rich and 100% covered, but the description could still add a little more about what a successful run returns or how output is structured.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented and the description does not need to compensate. The description adds a general warning about mutation for some inputs and points to the parameter descriptions, but it does not add new semantic detail for any specific parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Analyse solution zip files') and resource ('Power Apps Checker service') and clarifies it writes results locally. It also names the quality-gate role before cs_deploy_solution, which distinguishes it from deployment and other solution-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it as a quality gate before cs_deploy_solution, giving clear context for when it belongs in a workflow. It does not explicitly list when-not-to-use alternatives such as cs_check_drift, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_clone_agentClone an agent to diskA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bot | No | Agent id (GUID) or schema name; omit to be shown the agents in the environment | |
| outputDir | No | ||
| displayName | No | Folder name override | |
| environment | No | Environment id or URL; default active profile | |
| componentCollections | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the creation of a subfolder and the sync stamp side effect, which is valuable. But it does not mention overwrite behavior, required permissions beyond auth, or failure modes if the workspace is not sync-connected. It adds some transparency but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and then key details. Every sentence earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a clone tool with no output schema and no annotations, the description covers purpose, prerequisite (auth), and a critical side effect (sync stamp). It lacks return format and error conditions, but for an agent to call it correctly, the essential information is present. The only notable omission is the componentCollections parameter, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies outputDir by noting it is the parent for the agent-named subfolder, adding meaning beyond the schema. It does not address componentCollections, and with 60% schema coverage, it partially compensates but not fully. The other parameters already have schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (download/clone), the resource (existing agent), and the destination (subfolder under outputDir in a sync-connected workspace). It distinguishes from sibling tools like cs_create_agent or cs_pull by emphasizing the sync stamp and sync-connected workspace, which is unique to this clone operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly mentions the prerequisite of a pac auth profile and the side effect of recording a sync stamp used by cs_check_drift and cs_push, providing context on when to use it. However, it does not explicitly state when not to use or list alternative tools, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_clone_solutionClone a solution into a projectB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| map | No | Mapping XML file for component folders | |
| name | Yes | Solution unique name | |
| async | No | Run the operation asynchronously | |
| include | No | Settings to include in the export (pac solution export --include values) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| localize | No | Extract string resources into .resx files | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| packageType | No | Unmanaged, Managed or Both (default Both) | |
| timeoutSeconds | No | Default 3600 | |
| outputDirectory | No | Output directory | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It openly declares 'Read-only for the environment' and reveals the underlying command ('Runs pac solution clone'), which adds transparency. However, it does not mention that unpacking writes local files, potential side effects on the solution project folder, or any auth failure modes. The description provides some context but omits important behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each carrying distinct information: the core action, the read-only nature, and the underlying command. It is front-loaded with the primary purpose and avoids redundant filler. Slightly more could be said about usage, but the structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters and no output schema, the description is minimal. It does not explain return values, how to handle asynchronous operation (despite an async param), prerequisites like authentication, or expected side effects on the local filesystem. Reliance on the schema is heavy, leaving gaps that an agent would need to research to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents each parameter. The description itself adds no extra meaning to parameters; it only describes the overall operation. The baseline of 3 is appropriate because the schema does the heavy lifting, and the description does not contradict or enrich it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Export a solution... and unpack it into a solution project folder') with a clear resource and result. It also notes the read-only nature for the environment. However, it does not explicitly distinguish itself from sibling tools like cs_pull_solution or cs_export_solution, leaving some potential ambiguity in a large tool set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as cs_pull_solution or cs_check_solution. The description states what it does but gives no context for selection, prerequisites, or exclusions. An agent would have to infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_compare_environmentsCompare a DTAP chainB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| chain | Yes | ||
| agents | No | Agent schema names or ids to clone; default: every agent pac copilot list returns | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| solution | No | Solution unique name to record version/managed state for | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| maxAgents | No | Default 20 | |
| failOnDrift | No | ||
| includeDiffs | No | ||
| strictVariables | No | ||
| includeDataverse | No | Default true: flows, connection references, environment variables and publish state via Dataverse (needs cs_login; skipped silently otherwise) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It states that snapshots are written to <dir>/<label> and reports to <dir>/reports, which implies file creation, but it does not mention whether the operation is read-only or mutating, whether login is required, whether drift detection has side effects, or how failures are handled. The description also omits the impact of parameters like failOnDrift or includeDiffs. This is insufficient for a tool with 11 parameters and no annotation safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with minimal waste. It front-loads the core action (snapshot and compare) and includes the output destinations. It is appropriately sized for the tool's complexity, though the second sentence on output could be clearer. Overall, it is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 11 parameters, 2 required, no output schema, and no annotations, the description is too sparse. It explains the high-level flow but does not cover any of the optional parameters' semantics, nor does it describe the return format beyond 'one report per pair plus the first stage where drift appears'. It doesn't mention prerequisites like login (except indirectly via includeDataverse's schema note), or edge cases like empty chains or unreachable environments. The description is not complete enough for an agent to safely invoke the tool with all defaults or to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 55%, so some parameters are documented in the schema (e.g., agents, clientId, tenantId, includeDataverse). The description adds meaning for chain and dir, clarifying that the chain is ordered and that output goes to specific locations. However, many parameters such as maxAgents, failOnDrift, includeDiffs, strictVariables, solution, and others are not described in the schema, and the description does not compensate. The description adds some value beyond the schema but falls short of bridging the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: it snapshots environments in a chain and compares adjacent pairs. It also mentions the output (reports) and the first drift stage. It is distinct from siblings like cs_snapshot_environment (single snapshot) and cs_compare_snapshots (compare two snapshots), but it does not explicitly name those alternatives. The purpose is specific enough for an agent to understand the action, though sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case (comparing an ordered DTAP chain) and explains the output. However, it does not explicitly state when to use this tool versus alternatives such as cs_check_drift or cs_compare_snapshots. The guidance is implied by the nature of the tool (chain comparison) but lacks explicit exclusions or routing to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_compare_flow_runsCompare a failed flow run with one that workedA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The failed run (cs_list_flow_runs) | |
| flowId | Yes | Flow id (cs_list_flows) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| searchRuns | No | How far back to look for a successful baseline; default 50 | |
| baselineRunId | No | Run to compare against; default the most recent successful one | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| compareTriggerData | No | Also compare what the trigger handed each run |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it declares read-only behavior, the Power Automate service dependency and cs_login 'flow' scope, output semantics (key names only, never values), and candidly flags it is unverified against a live tenant. Missing only things like rate limits or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then layers on output contents, the trigger-data caveat, baseline default, and operational constraints. Dense but every sentence carries information; slightly long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must describe returns — and it does, enumerating the three comparison outputs. For a 9-parameter tool it covers purpose, defaults, and limits adequately, though it could say more about how results are shaped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), and the description adds meaning beyond it: it clarifies the baseline defaults to the most recent successful run and that compareTriggerData compares trigger payloads by key name only, not value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (diff) and resource (failed vs successful flow run) and immediately frames the goal (separate data problem from logic problem). An agent can distinguish it from cs_get_flow_run or cs_explain_flow_run without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it — a failed run with an available successful baseline — and explains the default baseline selection. It does not explicitly name rival tools (cs_explain_flow_run, cs_get_flow_run) or state exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_compare_snapshotsCompare two 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).
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | Snapshot folder (earlier stage, e.g. DEV) | |
| b | Yes | Snapshot folder (later stage, e.g. TEST) | |
| reportDir | No | Default: parent of b | |
| failOnDrift | No | ||
| ignoredKeys | No | ||
| includeDiffs | No | Default true: unified diffs in the report | |
| strictVariables | No | Treat differing environment variable values as drift |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses side effects (writes .md and .json files), what it filters out (noise like ids and audit info), and the failOnDrift error behavior. It does not explicitly state that the operation is read-only on the snapshots, but 'offline diff' strongly implies no mutation. It lacks details on permissions or prerequisites, but the disclosed behavior is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the core purpose and scope front-loaded. The second sentence is dense but efficient, covering output and the failOnDrift behavior. No fluff or repetition. Slightly long second sentence but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters, no output schema, and no annotations. The description covers the main output (report files) and the failOnDrift semantics, but leaves ignoredKeys unexplained and does not mention return value details for normal (non-fail) cases. It also omits whether the operation requires a specific working directory or project context. Given the complexity, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71% (5 of 7 params have descriptions). The description adds meaning for failOnDrift (pipeline gate usage) but does not explain ignoredKeys, which lacks a schema description. includeDiffs and strictVariables are already described in the schema, so the description adds no value there. The description partially compensates for the uncovered parameter but misses ignoredKeys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('compare'), resource ('two snapshot folders'), and enumerates exactly what is compared (solution version, per-agent YAML, flows, connection refs, env vars, unpublished changes). It also distinguishes itself from potential siblings by calling out 'offline diff' and writing a report, which sets it apart from online comparison or drift-check tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: 'offline diff' suggests it is for static snapshot comparison rather than live environments, and the mention of 'failOnDrift returns an error result (for pipeline gates)' explicitly ties it to CI/CD pipeline usage. However, it does not name alternative tools like cs_compare_environments or cs_check_drift, nor state when to prefer this over them, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_agentCreate a new 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent display name | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| template | No | classic only | |
| projectDir | Yes | Target directory (must be empty or not exist) | |
| schemaName | No | ||
| environment | No | Environment id or URL to bootstrap into (creates a live agent) | |
| instructions | No | ||
| solutionName | No | Unique name of the solution to create the agent in (requires environment) | |
| authoringMode | No | ||
| createSolution | No | Create solutionName if it does not exist | |
| publisherPrefix | Yes | Solution publisher prefix, e.g. contoso; must match the publisher of an existing target solution |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well. It discloses side effects (creates workspace, connects live agent, imports into solution via init/pack/import/clone), prerequisites (auth profile, confirm:true for live changes), and behavior differences based on parameters. This goes beyond the schema and tells the agent what will actually happen.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense but focused paragraph that front-loads the core action and then walks through modes and parameters. Every sentence adds value, and there is no fluff. It could be slightly restructured for readability, but it's appropriately concise for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no output schema, and no annotations, the description is largely complete for the main workflows. It covers the major decision branches (environment, solutionName, authoringMode) and mentions prerequisites. Gaps remain: it doesn't clarify return values, the role of template/schemaName/instructions, or error conditions. Still, for a tool with many options, it provides enough to invoke it correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to key parameters (environment, solutionName, createSolution, authoringMode, confirm) that the schema alone doesn't convey, such as the workflow triggered by solutionName. However, it omits semantics for template, schemaName, and instructions, which are only described in the schema (or not at all). With 73% schema coverage, the description compensates well for the critical parameters but not exhaustively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'create a new agent workspace on disk' and elaborates on the two main modes (local scaffold vs. live agent). It distinguishes from siblings like cs_update_agent and cs_delete_agent by focusing on creation. The mention of 'pac copilot init' gives a concrete mental model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear conditional usage guidance: without 'environment' it's a local scaffold, with 'environment' it creates a live agent (requiring auth profile and confirm:true), and with 'solutionName' it places the agent in a specific solution. It also contrasts authoringMode options. However, it doesn't explicitly mention when to prefer this over close siblings like cs_clone_agent or cs_init, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_agent_from_templateCreate an agent from a 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| solution | Yes | Unique name of the solution to create the agent in | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| schemaName | Yes | Schema (unique) name of the new agent, e.g. contoso_HelpDesk | |
| displayName | Yes | Display name of the new agent | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| templateFile | Yes | Template YAML from cs_extract_agent_template | |
| timeoutSeconds | No | Default 900 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does well: it discloses that the tool mutates a live environment, that confirm:true is required for a real change, and that without it the run is a dry run. It also reveals the underlying command and active profile dependency. It could add more about side effects or failure modes, but the critical mutation semantics are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The first sentence states the core action and source, the second names the mechanism, and the third flags the critical mutation behavior. Every sentence earns its place and is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema, the description covers the essential behavioral context: creation source, underlying command, live-environment mutation, and dry-run gating. It does not describe return values or result format, which would be useful since no output schema exists, but the parameter schema and background/jobId handling fill most remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema by clarifying that templateFile comes from cs_extract_agent_template and that confirm:true controls dry-run vs. live mutation, which the schema only partially conveys. This lifts it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create a new agent') and resource ('in a solution from a template'), and explicitly ties the template to cs_extract_agent_template. This clearly differentiates it from the plain cs_create_agent sibling and other agent operations. Even without naming the alternative, the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: the tool creates from a template produced by another tool, runs through pac, and requires confirm:true for an actual mutation. It does not explicitly state when to prefer this over cs_create_agent or list exclusions, but the prerequisite and dry-run behavior provide strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_auth_profileCreate a pac 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Profile name (max 30 characters) | |
| cloud | No | Cloud instance (Public, UsGov, UsGovHigh, UsGovDod, China) | |
| tenant | No | Tenant id (required with applicationId) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| password | No | Password (masked in logs) (masked in logs and results) | |
| username | No | User name for username/password auth (not recommended) | |
| background | No | Run in the background and return a jobId immediately. Use this for interactive sign-in: pac opens a browser and waits, which would otherwise outlive the client's call timeout. Poll cs_job_status. | |
| deviceCode | No | Use the device-code flow for interactive sign-in (blocks until done) | |
| environment | No | Default environment for the profile (id, URL, unique or partial name) | |
| clientSecret | No | Client secret (masked in logs) (masked in logs and results) | |
| applicationId | No | App registration (client) id | |
| timeoutSeconds | No | Default 600 | |
| githubFederated | No | GitHub federated credential (needs tenant and applicationId) | |
| managedIdentity | No | Use the default Azure identity | |
| certificateDiskPath | No | Certificate file for certificate auth | |
| certificatePassword | No | Certificate password (masked in logs) (masked in logs and results) | |
| azureDevOpsFederated | No | Azure DevOps federated credential (needs tenant and applicationId) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses browser-based sign-in, immediate jobId return for background runs, blocking behavior without background, and the terminal requirement for device code. It omits the non-background return value and whether the new profile becomes active, but the key operational behaviors are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, starting with the core purpose, then non-interactive modes, then interactive instructions, then caveats. Every sentence adds operational value, though the long parentheticals make it slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter tool with no output schema and no annotations, the description covers many important operational details but leaves gaps: it does not state what a successful non-background call returns, whether the created profile becomes the active profile, or how this relates to listing/selecting profiles afterward. These are material for correct invocation and follow-up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by grouping parameters into auth modes (service principal, certificate, managed identity, federation) and clarifying that interactive flows need name, environment, and background. This goes beyond the individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action: create a pac authentication profile, and enumerates the supported authentication modes. It does not explicitly contrast with sibling auth-profile tools (list/select/delete), but the creation purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance for interactive vs non-interactive flows, explicitly recommends background: true for interactive sign-in, and warns that device code is unusable because the server provides no stdin. It does not mention alternative auth-profile tools, but for creation the main decision points are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_connectionCreate a service-principal Dataverse 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | Yes | Connection display name | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| tenantId | Yes | Entra tenant id | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| clientSecret | Yes | Client secret; prefer a secret from a vault, it is masked in logs (masked in logs and results) | |
| applicationId | Yes | App registration (client) id | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses that the tool mutates a live environment and requires confirm: true (otherwise a dry run), which is a critical behavioral trait. It also states the underlying pac command and authentication method. It doesn't describe reversibility or failure modes, but the mutation and confirm requirement are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then adds scope and behavioral notes, and ends with the mutation requirement. Every sentence earns its place and the text is highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 params, 4 required), the description adequately covers purpose, scope, execution method, and the key mutation behavior. The schema handles parameter details, and there is no output schema, so return values aren't expected. The description is complete for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents all parameters. The tool description does not add parameter-specific meaning beyond what the schema provides; it reinforces the confirm requirement but that is already in the schema's parameter description. Therefore, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a Dataverse connection using an app registration (application id + client secret) for service-principal authentication. It explicitly distinguishes this from connector connections (SharePoint, Outlook, MCP servers), which must be created in the portal, thus separating it from sibling tools like cs_update_connection and cs_delete_connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'This is the only connection kind pac can create' and notes connector connections are handled in the portal, giving clear guidance on when to use this tool versus alternatives. It also mentions it runs 'pac connection create' with the active pac auth profile, providing operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_deployment_settingsCreate or update 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.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | Solution zip (or use solutionDir from cs_pull_solution) | |
| regenerate | No | Recreate the file even if it exists (mappings are lost) | |
| solutionDir | No | Directory written by cs_pull_solution | |
| settingsFile | No | Default <solutionDir>/deployment-settings.json or next to the zip | |
| copilotAgents | No | agent schema name -> Entra security group id allowed to use the agent in the target | |
| connectionReferences | No | logicalName -> connectionId in the target environment | |
| environmentVariables | No | schemaName -> value for the target |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does reveal that the result lists still-unmapped values, which is useful. However, it does not clearly disclose overwrite behavior, side effects on existing settings files, or potential data loss beyond what is already stated in the regenerate parameter schema. The mutation aspect is implied by 'create or update' but not fully elaborated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the command name and primary purpose. It avoids unnecessary words, though the single-sentence structure with semicolons is a bit dense. Each clause adds useful information: what the file contains, how to fill values, and what the result reports.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, no annotations, no output schema), the description provides a good starting point but is not fully complete. It explains the core mapping function and output, but does not mention copilotAgents, the settings file default, or how to obtain the solution zip/solutionDir beyond what the schema already states. The schema fills many gaps, but the description alone would leave an agent uncertain about the full workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds semantic value by explaining what the settings JSON contains (maps connection references to connection IDs and environment variables to target values), which complements the schema's field descriptions. It also clarifies that passing connectionReferences/environmentVariables fills values, giving the agent a clearer mental model of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: creating or updating deployment settings by mapping connection references and environment variables. The title and description use a specific verb and resource ('create/update deployment settings', 'pac solution create-settings'). It does not explicitly differentiate from sibling tools like cs_create_solution, but the deployment-settings scope is fairly distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some how-to guidance ('Pass connectionReferences / environmentVariables to fill values') and hints at the tool's role in solution deployment. However, it does not state when to use this tool versus alternatives, nor does it describe prerequisites or exclusions. Usage is implied rather than explicitly framed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_flowCreate a cloud 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Flow display name | |
| steps | No | Steps in order; each waits for the previous one to succeed | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| outputs | No | What the flow answers with (agent-callable and HTTP flows) | |
| trigger | No | Default: 'agent' (When an agent calls the flow) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| solution | No | Unique name of the solution to create it in | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| clientData | No | The whole clientdata document, when you have one (from cs_get_flow of another flow, for example) | |
| definition | No | A ready-made Power Automate definition, instead of steps | |
| description | No | ||
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| connectionReferences | No | properties.connectionReferences, when you pass a definition rather than steps | |
| connectionReferencePrefix | No | Prefix for generated connection reference names, usually your publisher prefix |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the flow is created switched off (with the reason), that it changes a live environment and requires confirm: true, and explains the activation dependency. This is transparent about side effects and prerequisites, though it does not discuss permissions or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences and each one contributes essential information: the core purpose, the created-off behavior with reason, the agent-callable path, and the confirmation requirement. It is well-structured, though slightly long, but appropriate given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 16 parameters, complex nested schemas, and no output schema, the description gives a solid high-level overview and references other tools for details (cs_build_flow_definition). It covers the critical workflow steps and side effects. It does not describe return values, but the absence of an output schema makes that less critical. Overall, it is adequate for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 94%, so the schema already documents parameters in detail. The description adds context by referencing cs_build_flow_definition for the step spec and mentioning 'solution' and 'confirm', but it does not add significant semantics beyond what the schema provides. It meets the baseline for high coverage without over-delivering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new Power Automate cloud flow, and distinguishes between two input modes (step spec or ready-made definition). It also differentiates from siblings like cs_build_flow_definition (which builds definitions) and cs_update_flow (which updates), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear workflow: create the flow off, bind connection references, then use cs_set_flow_state to activate. It also explains how to make the flow agent-callable (trigger type Request/kind Skills and cs_add_tool type 'flow'). It does not explicitly state alternatives, but the references to related tools give strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_solutionCreate an unmanaged 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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| workDir | No | Where the manifest and zip are written (default <workspace>/.cs-solutions/<uniqueName>) | |
| uniqueName | Yes | e.g. contoso_Agents | |
| displayName | No | ||
| environment | No | Environment id or URL. Defaults to the active pac auth profile. | |
| publisherName | No | ||
| publisherPrefix | Yes | 2-8 lowercase characters, e.g. contoso |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that without confirm it performs a dry run, that it may create a publisher, and that it operates in a live environment. This is meaningful behavioral context for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no redundancy. The core purpose is front-loaded, followed by the usage context and the confirm requirement. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema, the description covers purpose, usage, and the key behavioral requirement (confirm). It doesn't mention conflict handling or error cases, but these are less critical and could be derived from schema defaults and sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, above the 50% threshold, so the baseline is 3. The description adds a bit of meaning by clarifying that confirm is required and that uniqueName serves as the solution container name referenced by cs_create_agent, but it does not elaborate on the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action: create an unmanaged solution (and publisher if missing) via a specific mechanism (packing empty manifest, importing with pac). It also mentions the relationship to cs_create_agent, which helps distinguish it from creation-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States an explicit use case: prepare container before cs_create_agent. Mentions the confirm: true requirement, which is a necessary precondition. Lacks explicit 'when not to use' or alternatives, but the target scenario is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_create_test_set_csvCreate an evaluation test set (CSV for import)A
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cases | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| outputPath | No | Default <workspace>/../<agent>-testset.csv | |
| maxSuggested | No | ||
| suggestFromWorkspace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the max 100 cases, the import-once workflow, and that suggestFromWorkspace derives cases from topics, starters, and knowledge. It doesn't mention side effects like overwriting an existing file at outputPath, but the core behavioral traits are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the core output format, the workflow constraint, and the suggestion behavior. Front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description covers the essential workflow, format, limits, and the key parameter behavior. It could mention what happens on overwrite or how maxSuggested interacts with suggestFromWorkspace, but the agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, so the description must compensate. It explains the cases structure (columns Question, Expected response; max 100) and the suggestFromWorkspace behavior, which adds meaning beyond the bare schema. It doesn't detail maxSuggested or outputPath defaults, but the schema already documents outputPath and workspace defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Write'), a specific resource (the CSV the portal's Evaluation page imports), and the exact columns and limits. It also distinguishes itself from related tools like cs_run_evaluation and cs_list_test_sets by explaining the file is imported once in the portal and runs are automated separately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says test sets cannot be created through the API, so the file must be imported once in the portal, and that runs/results are automated via cs_run_evaluation. It also explains when suggestFromWorkspace is useful. This gives clear when-to-use and alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_delete_agentDelete an agentA
pac copilot delete: permanently delete an agent from the environment. Requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| bot | Yes | Agent id or schema name | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| environment | No | Environment id or URL. Defaults to the active pac auth profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'permanently delete' and the confirm requirement, which is useful for a destructive operation with no annotations. However, it does not explain the dry-run behavior without confirm, environment defaulting, or other side effects; the schema partially covers the confirm semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with a command prefix, clear action, and key constraint. No filler or redundant content; it is easy to parse and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete operation with fully documented parameters, the description plus schema covers the core invocation needs: what is deleted, permanence, the required bot parameter, and the confirm gate. It lacks usage alternatives and return/output context, so it is not fully complete, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents bot, confirm, and environment. The description repeats 'confirm: true' but adds no parameter meaning beyond what the schema provides, keeping it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('delete'), resource ('agent'), and scope ('from the environment'), with the qualifier 'permanently' clarifying the destructive action. This clearly distinguishes it from sibling tools like cs_quarantine_agent, cs_update_agent, or cs_delete_solution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as cs_quarantine_agent or cs_update_agent. The only directive is 'Requires confirm: true,' which is a prerequisite rather than a usage context or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_delete_auth_profileDelete a pac 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Profile name | |
| index | No | Profile index | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does provide useful behavioral context: it removes a profile, is limited to the local credential store, and invokes 'pac auth delete' with the active profile. However, it does not warn that deletion is irreversible or explain what happens if the active profile is removed, which would be valuable for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the primary purpose and the key constraint, then add the underlying command. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a straightforward delete operation with a fully described schema. However, there is no output schema and no mention of return values, errors, irreversibility, or whether at least one of name/index is required, leaving some operational ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all parameters, so the baseline is 3, but the description adds meaning by clarifying that deletion is 'by index or name' and by noting the local credential store scope. This helps an agent understand that name and index are alternative selectors and that the profile parameter interacts with the active profile context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Remove a pac auth profile', and adds the selection mechanism ('by index or name') plus a key scope constraint ('local credential store only'). This clearly distinguishes it from sibling tools like cs_create_auth_profile, cs_list_auth_profiles, and cs_select_auth_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when a pac auth profile needs to be removed. It also gives a meaningful exclusion ('local credential store only'), but it does not explicitly name alternatives or provide contrast with related auth profile tools, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_delete_connectionDelete a 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| connectionId | Yes | Connection id (cs_list_connections) | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the destructive nature (flows stop working), the mechanism (runs pac connection delete), and the confirm flag behavior (dry run without it). This is strong but doesn't mention permission requirements or whether deletion is reversible, so it's slightly incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no fluff. The first sentence states the action and side effect, the second gives the underlying command, and the third explains the confirm requirement. Each sentence earns its place and the key warning is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and no annotations, the description covers the essential context: destructive effect, dry-run behavior, and underlying command. It doesn't mention return values or background execution, but those are covered in the schema descriptions. It's adequate for an agent to invoke correctly, though it could explicitly state that deletion is irreversible without a backup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema; it reiterates the confirm requirement and points out that connectionId comes from cs_list_connections, but these are already in the schema. No additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Delete a connection by id.' It also names the side effect (flows/tools stop working until rebound) and the underlying command (pac connection delete). This clearly distinguishes it from siblings like cs_update_connection or cs_create_connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: to permanently remove a connection, and it warns about the impact on bound flows/tools. It also explains the critical precondition that confirm:true is required to avoid a dry run. However, it does not explicitly name alternatives or exclusion criteria, so it stops short of a full when/not-when guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_delete_flowDelete a cloud 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.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow (workflow) id (cs_list_flows) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and does so: it states the action is irreversible, mutates a live environment, breaks agent tools that referenced the flow, is blocked for managed flows, and requires confirm: true (otherwise a dry run). Permission/constraint and side-effect surface are all disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the destructive action, then preconditions, then the confirm gate. Every clause carries a distinct operational fact (irreversibility, dependency breakage, turn-off requirement, managed-flow exception) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 7-parameter mutation tool with no annotations and no output schema, the definition covers the failure modes an agent needs before calling: irreversibility, live-environment impact, dependency consequences, managed-flow exclusion, and the confirm dry-run behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains flowId, confirm (dry run), and the credential/environment overrides. The description reinforces the confirm: true requirement but adds no syntax, format, or defaulting detail beyond what the schema states. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource with scope ('Remove a cloud flow from the environment for good'), and it explicitly separates itself from near-siblings by naming cs_get_flow (read-first) and cs_set_flow_state (must be off before deletion). An agent can distinguish this from cs_update_flow, cs_set_flow_state, and cs_delete_solution without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions and a fail-out path: read with cs_get_flow first, ensure the flow is turned off via cs_set_flow_state, and for managed flows uninstall the originating solution instead. That is genuine when-to-use and when-not-to-use guidance tied to named alternatives, not inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_delete_solutionDelete a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Solution unique name | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| environment | No | Environment id or URL. Defaults to the active pac auth profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral transparency burden. It discloses the destructive nature, clarifies that unmanaged deletions preserve components while managed deletions remove them, and emphasizes that confirm must be true for the operation to execute. This is meaningful behavioral context beyond the raw schema, though it does not mention auth requirements or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that efficiently conveys multiple key distinctions: unmanaged vs managed behavior, component retention vs removal, and the confirm requirement. It is not padded with filler, though it begins with 'pac solution delete,' which is partly redundant with the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description provides the critical behavioral distinction between managed and unmanaged solutions and the confirm gate. It does not mention return values or prerequisites, but the schema already covers the confirm dry-run behavior and environment parameter, so the description is sufficient for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the important nuance that confirm must be true, but the schema already states that confirm is required to make a live change and that omitting it produces a dry run. The description does not significantly deepen understanding of the parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('delete') and the resource ('solution'), and further distinguishes the two modes: unmanaged solution container deletion with components retained, and managed solution uninstall with components removed. This precise scoping makes it easy to tell apart from sibling deletion tools like cs_delete_connection or cs_delete_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool through its detailed definition, but it does not explicitly state when to use this tool over alternatives or mention exclusions/prerequisites. There is no 'use this when...' guidance, so usage is inferred rather than explicitly directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_deploy_pipelineDeploy through a Power Platform 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| wait | No | Wait until the deployment finishes | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| stageId | Yes | Deployment stage id (cs_list_pipelines with pipeline) | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| newVersion | Yes | Version to deploy as | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| solutionName | Yes | Solution unique name | |
| currentVersion | Yes | Current solution version | |
| timeoutSeconds | No | Default 3600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool mutates a live environment and that confirm: true is required to perform a change, with anything else being a dry run. It also reveals the underlying command (pac pipeline deploy) and the auth context (active pac profile). It does not detail rollback, output format, or failure states, but the core safety behavior is explicitly covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences: it front-loads the tool's place among siblings, names the command and profile, and closes with the mutation caveat. No filler or repetition; every sentence carries a distinct purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no annotations and no output schema, the description covers the selection-critical context (when to use, alternative, stageId provenance, destructive behavior) without forcing an agent to infer the core safety contract. It does not explain the required currentVersion/newVersion semantics or background/wait behavior, but these are present in the schema and would not need repeating.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema covers all 11 parameters, the description adds meaning beyond field names: it links stageId to cs_list_pipelines and clarifies confirm's role as the gate between a mere dry run and an actual live-environment mutation. That is extra and useful semantic information beyond what the static schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('deploy a solution to a stage') and resource ('stage'), and it directly distinguishes the tool from cs_deploy_solution by providing the exact condition ('when the tenant uses Power Platform pipelines'). It also anchors stageId to cs_list_pipelines, making the tool's scope unmistakable among a large sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells an agent when to select this tool over the closest alternative ('alternative to cs_deploy_solution when the tenant uses Power Platform pipelines'), and connects stageId to its source tool. It also flags the dry-run vs. real mutation difference, which is the critical decision an agent must make before execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_deploy_solutionDeploy a solution to another environment (1:1)A
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| srcFolder | No | Unpacked solution folder to pack and deploy | |
| unmanaged | No | With solutionDir: deploy the unmanaged zip instead of the managed one | |
| solutionDir | No | ||
| settingsFile | No | ||
| allowUnmapped | No | ||
| publishAgents | No | Default true: pac copilot publish for each agent after import | |
| forceOverwrite | No | ||
| stageAndUpgrade | No | ||
| skipLowerVersion | No | ||
| targetEnvironment | Yes | Environment id or URL to deploy into | |
| maxAsyncWaitMinutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden and does well: it discloses that the tool publishes every Copilot Studio agent, blocks on unmapped connection references/environment variables unless allowUnmapped is set, requires confirm, and packs srcFolder before deployment. It does not detail overwrite or upgrade behavior, but the key side effects and blocking conditions are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the primary action first, then source options, then constraints. Every sentence adds useful information without repetition or filler, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter tool with no annotations and no output schema, the description covers the essential operational context: source precedence, managed/unmanaged behavior, unmapped-reference blocking, and the confirm gate. It does not cover optional upgrade/overwrite flags or return behavior, but the core invocation path is adequately specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, so the description is expected to compensate. It adds meaning for the source-related parameters (zip, solutionDir, srcFolder, unmanaged), settingsFile, allowUnmapped, confirm, and targetEnvironment. However, forceOverwrite, stageAndUpgrade, skipLowerVersion, and maxAsyncWaitMinutes are not explained beyond their names, leaving some invocation ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly define the action: deploying/importing a solution into another environment with a deployment settings file, then publishing Copilot Studio agents. It differentiates itself from generic import or publish siblings by specifying source formats, managed/unmanaged behavior, and post-import publish steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context about acceptable sources (zip, solutionDir, srcFolder) and the confirm requirement, but it does not explicitly state when to use this tool versus closely related siblings like cs_import_solution, cs_push, or cs_deploy_pipeline. There is no exclusion or alternative guidance, so the agent must infer the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_describe_connectorDescribe a connector's operationsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| connector | Yes | shared_<name> or a display name | |
| operation | No | Filter operations by id or summary | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| includeInternal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden, and it does disclose meaningful behavior: it may read from cache or fetch live, it caches under .cs-catalog/<environment>/connectors/<name>.json, and it marks MCP-capable connectors. It does not cover authentication/error behavior in depth, but the read/cache nature is sufficiently transparent for a non-destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core behavior is front-loaded, followed by workflow context and caching path. Every sentence adds useful information and the structure makes the tool's purpose and scope immediately apparent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, it is helpful that the description states what return information may appear (operationId, parameters, response fields, MCP-capability). The tool has 8 parameters, but the schema already describes most; the description adds the key high-level context and caching path while leaving only minor optional-parameter semantics unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes most parameters well, and the description adds some useful meaning to refresh by explaining caching. However, the description does not itself clarify includeInternal, operation, or environmentId beyond the schema text, and refresh itself has no schema description, so the parameter meaning is only partially reinforced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (a connector's OpenAPI definition), the operation (fetch or read from cache), and the concrete output (operations with operationId, parameters, response fields, MCP-capability flag). It also anchors the tool in the workflow by saying it is exactly what cs_add_tool needs, making it distinguishable from the many other describe/list tools in this family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the tool is what cs_add_tool needs and is used by cs_validate, so an agent knows when it is relevant. It does not go one step further to give exclusions, such as 'for just listing connector names, use cs_list_connectors instead', but the downstream context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_describe_solutionDescribe a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Solution unique name | |
| workDir | No | Where to put the export and unpacked source (default <workspace>/.cs-solutions/<name>) | |
| environment | No | Environment id or URL. Defaults to the active pac auth profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly states the operation is an unmanaged async export, unpacking happens locally, and the environment remains read-only. It does not detail async result retrieval or output format, but the core side effects and safety profile are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core action and then lists the inventory categories compactly. Every phrase earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, local side effects, environment safety, and the expected inventory contents, which is sufficient for an agent to decide to call it. The main gap is the lack of an explicit output/return format, especially given the async nature, but the inventory list provides a strong signal of what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented. The description adds useful operational context (unmanaged, async, local unpack) but does not need to restate parameter semantics; it provides no additional per-parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific actions (export, unpack, inventory) and the resource (a solution). It also enumerates exactly what is inventoried, making it easy to distinguish from sibling tools like cs_check_solution or cs_pack_solution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for inspecting a solution's contents without modifying the environment, and the 'Read-only for the environment' note gives a clear safety cue. However, it does not explicitly contrast it with alternatives such as cs_check_solution or cs_describe_connector, or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_describe_workspaceDescribe the workspaceC
Inventory of an agent workspace: settings, instructions, topics (with trigger phrases), knowledge sources, tools, flows, triggers, variables, connection references, sync metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects and expectations. It only says 'inventory' and lists categories; it does not state that the operation is non-mutating, what the output format is, or how failures/errors are handled. This is below the full burden placed on a description when annotations are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous words and leads with the resource scope before listing components. The verbose list is easy to scan, and the structure works for this purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool with no output schema and no annotations, the description provides a clear inventory of what will be returned. It doesn't mention edge-case behavior, error handling, or output representation, but for a read-style listing tool this is a reasonable yet not fully complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the only parameter, including the default CSP_WORKSPACE/current-directory behavior, so the description doesn't need to add more. The tool description contributes an understanding of what the parameter influences but does not explain syntax or the parameter directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (agent workspace) and enumerates the specific components it inventories, which makes the tool's scope distinct from solution or connector describe tools. It is slightly noun-like ('Inventory of...') rather than an explicit verb, but the title and item list make the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus siblings like cs_status, cs_describe_solution, or the list-* commands. No prerequisites, alternatives, or conditions are mentioned, leaving selection purely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_edit_knowledgeEdit a knowledge sourceB
Change a knowledge source file: name, description, site URL, includeSubPages, trigger condition (null removes it), additional search terms.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| rename | No | ||
| knowledge | Yes | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No | ||
| includeSubPages | No | ||
| triggerCondition | No | ||
| additionalSearchTerms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose one specific behavior: trigger condition with null removes it. However, it does not state whether edits are additive or replace the entire file, whether permissions are required, or what the operation does to unspecified fields. This is partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently lists the modifiable fields without excessive padding. It is front-loaded with the operation and resource. The list is somewhat run-on, but it remains concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, no annotations, and no output schema, the description is too short. It omits the purpose of the required 'knowledge' parameter, does not clarify the effect of omitting optional fields, and provides no information about return values or side effects. An agent would have to infer these details from the schema, which is largely undescribed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 13% (only workspace has a description in the schema), so the description must compensate. It lists the fields but does not map them to the actual parameter names (e.g., 'name' vs the 'rename' parameter) and does not explain the required 'knowledge' parameter's purpose. It adds some meaning for triggerCondition (null removes it) but leaves most parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation as 'Change a knowledge source file' and lists the specific fields (name, description, site URL, includeSubPages, trigger condition, additional search terms). This distinguishes it from the sibling cs_add_knowledge_source, which focuses on creation rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit mention of when to use this tool versus alternatives like cs_add_knowledge_source. The verb 'Change' implies it is for editing existing sources, but no alternative is named or exclusionary condition stated. Usage is thus only implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_edit_toolEdit a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | Tool name, file stem or path | |
| rename | No | ||
| addInputs | No | ||
| setInputs | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| outputMode | No | ||
| description | No | ||
| operationId | No | ||
| removeInputs | No | propertyNames to drop | |
| connectionMode | No | ||
| modelDescription | No | ||
| modelDisplayName | No | ||
| connectionReference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that validation runs afterwards ('Validates afterwards'), which is useful, and clarifies that modelDisplayName/modelDescription are routing keys. However, it doesn't mention side effects, reversibility, prerequisites, or what happens if validation fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence that front-loads the core action and lists all editable aspects without filler. It could be better structured (e.g., grouping related fields) but is still concise and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex 13-parameter mutating tool with no annotations and no output schema. The description gives a high-level overview but does not explain several parameters, validation failure behavior, or how to target the tool file reliably. An agent would likely need more detail to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (23%), and the description partially compensates by mapping fields like 'inputs (set / add / remove)' to setInputs/addInputs/removeInputs and explaining modelDescription/modelDisplayName. But it does not clarify most parameters (e.g., connectionReference, operationId, rename semantics), leaving gaps for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Change') with a clear resource ('an existing tool file') and enumerates the editable fields. This distinguishes it from sibling tools like cs_add_tool (create) and cs_edit_topic/cs_edit_knowledge (different components).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'an existing tool file' implies this is for modifying an already-created tool, but it never explicitly states when to use this over cs_add_tool or other alternatives. No when-not or alternative routing is provided, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_edit_topicEdit a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Topic name, file stem or path | |
| rename | No | ||
| priority | No | null removes the priority | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| description | No | ||
| appendActions | No | ||
| insertActions | No | ||
| removeActionIds | No | ids of top-level nodes (see cs_describe_workspace or the file) | |
| addTriggerPhrases | No | ||
| setTriggerPhrases | No | ||
| removeTriggerPhrases | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the topic is changed 'in place', that the comment header is preserved, that nodes can be removed by id, and that the file is validated afterwards. This gives the agent a sense of mutation and post-conditions, though it does not mention reversibility, permissions, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core action ('Change an existing topic in place') and then lists operations. It avoids fluff and includes a relevant behavioral note (validation). It is efficient, though the long list of operations makes it slightly less scannable than a bulleted breakdown.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, nested action objects, no output schema), the description is incomplete. It does not explain the return value, error conditions, or the workspace parameter's behavior. It references cs_add_topic for node specs but does not detail them. The validation note is helpful but insufficient for an agent to fully understand consequences and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 36%, so the description must compensate. It explains the purpose of several parameters (rename, description, trigger phrases set/add/remove, priority, append/insert nodes, remove top-level nodes) but does not describe workspace semantics, the exact structure of trigger phrase arrays, or the null behavior for priority. It references cs_add_topic for node spec, which helps but is indirect. Overall, it adds moderate meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes an existing topic in place, and enumerates the supported edit operations (rename, description, trigger phrases, priority, node append/insert, node removal). This differentiates it from cs_add_topic which creates new topics, but it does not explicitly name sibling tools or the precise conditions for choosing it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for editing existing topics (as opposed to adding new ones via cs_add_topic) and references the same node spec as cs_add_topic, but it does not explicitly state when to use this tool over alternatives, nor does it provide exclusions or prerequisites like workspace setup. Guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_env_fetchRun a FetchXML queryA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| xml | No | FetchXML query text | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| xmlFile | No | File containing the FetchXML query | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the operation is read-only, names the underlying command ('pac env fetch'), and clarifies the auth context. It could add output or failure behavior, but the core safety profile is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The main purpose and example are front-loaded, and the underlying pac invocation follows naturally. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, read-only behavior, and auth context, but with no output schema it does not state what the tool returns (e.g., result rows, raw output, or a jobId when background is true). It also does not clarify whether xml or xmlFile is required, which matters given all parameters are optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters. The tool description adds only marginal context about authentication and use case, not parameter-specific meaning, matching the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run a FetchXML query against Dataverse,' with a concrete example use case. It clearly separates itself from sibling environment tools by emphasizing read-only inspection through pac.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use context: inspecting Dataverse rows such as bot or botcomponent data without MSAL sign-in. It does not explicitly list exclusions or alternative tools, but the intended scenario is specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_env_listList environments (pac)A
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| filter | No | Only environments whose name contains this text | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds meaningful behavioral context by naming the exact command run ('pac env list') and the scope (profile-visible environments), which strongly implies a read-only list operation. However, it does not explicitly state that no side effects occur, what happens if no profile is active, or what failure modes exist. The concrete command reference further increases value to 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, alternative, and underlying command are all present and front-loaded. Every sentence contributes a distinct piece of information an agent needs, and nothing is redundant or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 100% schema coverage and no output schema, the description provides the essential purpose, scoping, and auth context. It leaves no critical call-time decision uncovered; an agent would need to know what the result looks like but 'List environments' strongly implies the result type, and the underlying pac command is well-known. Slightly more detail on output format would make it fully complete, but is not a blocker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description itself provides no additional negotiation detail. The description's mention of the 'active pac auth profile' is already present in the parameter descriptions. Thus the description adds no parameter-level meaning beyond the schema, meeting the baseline without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a list operation over the 'environments' resource, scoped to the active pac auth profile. It differentiates itself from cs_list_environments by explicitly naming that alternative and the reason (cs_login requirement), so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names cs_list_environments as the alternative and identifies the deciding condition (needs a cs_login), making the when-to-use clear. It does not mention or exclude the other sibling, cs_admin_list_environments, but the 'active pac auth profile' scope and non-admin grouping of the tool suggest a reasonable distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_env_selectSelect the default environment for the pac profileA
Set the environment that pac commands use when none is passed (local profile setting). Runs 'pac env select' with the active pac auth profile.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | Yes | Environment id, URL, unique or partial name | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that this writes a 'local profile setting' and runs against the 'active pac auth profile', which hints at persistence and auth context. However, it does not mention the command's output, whether the change is immediate, or how it affects subsequent runs beyond the basic statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core behavior and the second identifies the underlying command and auth context, making it easy to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has one required parameter, and a fully described schema.dll The description covers the key behavioral outcome and the underlying pac command, so an agent has enough to invoke it correctly. A short note on the expected effect or return value would be nice, but it is not essential here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add detailed parameter guidance beyond stating that it uses the active pac auth profile, but the schema already documents environment, profile, cwd, background, and timeoutSeconds adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Set'), the resource ('the environment that pac commands use when none is passed'), and the scope ('local profile setting'). It also names the underlying command ('pac env select'), making it easy to distinguish from listing or querying tools like cs_env_list and cs_env_who.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'when none is passed' gives a clear condition for when this tool is relevant: it changes the default for commands that don't specify an environment. It does not explicitly mention alternative tools or when not to use it, but the context is clear enough for an agent to select it over env inspection commands.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_env_whoShow environment details (pac)B
Organisation id, URL, version and the signed-in user for an environment. Runs 'pac env who' with the active pac auth profile.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does usefully disclose that the tool runs 'pac env who' using the active pac auth profile, which implies read-only behavior and dependency on an existing profile. However, it does not explicitly state side-effect-free status, failure modes, or what happens when no profile is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the output details (org id, URL, version, user) and then gives the underlying command and profile context. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only query tool with no required parameters and fully documented schema, the description is mostly complete. It states what information is returned and which profile is used. It could be more complete by clarifying when to choose this over sibling environment/auth tools, but that gap is partially covered by purpose clarity and schema richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema; it mentions the active auth profile, but this is already documented in the 'profile' parameter. It does not need to compensate for schema gaps because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows environment details (organisation id, URL, version, signed-in user) and names the underlying command 'pac env who'. It is specific about the resource and outcome. However, it does not explicitly distinguish itself from sibling tools like cs_env_list, cs_env_fetch, or cs_auth_who, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It implies use when environment details are needed, but does not mention exclusions, prerequisites, or how it differs from cs_env_list, cs_env_fetch, or cs_env_select. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_explain_flow_runExplain a failed 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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run id (cs_list_flow_runs) | |
| flowId | Yes | Flow id (cs_list_flows) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| includeInputs | No | Fetch each failed action's inputs as well; default true | |
| upstreamCount | No | Succeeded actions to include with their outputs, ending at the first failure; default 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses deep internals: real error messages are resolved from the failing action's outputs because connector failures carry no error, failures are classified into three categories, and inputs plus upstream outputs are returned. It also honestly states 'Unverified against a live tenant'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences front-load the purpose, then the mechanism, then the prerequisite and caveat. Every clause carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Rich for a tool with no output schema and no annotations: it describes the diagnostic content, the classification taxonomy, the prerequisite sibling, the auth scope, and a live-tenant caveat. Minor gap: it does not detail the exact error-category semantics or pagination/limits, but the content subscription is thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema documents all 8 parameters including defaults. The description mentions the returned inputs/upstream outputs but adds no syntax or format beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with a clear scope qualifier ('Why one run of a cloud flow failed, in terms of the action that broke'). Distinguishes itself from siblings like cs_get_flow_run and cs_compare_flow_runs by targeting root-cause explanation of a single failure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Start here when cs_list_flow_runs shows a failure' and names the sibling tool that surfaces the failure. No inference is needed about when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_extract_agent_templateExtract an 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.
| Name | Required | Description | Default |
|---|---|---|---|
| bot | Yes | Agent id or schema name | |
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| overwrite | No | Overwrite the file if it exists | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| templateFile | Yes | Path of the YAML template to write | |
| templateName | No | Template name (default kickStartTemplate) | |
| timeoutSeconds | No | Default 600 | |
| templateVersion | No | Template version X.Y.Z (default 1.0.0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals the underlying command and that it writes a template file, but it does not disclose side effects on the source agent (likely read-only), overwrite consequences, permission requirements, or the shape of the response. For a tool with zero annotation coverage this leaves meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with the purpose front-loaded and the underlying command stated for transparency. No filler; every clause earns its place. Slightly better than average due to the tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter command runner with no output schema and no annotations, the description covers purpose, target consumer, and the pac command, but omits return-value/confirmation behavior and whether the operation is destructive to the source. Adequate but with clear gaps given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all 10 parameters, establishing the baseline of 3. The description adds only marginal context — e.g., that the output feeds cs_create_agent_from_template — but does not explain syntax or behavior beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: 'Write a reusable YAML template from an existing agent (its topics, settings and components)'. It names the downstream consumer (cs_create_agent_from_template) and the underlying command, clearly distinguishing it from creation/cloning siblings in the same family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context — the template is for use in another environment or solution via cs_create_agent_from_template — which implies the cross-environment use case. However, it never explicitly names alternatives (e.g., cs_clone_agent for same-environment duplication) or states when not to use it, leaving differentiation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_extract_translationsExtract translation filesA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Write files for every supported language, not only the primary one | |
| bot | No | Agent id or schema name; omit for every agent | |
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| format | No | resx (default) or json | |
| outDir | No | Output directory | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| overwrite | No | Overwrite existing files | |
| sourceDir | No | Unpacked solution folder to read instead of the environment | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 900 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it runs a pac command with the active auth profile and writes files, which is helpful. However, it does not explicitly state whether it modifies any source data or what side effects writing files might have (beyond the overwrite parameter). It is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded with the core purpose and the underlying command. No fluff, every word earns its place. The structure makes the key intent immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters) and no output schema, the description covers the essential inputs (sources, bot scope, formats) and mentions the inherited pac auth behavior. It does not describe return values or job behavior, but the schema already covers parameters like background and outDir, so the description is mostly complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by clarifying the relationship between 'environment' and 'sourceDir' ('from the environment or from an unpacked solution folder') and the scope of 'bot' ('one or all agents'). This goes slightly beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Export'), a clear resource (localisable strings of agents), output formats (.resx or .json), and the two possible sources (environment or unpacked solution folder). It is distinct from siblings like cs_merge_translations by naming the exact function, even without an explicit comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for exporting translations for one or all agents, from either an environment or an unpacked solution folder. It does not explicitly name alternatives or when not to use it, but the context is sufficient for an agent to route correctly among the large sibling set, especially alongside cs_merge_translations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_generate_instructionsGenerate agent instructions with an AI Builder promptA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | ||
| apply | No | Write the result into the agent instructions | |
| refine | No | Revise the workspace's current instructions using changeRequest | |
| modelId | No | ||
| purpose | No | What the agent is for; required unless refining | |
| audience | No | ||
| examples | No | ||
| language | No | ||
| inputMode | No | ||
| modelName | No | Full or partial AI Builder model / prompt name | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| boundaries | No | ||
| environment | No | Environment id or URL. Defaults to the active pac auth profile. | |
| capabilities | No | Default: derived from the workspace (topics, knowledge, tools) | |
| changeRequest | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and largely does so: it states that apply:true performs a filesystem write into agent.mcs.yml/settings.mcs.yml, that environment defaults to the active pac auth profile, and that capabilities default to workspace-derived values. It does not describe failure modes, overwrite risk to existing instructions, or model-call cost/latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and followed by mechanism and the refine/apply variants. It is dense but every clause carries information; the nesting of parentheticals and defaults makes it slightly hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation tool with no output schema and no annotations, the description covers the write semantics, the model-selection prerequisite, and the two operating modes (generate vs refine) well. It stops short of covering the optional content-shaping params (tone, audience, examples, language) and any success/return expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 47% across 15 params, so the description must compensate, and it does for the highest-stakes keys: apply, refine, purpose (required unless refining), changeRequest/currentInstructions, capabilities default, workspace default, and modelId via cs_list_prompts. tone, audience, examples, language, and inputMode remain unexplained in both places, keeping it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and artifact: writing the agent's instructions (system prompt) that decide how it answers. It also identifies the mechanism (AI Builder prompt / pac copilot model predict) and the output file (agent.mcs.yml or settings.mcs.yml), which separates it clearly from generic siblings like cs_update_agent or cs_review_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete conditional usage: apply:true writes to the workspace, refine:true reads and revises existing instructions via changeRequest, and cs_list_prompts is the way to pick a model. It lacks an explicit when-not-to-use or a direct comparison against cs_update_agent, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_get_evaluation_runGet an evaluation runB
Status and per-case results of an evaluation run, with a pass/fail summary per test method.
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| runId | Yes | ||
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| includeRaw | No | ||
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden; it does reveal that this is a read operation returning status and per-case results. It does not mention auth requirements, default parameter behavior, or missing/invalid run ID handling, but for a simple getter the disclosed output behavior is reasonably informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core output (status and per-case results) and no filler. Every phrase adds signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Reasonable for a simple fetcher: the description states what the response contains, and the schema covers environment/auth defaults. However, with no output schema and no annotations, the missing semantics of includeRaw and the lack of usage workflow leave clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description adds no parameter-level meaning, and schema coverage is only 71%: runId and includeRaw have no descriptions. runId is self-evident, but includeRaw is an ambiguous boolean that the description does not clarify, so the definition fails to compensate for a real schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (evaluation run) and the exact payload: status, per-case results, and pass/fail summary per test method. This distinguishes it from siblings like cs_list_evaluation_runs (listing) and cs_run_evaluation (execution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus cs_list_evaluation_runs, cs_run_evaluation, or other run-related tools. The read-only intent is implied by the name, but no prerequisites, workflow placement, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_get_flowRead one cloud 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.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow (workflow) id; cs_list_flows shows it | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| includeDefinition | No | Include the full definition JSON (large) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the transparency load; it declares 'Read-only' and warns that including the definition yields a large payload, which is genuinely useful cost information. It does not cover permission/auth prerequisites or any rate/limits caveats, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the purpose front-loaded, followed immediately by routing guidance. Every clause carries information and nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description proactively names the return content (trigger/action names, connection references, definition JSON), which is exactly what an agent needs to consume the result. Combined with the explicit alternative routing, an agent can select and invoke this correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters including includeDefinition and the auth-related defaults. The description's mention that includeDefinition returns the 'whole Power Automate definition' largely restates what the schema field already says, so it adds little beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Read one cloud flow') and enumerates exactly what comes back: trigger and action names, connection references, and the full definition when requested. It clearly separates itself from the list-oriented sibling cs_list_flows by describing a single flow inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use before cs_update_flow, and for diagnosing why a flow cannot be switched on, while directing run-history questions to cs_list_flow_runs and cs_explain_flow_run instead. Both the 'when' and the 'instead use' alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_get_flow_runRead one 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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run id (cs_list_flow_runs) | |
| flowId | Yes | Flow id (cs_list_flows) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It says 'Read-only' which is useful, but does not disclose error behavior, authentication requirements beyond the cryptic 'Uses the Power Automate service (cs_login scope flow)', or what happens if the run is not found. It also mentions 'Unverified against a live tenant' which is honest but does not add operational transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loads the essential purpose ('One run of a cloud flow with its status, timing, trigger and error'). The additional notes on read-only and service usage add value without bloat. It could be slightly more structured but is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters (2 required), no output schema, and no annotations, the description is somewhat spare. It tells the agent what the tool returns conceptually but not the structure or error cases. However, the schema is detailed on parameter defaults, which partially compensates. It is minimally adequate but not complete for robust use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by linking parameters to their source (e.g., runId from cs_list_flow_runs, flowId from cs_list_flows) and explaining default resolution for optional parameters (clientId, tenantId, workspace, environmentId), which helps the agent understand how to fill them without guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads a single flow run and lists its key aspects (status, timing, trigger, error). It is distinct from cs_list_flow_runs (which lists runs) and cs_get_flow (which gets a flow definition), though it does not explicitly differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention that cs_list_flow_runs is the precursor to obtain runId, nor does it state when to prefer this over other flow-related tools. The 'Read-only' note is implicit usage context but not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_get_org_agentRead one agent from the Microsoft 365 catalogueA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Package id from cs_list_org_agents, e.g. P_19ae1zz1-56bc-505a-3d42-156df75a4xxy | |
| version | No | Graph version for reads. Default v1.0; beta may carry fields v1.0 does not. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it declares the operation is read-only, scoped to cs_login 'graph', requires a Microsoft Agent 365 licence, is global-cloud only, and is unverified against a live tenant. These are meaningful behavioral caveats beyond the basic schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the core purpose, then add the raw-body rationale, then list constraints. Every sentence earns its place; there is no padding or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with five parameters and no output schema, the description covers the return content, read-only posture, and operational requirements. It lacks an explicit example or a note on error behavior, but the combination of a rich description and fully documented schema is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides; it focuses on output richness rather than clarifying id, version, clientId, tenantId, or workspace.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and a specific resource ('one agent from the Microsoft 365 catalogue'), and enumerates the returned contents: metadata, element types, availability, deployment state, and blocked status. It also distinguishes the detail resource from list rows, which separates it from sibling list tools like cs_list_org_agents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly positions this as the detail-fetch tool, noting that the raw body is returned because the detail resource carries more than the list rows. This gives an agent context for when this tool is appropriate, though it does not explicitly name an alternative or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_get_transcriptRead one conversation 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.
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| transcriptId | Yes | conversationtranscriptid, from cs_list_transcripts | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly states the operation is read-only and describes the output shape: full turn list, ordered, with topic and tool attribution where recorded. The caveat 'where the transcript records them' also sets expectations about incomplete data, though it does not cover error behavior or authentication edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core purpose ('full turn list of one session') and then adds the necessary detail about content and ordering. Every phrase earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with only one required parameter and no output schema, the description adequately explains what the tool returns. It also notes the read-only nature and the conditional attribution of topic/tool. It could be slightly stronger by explicitly routing the user to cs_list_transcripts for obtaining transcriptId, but the schema already mentions that source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented by the schema. The description adds no parameter-specific meaning beyond the schema, but it does not need to; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb-resource pair: it reads one conversation transcript and returns the full turn list. It further specifies what is included (who said what, in order, with topic/tool attribution), which clearly distinguishes it from sibling tools like cs_summarize_transcripts or cs_list_transcripts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving the raw turn-level transcript of a single session, and the title reinforces that intent. However, it does not explicitly name alternatives or state when not to use it, such as pointing to cs_summarize_transcripts for summaries or cs_list_transcripts for finding transcript IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_guideHow to use this serverA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Default getting-started | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it declares the tool is read-only and side-effect free ('it changes nothing and does no work') and discloses a return value ('next steps for the workspace at hand'). It does not discuss auth/setup prerequisites, but for a pure documentation tool the safety profile is adequately disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage before the topic catalogue, and every topic gloss earns its place by mapping to a distinct job. The main weakness is that the thirteen glosses are packed into a single run-on sentence, which hurts scannability, though little could be cut without losing routing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by stating what comes back ('next steps for the workspace at hand'). Combined with the exhaustive topic catalogue, the read-only guarantee, and the routing guidance, an agent has everything needed to decide whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the baseline, but the description goes beyond the bare enum by explaining what each topic value actually contains (e.g. 'topics' = triggers and node types, 'drift' = portal changes since last sync and how to merge them). The workspace parameter adds no description-level meaning, but the topic semantics are materially enriched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Explain how to do one part of Copilot Studio agent development with this server's tools') and enumerates the exact scope via thirteen named topics. It explicitly contrasts itself with the action siblings: 'It only explains - it changes nothing and does no work.' An agent can distinguish it from cs_create_agent, cs_run_flow, etc. without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both the when-to-use condition ('Read the relevant topic when you do not know which tools a job needs or what order they go in') and the when-not condition ('when the user asked for something to be built, written or run, call the tool that does it rather than this one'). It also names what it returns for each step (the tool per step, plus manual portal steps that cannot be automated).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_import_solutionImport a solution zipB
pac solution import of a packed agent (from cs_pack) into an environment. Mutates the environment: requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| environment | No | ||
| forceOverwrite | No | ||
| publishChanges | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool mutates the environment and requires confirm:true, which is valuable. However, it doesn't mention the dry-run behavior when confirm is false, the effects of forceOverwrite, or any permission requirements—leaving gaps that the agent must infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and then states the key behavioral constraint. No wasted words, and it is easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no output schema, and no annotations, this description is incomplete. It omits explanations for most parameters, the dry-run behavior, and any success/failure indicators, leaving the agent with insufficient guidance for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% (only confirm has a description). The description adds semantic context for confirm (requires true for mutation) and environment (implicitly the target), but doesn't explain path, forceOverwrite, or publishChanges. Given the low coverage, it fails to compensate sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: importing a packed agent solution into an environment, referencing the source (cs_pack) and the mutation aspect. It distinguishes from siblings like cs_pack_solution (packing) and cs_check_solution (checking) by naming the import action, though it doesn't explicitly contrast with all import-like tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as the counterpart to cs_pack (imports what was packed) and notes the confirm:true requirement for mutation. It lacks explicit when-not-to-use guidance or mention of alternatives like cs_deploy_solution or cs_pull_solution, but does provide a condition for actual change.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_initStart a sessionA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares 'Read-only', explains the diagnostic purpose (isolating CLI vs. credentials vs. workspace as a failure cause), and enumerates the reported state. It stops short of describing the return shape or any error/timeout behavior, but the read-only and diagnostic traits are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what gets checked, then usage, then the negative routing rule. The long enumeration is justified by the breadth of the check, but the third clause ('It reports the state of the machine and nothing else') and the sibling examples add density that slightly dilutes the core message.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must supply everything - and it enumerates the reported checks, declares read-only, and routes usage correctly. An agent has what it needs to select and invoke it; only the exact return format remains implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One optional parameter with 100% schema description coverage, so the schema already fully documents the workspace path and its CPS_WORKSPACE/current-directory default. The description only alludes to the workspace ('the agent workspace it found') without adding format or resolution semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (machine readiness), then enumerates exactly what is inspected: pac CLI/.NET, active auth profile, token-bearing cloud resources, env vars, write policy, and the discovered workspace. It explicitly draws the boundary against siblings ('reports the state of the machine and nothing else'), so an agent can distinguish it from cs_status, cs_guide, or cs_create_agent without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('once at the start of a session, and again when a tool fails') and when-not ('when the user asked for something specific... call the tool for that thing instead'), naming cs_create_agent and cs_guide as alternatives. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_init_solution_projectCreate a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| publisherName | Yes | Publisher name | |
| timeoutSeconds | No | Default 600 | |
| outputDirectory | No | Output directory (default: cwd) | |
| publisherPrefix | Yes | Publisher customization prefix |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that the tool runs 'pac solution init' and uses the active pac auth profile, but it does not state whether it overwrites existing files, what files are created, whether it requires an empty directory, or what happens on failure. As a mutation tool that scaffolds a project, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the purpose and includes the command invocation, making it efficient and easily scannable. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a scaffold tool with 7 parameters (all schema-documented) and no output schema, the description explains the core purpose and the command used, but it omits details about expected outcomes (e.g., success indicators, next steps) and potential side effects. Given the lack of annotations, the description should be more thorough to make the tool fully self-contained for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 7 parameters, so the schema already documents each parameter's purpose. The tool description adds no additional parameter-specific information beyond that. Per the baseline rule, a score of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Scaffold a Dataverse solution project'), identifies the resource type (.cdsproj), and specifies the context (source-controlled solution development). It also names the underlying command ('pac solution init'), which clearly distinguishes it from sibling tools like cs_create_solution. This gives an agent precise understanding of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the intended use case ('for source-controlled solution development'), which signals when to apply it. However, it does not explicitly mention alternatives or exclusions, such as 'use cs_create_solution when you need a solution without source control.' The context is clear but lacks direct sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_job_statusCheck a background jobA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | No | Omit to list every job this server knows about | |
| recordFile | No | Read a job record from disk (e.g. <targetDir>/pull-job.json) when the server has been restarted since |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well by disclosing that the tool is read-only, that jobs are stored only in the server process, and that a restart loses them. It also explains the fallback to recordFile, which is beyond basic schema info. Missing are details like output format or potential error behavior, but the core behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core function is stated first, followed by the read-only nature and the important persistence caveat. Every sentence adds value and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two optional parameters and no output schema, the description covers purpose, state values, result behavior, and the disk-fallback scenario. It could be slightly more explicit about the return structure, but it sufficiently explains what an agent should expect and when to use recordFile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining why recordFile exists (server restart loses jobs) and how it relates to disk persistence. This goes beyond merely restating the schema descriptions and helps an agent choose between the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks the state of a background job started with background: true, listing states (running, succeeded, failed), phases, and result. It is specific and understandable, but it does not explicitly distinguish itself from related sibling tools such as cs_status aside from the 'background: true' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use this tool to inspect the status of background jobs)Skip. It also gives conditional guidance—after a server restart, use recordFile instead. However, it does not contrast with alternative tools or explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_agentsList 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.
| Name | Required | Description | Default |
|---|---|---|---|
| via | No | ||
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| ownerOnly | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| dataverseUrl | No | ||
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It does add meaningful behavior about auth prerequisites: 'needs a pac auth profile' and 'queries the bots table with the MSAL token', plus the default auto fallback. It does not explicitly state that the operation is read-only, although the verb 'list' implies it, and it misses behavior such as whether it returns the full agent list or paginated results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and to-the-point. The main action is fronted, and the two subsequent sentences each add one relevant piece of context (modes, default behavior). There is no redundancy, and the run-on grammar is minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven parameters, no annotations, and no output schema, the description is insufficient contextually. It covers the via modes but leaves several important parameters (ownerOnly, dataverseUrl) without explanation, and does not describe the return contract such as whether an empty list versus an error comes back. An agent would need to inspect or guess the details of the 'dataverse' query path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, so the description is expected to contribute meaning beyond the schema. It does add semantics for the 'via' parameter by explaining what ends with auto/pack/dataverse, its default fallback, and the underlying command or data source. Yet parameters like 'ownerOnly', 'dataverseUrl' are left unexplained both in schema and description, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and object, 'List Copilot Studio agents in an environment,' and the phrase 'in an environment' differentiates it from environment-agnostic siblings such as cs_list_org_agents. It does not name a sibling explicitly, but the resource and scope are enough to distinguish it from list_flows or list_agents tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete when-to-use guidance for the 'via' execution modes: 'pac' uses pac copilot list, 'dataverse' queries the bots table, and 'auto' selects pac first. However, it never contrasts with alternative list tools or says when not to use this tool over, for instance, cs_list_org_agents, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_auth_profilesList pac 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description explicitly labels the tool 'Read-only' and discloses what it reports: available profiles, the active profile, and account ownership. It does not describe output structure or error behavior, but for a zero-parameter listing tool the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short statements convey output content, use case, and read-only nature with no filler. The first sentence is a grammatical fragment ('The pac authentication profiles...'), but it remains compact and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, zero-parameter, read-only list tool with no output schema, the description covers what the call returns, why to call it, and its safety. It could include exact output formatting, but the agent has enough information to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100% because there is nothing to document. The description's mention of 'profile' is about a value to pass to other admin tools, not an input to this tool. Baseline 4 for zero params applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the resource (PAC auth profiles on this machine), the output aspects (active profile and owning account), and the intended role (finding the admin profile name). It is distinguishable from sibling tools like cs_select_auth_profile and cs_delete_auth_profile, though the opening is a noun phrase rather than an explicit verb like 'Lists'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to use the tool to find the admin profile name to pass as 'profile' to admin tools. It does not name alternative tools or explicitly state when not to use it, but the use case is clear enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_connectionsList 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.
| Name | Required | Description | Default |
|---|---|---|---|
| environment | No | Environment id or URL. Defaults to the active pac auth profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states what the tool returns (id, connector, owner) and implies a read-only list operation. However, it does not disclose potential error conditions, authentication requirements, or output formatting/pagination, which are common expectations for list tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the tool's purpose and output fields, followed by a practical usage hint. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with no output schema, the description covers the essential aspects: what it lists, the fields returned, and a relevant workflow (deployment settings). Minor gaps like read-only nature and output format are implied by 'list' and the field enumeration, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'environment', is fully documented in the schema with a description and default behavior. The tool description reinforces that connections are scoped to an environment but adds no additional semantic detail beyond the schema. Since schema coverage is 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists connections in an environment, specifying the returned fields (id, connector, owner). It is distinct from sibling tools like cs_list_connectors by explicitly focusing on connections and their use in deployment settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: use the ids to map connection references in a deployment settings file before cs_deploy_solution. It gives contextual guidance but does not explicitly mention alternatives or when not to use it, which is acceptable for a straightforward list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_connectorsList connectors available in an environmentA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | ||
| mcpOnly | No | ||
| offline | No | Use cache or seed only | |
| refresh | No | Fetch again even if cached | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| customOnly | No | ||
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses caching under .cs-catalog/<environment>/connectors.json, offline seed fallback, and the presence of an mcpLikely flag, which go beyond the title. It does not explicitly state that the operation is read-only, but 'List' plus the registry framing make that clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: it defines the registry, lists included connector types, notes the MCP flag, and explains caching/offline behavior in two sentences. Every clause earns its place and the most identifying information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers source, contents, caching, and offline fallback, which is solid for a list tool. However, there is no output schema and the description does not mention return shape, item fields, or pagination, so an agent must infer what the result actually looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents six of nine parameters with descriptions; search, mcpOnly, and customOnly lack schema descriptions. The description adds some related meaning by mentioning the mcpLikely flag and the search-without-sign-in fallback, but it does not clearly map these to the undocumented parameters, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and the resource (connector registry for an environment), and adds concrete scope: Microsoft-published and custom connectors plus an mcpLikely flag. It does not explicitly contrast itself with sibling tools like cs_list_connections or cs_describe_connector, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about when the list matches the portal's Add a tool view and mentions offline fallback behavior for search with no sign-in. However, it does not state when to prefer this tool over alternatives such as cs_list_connections or cs_describe_connector, leaving selection mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_environmentsList environmentsA
List Power Platform environments the signed-in user can access (BAP API), with Dataverse URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. The verb 'List' clearly indicates a read-only operationaine, and 'the signed-in user can access' defines the authorization scope. It also discloses the API source and a return attribute, but does not mention pagination, exact response fields, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
This is a single, front-loaded sentence that covers the verb, resource, scope, API, and a relevant output detail without filler. It does not repeat what the schema already documents, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with only two optional parameters Progress, the description gives enough context to invoke it correctly: what is listed, whose perspective it uses, the API, and a key part of the output. With no output schema, exact response item fields are not specified, but this omission is minor for a straightforward list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already explains clientId and tenantId including their fallback defaults. The tool description does not need to add parameter-level detail, and its brief mention of 'signed-in user' provides only light contextual color beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action 'List', the resource 'Power Platform environments', and the scope 'the signed-in user can access', which makes its purpose unambiguous and distinguishes it from admin-level environment list tools in the sibling set such as cs_admin_list_environments. The mention of 'BAP API' and 'with Dataverse URLs' adds useful precision without blurring the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: list environments available to the signed-in user, which contrasts with admin-wide listings. However, it does not explicitly name alternatives or state when not to use it, so the agent must infer the boundary against siblings like cs_admin_list_environments and cs_env_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_evaluation_runsList evaluation runsC
Previous evaluation runs for the agent.
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not state that the operation is read-only, does not describe the return format (e.g., list of run IDs, statuses), and gives no indication of side effects or authentication requirements. The phrase 'previous evaluation runs' is a noun phrase, not a behavioral statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely terse, consisting of a single phrase. While it is concise, it is under-specified and does not earn its place by adding necessary detail. It lacks structure and fails to convey any information beyond the tool's name, making it an inadequate substitute for a proper definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, no output schema, and no annotations, the description is incomplete. It does not explain what the returned list contains (e.g., run metadata, statuses) nor how each parameter filters results. An agent would have to infer the tool's behavior from its name alone, which is insufficient for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all five parameters. The description adds no parameter-specific context, leaving the baseline score at 3 as per the rubric. There is no additional meaning or clarification about how parameters like botId or environmentId affect the query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it returns 'previous evaluation runs for the agent', which identifies the resource but relies on the title for the verb 'list'. It does not distinguish from sibling tools like cs_get_evaluation_run or cs_run_evaluation, leaving ambiguity about whether this returns a list of runs versus a single run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention that it is for viewing historical runs, nor does it contrast with cs_get_evaluation_run or cs_run_evaluation. The description gives no context on selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_flow_runsList 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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum runs to return | |
| flowId | Yes | Flow id (cs_list_flows) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares read-only behavior, return ordering, returned fields, separate Power Automate sign-in via cs_login scope 'flow', and an unverified-against-live-tenant caveat. It does not state default top behavior or pagination limits, but the core safety and auth profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core question and return shape, then adds read-only status, next-step routing, and authentication caveat. Every sentence earns its place and there is no redundant restatement of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description enumerates the important return fields and explains the auth model and follow-up tool. It leaves default top behavior and pagination unstated, which is a minor gap for a list operation with a top parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters in detail. The description only implies flowId via 'one cloud flow' and adds no syntax or format guidance beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: the run history of one cloud flow, most recent first, including status, timestamps, duration, and failed-run error. It also distinguishes itself from siblings by pointing to cs_explain_flow_run for deeper analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent when to use it: to answer when a flow last ran and whether it worked, then to find the run to pass to cs_explain_flow_run. It does not explicitly exclude or compare against cs_get_flow_run or cs_compare_flow_runs, leaving minor ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_flowsList cloud 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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum rows | |
| search | No | Only flows whose name contains this text | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| includeManaged | No | Default true; false lists only unmanaged flows |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; it does declare 'Read-only', which is the key safety signal. It also explains what the result reveals (what the agent's flow tools can call, what a solution import left switched off). It omits pagination/result-cap behavior and default resolution rules on the auth params, which are gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the guiding question, then the payload, then the read-only note, then the alternatives. Four short sentences, each carrying distinct information with no repetition of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param, no-output-schema read tool, the description adequately covers purpose, result fields and routing, which compensates for the absent output schema. It falls short only on pagination/limit behavior and default-parameter resolution that an agent may need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all 8 parameters documented in the schema, so the baseline is 3. The description adds only marginal semantic value by implying the managed/unmanaged and state fields matter, but does not clarify top/search/includeManaged behavior beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('list' every cloud flow) with scope stated ('every cloud flow in the environment') and the returned fields named (state, owner, last change). It explicitly distinguishes itself from cs_get_flow, cs_list_flow_runs and cs_explain_flow_run, so an agent can route without opening any sibling schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with the question it answers ('which flows are there?') and closes with explicit alternatives for contents, execution history, and failure cause. The exclusion ('This is the inventory only') plus named sibling tools leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_org_agentsList agents in the Microsoft 365 catalogueA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum packages per page | |
| host | No | Only agents surfaced in this host | |
| filter | No | Extra raw OData $filter, combined with the options above | |
| version | No | Graph version for reads. Default v1.0; beta may carry fields v1.0 does not. | |
| allPages | No | Follow paging until the catalogue is exhausted (capped) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| platform | No | Build platform. Default 'Copilot Studio'; 'all' does not filter. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| elementType | No | Only packages containing this element type | |
| modifiedSince | No | ISO instant; only packages modified after it, e.g. 2026-01-01T00:00:00Z |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does well: it declares the operation read-only, explains the authentication model, notes the licence requirement, restricts to global cloud, and even flags that it is unverified against a live tenant. This far exceeds basic disclosure and gives the agent important expectations about safety and reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but remarkably efficient: every sentence contributes either scope, defaults, auth context, or caveats, and the most important detail is front-loaded. Nothing is wasted, and the length is justified by the behavioural caveats that are not present in structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no annotations and no output schema, the description covers purpose, defaults, auth, scope, licensing, and limitations. It could go further by describing the return shape or pagination cap details, but the input schema already documents the parameters and the operational caveats are well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine value beyond the schema: it explains the platform default, the meaning of 'all', and positions the tool against the Graph/Dataverse auth boundary. It does not elaborate on every parameter, but with full schema coverage that is not necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (list), a specific resource (agents in the organisation's Microsoft 365 catalogue), and a clear scope ('across environments'). It also differentiates from Power Platform-related siblings by highlighting what this tool sees that Power Platform cannot, so an agent can distinguish it from cs_list_agents without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage context: it defaults to Copilot Studio agents, requires 'platform: all' for the full catalogue, mentions a separate Graph sign-in via cs_login scope 'graph', and states the licence and cloud restrictions. It does not explicitly name an alternative sibling tool, but the guidance is strong enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_pipelinesList Power Platform 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| pipeline | No | Pipeline name or id to show its stages | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It explicitly states 'Read-only' and names the underlying command ('pac pipeline list') and auth profile behavior, which is important contextual information for an agent deciding whether this command is safe and which profile to use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core behavior, immediately followed by safety information and implementation detail. Every sentence adds value without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has six optional parameters and no output schema, the description covers the main behavioral modes, read-only safety, and the underlying pac command. It does not explain return structure, but for a list command this is reasonably inferable and the schema handles parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented. The description adds the semantic distinction between listing pipelines for an environment versus listing stages for a pipeline, but this is also largely reflected in the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (Power Platform pipelines), the action (list pipelines that can deploy from an environment), and the optional mode (list stages of one pipeline). It distinguishes from related tools like cs_deploy_pipeline without requiring the agent to infer the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: to see deployable pipelines from an environment or stages of a selected pipeline. It does not explicitly name alternatives or exclusions, but the dual-mode behavior is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_promptsList AI Builder prompts / modelsB
pac copilot model list: AI Builder models (including custom prompts) in the environment, with ids for cs_add_tool type 'prompt'.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | ||
| activeOnly | No | ||
| environment | No | Environment id or URL; default active pac profile |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, whether it requires an authenticated environment, what happens when no environment is specified, or whether the output is a table or JSON. The description adds only the ID-returning detail, which is useful but insufficient for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the command name and core purpose, then adds the cross-tool relevance. It is compact and every phrase earns its place, though it could be slightly more structured by separating the purpose from the usage note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no annotations and no output schema, the description is thin. It does not mention filtering behavior, default environment resolution, output format, or whether inactive models are included by default. The cross-reference to cs_add_tool is helpful, but an agent still lacks enough context to know what results to expect or how the optional parameters affect the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: 'environment' is documented in the schema, but 'search' and 'activeOnly' have no descriptions. The tool description does not compensate by explaining these parameters. However, the names are fairly self-explanatory, and the description does clarify that the returned IDs are meant for cs_add_tool type 'prompt', which adds meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('list') and resource ('AI Builder models including custom prompts') and adds the useful detail that it returns IDs for use with cs_add_tool type 'prompt'. It is clear enough to distinguish from sibling list tools like cs_list_flows or cs_list_agents, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is the way to discover AI Builder model/prompt IDs before adding a tool of type 'prompt'. It does not explicitly state when to use it versus alternatives, nor does it mention the optional 'search' and 'activeOnly' filters as selection aids. The connection to cs_add_tool gives some guidance, but exclusions or alternative conditions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_solutionsList solutionsB
pac solution list: solutions in an environment with version and managed flag. Needs a pac auth profile.
| Name | Required | Description | Default |
|---|---|---|---|
| environment | No | Environment id or URL. Defaults to the active pac auth profile. | |
| includeSystem | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals an authentication requirement and indicates the output contains version and managed flag, but it does not describe error cases, read-only guarantees, or behavior for optional inputs like includeSystem.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the main actionable phrase, and every sentence adds some information. The opening 'pac solution list' is somewhat redundant with the tool name, but the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema and no annotations, the description covers purpose, auth, and core returned fields. However, the semantics of includeSystem are absent and no guidance on expected output structure is provided beyond version/managed flag.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%; the environment parameter is described in the schema, but the description adds little beyond restating the environment context. includeSystem is left completely undocumented in both the schema and description, so the description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb (list) and resource (solutions in an environment), and adds that results include version and managed flag. However, it does not differentiate this from closely related sibling tools such as cs_describe_solution or cs_check_solution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear prerequisite ('Needs a pac auth profile') and implies the tool is used to list solutions, but it does not specify when to prefer this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_test_setsList evaluation test setsC
Power Platform API: test sets defined for the agent (standard harness).
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the burden falls on the description. It only says 'Power Platform API: test sets defined for the agent (standard harness).' It does not disclose read-only semantics, pagination, authentication requirements, or any side effects. While 'list' implies a read operation, the description itself is too thin to be transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the essential purpose. The phrase 'Power Platform API' is redundant with the tool's context but does not create significant noise. It earns a score slightly above average because it is compact and all words add at least some context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is the only place for an agent to learn what the tool returns; it says nothing about the result. For a list tool with optional filters, information about response shape, filtering, or default behavior would matter, and this description does not provide it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all 5 parameters, so the parameters are already well-documented. The tool description adds no parameter-specific information but also does not need to compensate for gaps. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description state the verb 'list' plus a specific resource ('test sets defined for the agent'), and the qualifier 'standard harness' adds scope. It is distinguishable from siblings like cs_list_evaluation_runs because it clearly targets test sets rather than runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like cs_create_test_set_csv or cs_list_evaluation_runs. The description provides no context for when an agent should select this tool instead of a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_list_transcriptsList conversation 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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum sessions (default 100, max 500) | |
| days | No | Only sessions from the last N days | |
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| search | No | Only sessions whose first user message contains this text | |
| outcome | No | Only sessions that ended this way | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It states 'Read-only' (safety), 'Needs a cached cs_login' (auth prerequisite), and 'newest first' (ordering behavior). It also discloses the scope of returned data. It doesn't cover rate limits or failure modes, but for a list tool this is adequate and exceeds what a minimal description would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences. The first front-loads the purpose and output content; the second covers safety, auth, and the key sibling relationship. No filler, every clause earns its place, and it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (9 optional params, no output schema, no annotations), the description covers the essential context: what it returns, the read-only behavior, the auth requirement, and the intended workflow (find session → get full transcript). It doesn't mention pagination or response volume, but that's arguably beyond what's needed for correct invocation, and the parameter schema already covers limits. Overall it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters (top, days, botId, search, outcome, etc.) with their defaults and constraints. The description adds only general context about the content of the returned list, not parameter-specific guidance. It doesn't go beyond the schema's explanations, so it meets the baseline for full coverage without adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action ('List conversation transcripts') and resource, then enumerates exactly what is returned ('when, how many turns, the first thing the user asked, which topics and tools fired, and how the session ended'). It also differentiates from the sibling tool by naming cs_get_transcript as the follow-up, leaving no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a concrete use case ('find the session behind a bad answer') and explicitly routes the agent to cs_get_transcript for the full turn list, which acts as a when-to-use guide. It also notes the prerequisite 'Needs a cached cs_login'. It doesn't list explicit scenarios where this tool should NOT be used, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_loginSign in (MSAL)A
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Default interactive | |
| scope | No | Which resource to pre-authorise. Default powerplatform (evaluations); 'flow' is the Power Automate service used by the flow-run tools; 'graph' reads the Microsoft 365 agent catalogue and 'graph_write' also blocks and reassigns. Others are acquired silently later when possible. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| openBrowser | No | interactive: try to open the browser from the server (default true). Set false when the server runs where no browser can appear. | |
| waitSeconds | No | interactive: how long to wait for the sign-in before returning 'pending' (default 15; keep it below the client's tool timeout) | |
| dataverseUrl | No | Required when scope is dataverse, e.g. https://org.crm.dynamics.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the interactive flow, pending/ok statuses, the sign-in URL fallback, the localhost redirect, device-code behavior, and tenant blocking. It does not explicitly say whether an existing token is replaced or how long the token remains valid, so it is not fully exhaustive, but it is transparent about the main operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense: every sentence conveys operational information. It is front-loaded with the purpose, then organizes the interactive flow, device-code flow, and pac exclusion without filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter authentication tool with no output schema and no annotations, the description covers the return statuses, the pending-URL fallback, the device-code path, the status-check route, and the pac alternative. The only notable gap is that it does not specify exact response field names or behavior when already authenticated, but it is sufficient for an agent to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, so the baseline is 3. The description adds value beyond the schema by clarifying the behavior of mode ('interactive' returns pending with URL, 'device_code' returns an entry code), the wait/return semantics, and the openBrowser fallback. It does not discuss every parameter, but the ones it addresses are the genuinely complex ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Acquire a Microsoft Entra token for the cloud tools.' It immediately distinguishes the tool's purpose from pac commands and references the related status tool, so an agent can tell cs_login apart from cs_login_status and cs_logout without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when the tool is not needed ('Not needed for pac commands, which use pac auth create'), and it gives clear mode-selection guidance: interactive is default, device_code is blocked by some tenants. It also directs the agent to check cs_login_status or call any cloud tool after a pending login. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_login_statusSign-in 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.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until the pending sign-in completes (up to 10 minutes) | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It adds meaningful context: checks cached MSAL accounts, reports pending browser/device-code sign-ins with URL or code, and optionally waits for completion. It doesn't explicitly state read-only safety, permission requirements, or output structure, but for a status-check tool these gaps are minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two sentences with zero waste, front-loading the core purpose and then immediately routing the agent to the sibling for pac sign-in. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should explain what is returned. It does so at a high level ('cached MSAL accounts', pending sign-in with URL or code), which is sufficient to call and interpret the tool. It does not detail the exact response shape, but for a simple status tool this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents wait, tenantId, and workspace. The description only maps 'optionally wait for it to complete' to the wait parameter and adds no syntax or format details beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Answer am I signed in?') and scopes it to 'cloud tools', then explicitly distinguishes the separate 'pac sign-in' handled by cs_auth_who. An agent can tell this apart from sibling auth tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the condition for use ('am I signed in?' for cloud tools) and the explicit alternative ('For the separate pac sign-in, cs_auth_who'). The optional wait behavior is also described, leaving no ambiguity about when to call it versus cs_auth_who.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_logoutSign outB
Remove cached MSAL accounts for the tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden of behavior. It clearly states the side effect (removing cached MSAL accounts) which implies signing out disconnects the session. It is honest about what it does, though it doesn't mention whether it clears all auth profiles or just the current session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, succinct sentence that conveys the essential purpose. Zero fluff and directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no output schema, one optional parameter), the description is mostly complete. It conveys the effect but omits potential nuances like whether it affects all sessions or only the current one, and whether a subsequent login is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3chers? Actually, the description does not add any information about the tenantId parameter beyond what the schema already provides. The schema already states it defaults to workspace metadata then CPS_TENANT_ID, so the description adds no extra semantics. Thus, a score of 2 is appropriate (lower than baseline because it adds zero value).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Remove cached MSAL accounts') and a clear scope ('for the tenant'), which is clear and actionable. It distinguishes from siblings like cs_login and cs_login_status, though it could explicitly mention that it signs out the current user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention that it should be used when the user wants to end a session explicitly, nor does it reference any related tools. Without this, an agent may not know if it's needed before auth or after.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_lookup_schemaLook up the YAML schemaA
Inspect the Copilot Studio authoring schema: summarize or resolve a definition (e.g. Question, SearchAndSummarizeContent, KnowledgeSourceConfiguration), search by keyword, or list all kinds.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| depth | No | ||
| search | No | ||
| resolve | No | Return the full resolved JSON instead of a summary | |
| listKinds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses an inspect-like, read-only posture through words like 'Inspect', 'summarize', 'search', and 'list', and it distinguishes between a summary and full resolved JSON output. It does not mention auth or rate limits, but those are less relevant for a schema lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the resource and then enumerates the supported modes with no filler. Every clause contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the primary interactions for a lookup tool with no required parameters and no output schema. It leaves the 'depth' parameter and mode-combination behavior unspecified, which an agent might need for more nuanced lookup calls. Given the absence of annotations and output schema, slightly more detail would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate. It maps 'summarize or resolve a definition' to name/resolve, 'search by keyword' to search, and 'list all kinds' to listKinds, and provides useful example definition names. However, the 'depth' parameter is not explained, leaving some semantics to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Inspect') and resource ('Copilot Studio authoring schema') and enumerates distinct modes: summarize/resolve definitions, keyword search, and list kinds. The examples of definition names add concreteness. This clearly differentiates the tool from the large set of siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool's usage context—schema inspection—and lists the operations available, giving an agent clear context for when to invoke it. It does not explicitly name alternatives or exclusions, but no sibling appears to overlap with schema lookup, so this is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_merge_translationsMerge translation filesA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| files | Yes | Translation files; glob patterns allowed | |
| whatIf | No | Report what would change without changing anything | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| verbose | No | More diagnostic output | |
| solution | No | Solution unique name | |
| sourceDir | No | Unpacked solution folder to update instead of the environment | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 900 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so excellently. It discloses the dry-run behavior with whatIf, the mutation of a live environment, the confirm requirement, and that only some inputs mutate (guiding the agent to parameter descriptions). It also mentions the actual pac command and auth profile, which is valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of four tightly-packed sentences, each earning its place: core purpose, whatIf preview, underlying command and auth, and mutation/confirm behavior. It is front-loaded and structured logically, with no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 11 parameters and no output schema, the description covers the essential high-level semantics: import direction, target scope, dry-run behavior, mutation safety, and the confirm gate. It appropriately points to parameter descriptions for details and explains the overall workflow well as a standalone definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a useful meta-note that only some inputs mutate)Skip mentioning 'see the parameter descriptions', but this does not materially enhance parameter meaning beyond the already-comprehensive schema. No additional detail on any specific parameter is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Import'), resource (translated .resx or .json files), and target ('back into one or more agents'), with scope ('environment or unpacked solution folder'). It distinguishes itself from sibling cs_extract_translations by using 'back' to indicate the reverse direction, and mentions the underlying pac command, so an agent can unambiguously identify what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool: it previews with whatIf, requires confirm: true for actual mutation, and runs with the active pac auth profile. However, it does not explicitly name alternatives or state when not to use this tool versus a sibling like cs_extract_translations, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_pacRun any pac commandA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| args | Yes | Arguments after 'pac', e.g. ["env","list"] | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as (cs_init lists them) | |
| timeoutSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly explains the read-only vs. mutating command distinction, the confirm requirement for changes, and the profile override behavior. It does not mention cwd/timeout handling or return format, but the main safety-relevant behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The purpose is front-loaded, the read-only vs. confirm distinction is compactly stated, and the profile explanation adds necessary context without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deliberately generic escape-hatch tool, the description covers the essential invocation decisions: what the tool does, how to gate destructive commands, and how to switch profiles. The absence of an output schema is acceptable since the output is pac's own output. The optional cwd and timeoutSeconds parameters are left unexplained, but they are ancillary and named in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents args, confirm, and profile, leaving cwd and timeoutSeconds undocumented (60% coverage). The description adds useful meaning for profile—running as another pac auth profile, e.g., tenant admin—and reinforces the confirm behavior, but it does not compensate for the undocumented cwd and timeoutSeconds parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool runs any 'pac <args...>' command directly, and the phrase 'escape hatch' distinguishes it from the many curated pac-specific sibling tools. It lacks a single specific resource because it is deliberately broad, but the verb and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operating context: use this tool to invoke pac directly when a dedicated wrapper is not appropriate. It also provides a concrete decision rule for the confirm parameter—read-only commands run immediately, anything else requires confirm: true. It does not explicitly name alternatives or say 'prefer cs_* when available,' so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_packPack workspace into a solution zipB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| outputPath | No | ||
| solutionName | No | ||
| publisherPrefix | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose local-only behavior, no sign-in, and the outputPath constraint, but omits details such as error behavior, whether an existing output file is overwritten, or what successful output looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loading the main action and then adding the critical outputPath constraint and secondary use. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and weak schema documentation, the description is too thin. It covers high-level behavior and one parameter constraint, but leaves the required publisherPrefix and solutionName semantics unexplained and does not describe expected results or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the description adds value for outputPath by requiring it to be outside the workspace. However, it does not explain the required publisherPrefix or solutionName parameters, so the agent still lacks enough meaning for most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: locally packing the workspace into a Dataverse solution .zip, and explicitly notes 'no sign-in'. This is clear, though it does not explicitly distinguish itself from the similarly named sibling cs_pack_solution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for local-only, offline packaging and mentions that it doubles as a cheap structural check. However, it does not state when to prefer this over alternatives like cs_pack_solution or cs_check_solution, nor does it give exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_pack_solutionPack an unpacked solution folderB
pac solution pack: zip an unpacked source folder (after local edits) so it can be deployed.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | Yes | ||
| folder | Yes | ||
| packagetype | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions packaging for deployment, but does not disclose side effects (e.g., whether the zip file is overwritten, whether the source folder is modified), permission requirements, packagetype implications/defaults, or what the tool returns. This is too thin for a write/creation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler. It front-loads the action, adds the key timing condition ('after local edits'), and gives the deployment purpose, so every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and zero parameter descriptions, this one-sentence description is not enough. It omits packagetype behavior, default choices, prerequisites, relationship to sibling tools, and any indication of what the agent should expect after invocation. For a 3-parameter tool, this is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for 'folder' (an unpacked source folder) and 'zip' (the packaging output), but leaves 'packagetype' unexplained. The enum values are self-explanatory, but their behavioral impact and default behavior are unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('zip') and the resource ('an unpacked source folder'), and gives the purpose ('so it can be deployed'). It is specific and actionable, though it does not explicitly differentiate itself from sibling tools like cs_pack or cs_import_solution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after local edits' gives useful contextual timing, implying this should be used before deployment. However, it provides no explicit alternatives, when-not-to-use guidance, or relationship to related tools such as cs_pull, cs_check_solution, or cs_deploy_solution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_publishPublish the agentA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| via | No | ||
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| background | No | Run in the background and return a jobId immediately, then poll cs_job_status. MCP clients cut a tool call off after about 60 seconds; this operation can take much longer, and without this the work is orphaned rather than cancelled. | |
| dataverseUrl | No | ||
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| timeoutSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and it delivers real substance: the publish-only semantics (it does not upload local edits), the confirm gate with dry-run fallback, transport-specific behavior (pac copilot publish vs the PvaPublish action with MSAL), and polling until publishedon changes. It omits auth/permission requirements and failure or reversibility behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key prerequisite are front-loaded in the first two clauses, and the implementation detail is compressed into one trailing sentence. It is dense but each clause carries information; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, zero-annotation, no-output-schema mutation tool, the description covers the workflow, the safety gate, the async/background caveat, and transport routing. It leaves auth prerequisites and post-publish verification (e.g. checking cs_status or cs_job_status) implicit, which is a modest gap rather than a critical one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 70%, so the schema already documents most parameters; the description still adds genuine meaning by explaining what the two enum values of 'via' actually do under the hood. It also reinforces the confirm parameter's effect, going slightly beyond the baseline 3 for a well-covered schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: making the agent's current draft visible to real users on its channels. It also disambiguates from the nearest sibling by noting it publishes what is already in Copilot Studio and that local edits must go up via cs_push first, so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite (run cs_push before publishing), maps user phrasings ('go live', 'release it', 'make my changes live') to the tool, and flags that confirm: true is required. It does not, however, say when to prefer one transport over the other or when publishing is inappropriate (e.g. unreviewed drafts), so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_publish_customizationsPublish all 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 3600 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly discloses that the tool 'Mutates a live environment' and explains the confirm/dry-run behavior, which is essential safety information. It also names the underlying pac command and auth profile dependency, giving the agent a realistic model of what will happen. It could add more about side effects or reversibility, but the core behavioral traits are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences that lead with the core actionaine then add the critical mutation warning. The parenthetical UI reference is mildly redundant but not wasteful. It is well-structured and front-loaded, with no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema and no annotations, the description covers the essential danger and execution model, but it leaves open questions about return values, success/failure signals, and how this differs from the similar cs_publish sibling. The large sibling list and lack of exclusion guidance make the description slightly incomplete for confident tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context about the confirm parameter ('Required to actually perform a change in a live environment') and the active pac auth profile, but these points are already reflected in the schema. It does not introduce substantial new meaning beyond the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Publish every unpublished customization in the environment' and identifies it with the 'Publish all customizations' button. It also names the underlying command ('pac solution publish'), making the purpose concrete. However, it does not explicitly differentiate itself from the sibling tool cs_publish, which could cause selection ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: it mutates a live environment and requires confirm: true to avoid a dry run. This communicates when the destructive action will actually happen, but it does not state when to prefer this tool over cs_publish or other sibling publish/import tools. Usage context is implied rather than explicitly framed against alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_pullPull remote changesA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses side effects: performs a merge, downloads files, writes a sync stamp to '.mcs/cs-sync.json', and explains how that stamp interacts with cs_check_drift. It doesn't mention conflict handling or reversibility, but it is specific about observable state changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact trio of sentences: purpose, usage timing, and side-effect/follow-up. It front-loads the core action and avoids fluff. It is slightly dense but well-organized and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a pull operation with one optional parameter and no output schema, the description covers the core action, side effects, prerequisite timing, and a follow-up step. It could mention conflict resolution or idempotency, but it addresses the essential aspects an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter description already explains the 'workspace' parameter and its default. The tool description adds no additional semantic information beyond what the schema provides, so it meets the baseline but adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('pull'), the resource ('server changes into the local workspace'), and adds clarifying detail ('three-way merge', 'downloads knowledge files'). It clearly distinguishes from siblings like cs_push and cs_check_drift by explaining its role in syncing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to run the tool: 'Run before editing and before pushing.' It also provides a follow-up action ('commit the workspace afterwards'). However, it does not explicitly name alternatives or state when NOT to use it, though the timing guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_pull_solutionPull a whole solution locallyA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Solution unique name | |
| targetDir | Yes | ||
| background | No | Run in the background and return a jobId immediately. Use this when the export is large enough that the MCP client times the call out; poll with cs_job_status. | |
| cloneAgents | No | Default true | |
| environment | No | Environment id or URL. Defaults to the active pac auth profile. | |
| packagetype | No | Default Both: exports both zips, unpacks both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it does so well: it lists exports, unpacking, file generation, and agent cloning into sync-connected workspaces. It does not mention whether an existing targetDir is overwritten or whether specific permissions are required, but the disclosed side effects are substantial and concrete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the primary action, followed by a clear list of artifacts and a final routing sentence. Every clause adds useful information, though the long comma-separated structure could be slightly easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no annotations and no output schema, the description covers the essential call semantics: what is exported, where outputs land, what gets generated, and how the result feeds cs_deploy_solution. It does not describe return values or preconditions like an empty targetDir, but the schema covers background/jobId behavior and the description covers the main invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 83%, so the baseline is 3, but the description adds meaning beyond the schema by explaining what targetDir is used for (<targetDir>/src, solution.json, agents) and clarifying the managed/unmanaged behavior behind packagetype. This compensates for the one schema property without a description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Export'), a specific resource (the solution), and a complete set of concrete outputs (<targetDir>/src, solution.json, deployment-settings.json, agents). It also distinguishes this tool from generic siblings by stating it is the input for cs_deploy_solution, making its role in the workflow clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by positioning the tool as the required precursor to cs_deploy_solution, which tells an agent when this tool fits into a deployment workflow. It does not explicitly enumerate exclusions or compare against siblings like cs_pull or cs_clone_solution, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_pushPush local changesA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Push even if validation reports errors or portal changes conflict with local edits | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full safety burden and does so: it validates YAML and blocks on errors unless force, defaults to a dry run, blocks when portal drift overlaps local edits, notes cs_login caching is needed for the drift check, and requires confirm: true to modify a live environment. These are exactly the mutation-safety facts an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and routing, then behavior, then the safety gate. Sentences are dense but each carries distinct information; it runs slightly long, with the 'This is the tool for...' routing sentence and the parenthetical CLI name both somewhat redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers prerequisites (cached cs_login), validation and blocking rules, dry-run default, the confirm gate, and the follow-up step (cs_publish). Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description nonetheless adds real meaning by tying force to two distinct override conditions (validation errors and portal-vs-local conflicts) and confirming that confirm is what converts a dry run into a live change. It does not add anything for workspace, but that is already fully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send local file changes up into the agent's draft in Copilot Studio') and enumerates the artifact types (topics, knowledge files, flows, connection references). It also draws the boundary against cs_publish ('the separate step afterwards'), so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly maps user phrasings ('upload', 'send my changes up', 'sync my edits') to this tool and names the alternative step (cs_publish) for publishing. The direction of movement (only into the draft) is stated, implying cs_pull is the reverse counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_quarantine_agentQuarantine or release an 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| botId | Yes | Agent id (GUID) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| quarantine | No | true to quarantine (default), false to release | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states this mutates a live environment, requires confirm: true (else it is a dry run), and specifies the underlying command. It also mentions authentication via the active pac auth profile. This is thorough for a mutating tool with no structured safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences, with the core purpose front-loaded. Every sentence adds value: purpose, admin context, command, mutation warning, and confirm requirement. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutating tool with no output schema, the description covers the essential operational aspects: how to perform a real change (confirm), what the tool does (quarantine/release), and the admin context. Remaining parameters (cwd, environment, timeoutSeconds, background) are fully documented in the schema, so the description need not repeat them. It is sufficient for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description does not add much beyond the schema: it mentions 'requires confirm: true' but that is already in the confirm parameter's description. It repeats the quarantine/release semantics already present. Since the schema is comprehensive, the baseline of 3 is appropriate; no significant added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Put an agent in quarantine or release it.' It also specifies it is an 'Admin operation' and names the underlying command ('pac copilot quarantine'), which clearly distinguishes it from other agent-related operations. No ambiguity or tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: 'Admin operation' and 'Mutates a live environment' indicate when it should be used (admin tasks requiring a real change). It also states the confirm: true requirement, which is a key usage condition. However, it does not explicitly name alternative tools or specify 'instead of X', so it stops short of full guidance. Still, the purpose is unambiguous enough for an agent to choose it for quarantine/release tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_reassign_org_agentReassign an agent's ownerA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Package id from cs_list_org_agents, e.g. P_19ae1zz1-56bc-505a-3d42-156df75a4xxy | |
| userId | Yes | Entra object id of the new owner | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it warns that the tool 'Changes a live tenant', requires confirm: true, lists required permissions (CopilotPackages.ReadWrite.All), notes Graph beta and cs_login scope, and flags licensing, cloud, and verification limitations. This is substantial and honest disclosure for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each earning its place: the action, the use case, the live-change/confirm warning, and the environment/permission caveats. Information is front-loaded and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutating tool with no output schema and no annotations, the description covers prerequisites, safety, scope, and limitations well. It does not describe the expected return value or success/failure shape, but it provides enough operational context for an agent to invoke it correctly with the schema's help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds little beyond confirming that ownership is transferred via Entra object id and that confirm is needed for live changes, both of which are also in the schema. This matches the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Hand ownership of a catalogue agent to another user') and names the key identifier ('Entra object id'). It clearly belongs to the org-agent family and is distinguishable from siblings like cs_update_agent or cs_delete_agent by its ownership-transfer purpose and its 'used when the owner leaves' trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case ('Used when the owner leaves the organisation'), which is clear contextual guidance. It does not name alternatives or state when not to use it, but the trigger is specific enough for an agent to route correctly among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_remove_componentRemove a component from the workspaceA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| pruneConnectionReference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden and does so well. It discloses the destructive nature ('Deletes files'), the confirmation requirement, the deferred effect on the live agent, and the side effect of dropping connection references unless another tool uses them. It also mentions the redirect-reporting behavior, which is useful beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then adds only high-value behavioral details. Every sentence earns its place, and the formatting with the confirm requirement is efficient rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the main workflow well, including deletion, confirm, push timing, and tool-specific side effects. It is incomplete, though, because 'pruneConnectionReference' remains unexplained, and the description does not clarify what output or result shape an agent should expect beyond 'reports topics'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, so the description must compensate. It adds meaning by enumerating the valid kinds and explaining the tool-specific connection-reference behavior, which helps interpret 'kind'. However, it does not explain 'name' semantics or 'pruneConnectionReference', leaving a meaningful gap for an optional parameter that the schema also fails to describe.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb ('Delete') and enumerates the full set of component kinds (topic, knowledge source, tool, trigger, variable, flow), while scoping the action to workspace files rather than the live agent. This makes it immediately distinguishable from sibling add/edit/push/delete tools even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context: the change is workspace-local, takes effect on the next cs_push, and confirm: true is required for deletion. However, it never explicitly tells an agent when to choose this tool over alternatives like cs_edit_topic, cs_add_tool, or cs_delete_connection, so routing must be inferred from the action semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_review_agentReview the agent for common mistakesB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | No | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| reportPath | No | Write the Markdown report here |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does state that a score, findings with fixes, and optional Markdown are returned, which is useful. But it is silent on whether the review is read-only, whether it requires authentication, whether it mutates the workspace (e.g., writes a report), and what the reportPath side effect is – a real gap for a tool that produces output artifacts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long sentence with a dense checklist of topics, which front-loads purpose reasonably. However, the laundry list of review dimensions reads as a data dump and could be structured more cleanly; it is adequate but not efficiently organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a review tool with no annotations and no output schema, the description does state the return shape (score, findings, fixes, optional Markdown). Yet it omits the safety profile, the workspace default behavior, and the reportPath side effect, leaving the agent to guess about key invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with workspace and reportPath documented in the schema and markdown undocumented. The description does not add parameter-level meaning beyond what the schema provides, so it fails to compensate for the uncovered boolean. Baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb (judge/review) and resource (the agent), and enumerates the categories of issues it checks (instructions, escalation, trigger overlap, tool collisions, credentials, etc.). It is clearly distinguishable from siblings like cs_validate or cs_check_solution, which target different artifacts. It loses the top mark only because 'agent' scope and the workspace target are implied rather than stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it by listing what it inspects, so an agent can infer this is for auditing an existing agent workspace. But there is no explicit when-not-to-use guidance and no mention of the closest alternative, cs_validate or cs_generate_instructions, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_run_conversation_testsRun local 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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | ||
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| tests | No | ||
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| transport | No | auto detects the agent's authentication mode via Dataverse; directline for no-auth/manual-auth agents; sdk for Entra SSO agents | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| schemaName | No | ||
| stopOnFail | No | ||
| dataverseUrl | No | ||
| writeExample | No | Path to write an example test file, then return | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| tokenEndpoint | No | Explicit DirectLine token endpoint | |
| conversationId | No | Continue an earlier conversation from cs_chat | |
| directLineSecret | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It states that tests run only against the published agent, that every result reports the observed topic, tool and citations even when not asserted, and that it reports pass/fail. It does not explicitly state whether running changes anything or its effect against the agent, but its non-destructive nature is strongly implied except for writeExample.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences carry distinct loads: the invocation target, the assertion semantics, the reporting behavior, and a positioning/cli tip. It is dense and useful, with no empty filler, though the writeExample tip slightly repeats what the schema already says.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15 parameter tool with no output schema, the description does well: it explains the YAML format, the assertion surface, the through-cs_chat execution path, and the report content (pass/fail, plus always-present observed topic, tool, citations). It does not detail the full output structure or the remaining undocumented params, but an agent can meaningfully formulate and parse the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, so the description must compensate. It adds real meaning to the most critical and least-constrained parameter, expect, by enumerating its supported assertion forms (contains, containsAny, notContains, regex, minLength, noSignIn, usedTool, notUsedTool, usedTopic, notUsedTopic, citedKnowledge). It also describes the YAML test file shape. Parameters like file, stopOnFail, dataverseUrl, and directLineSecret remain without explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: "Run a YAML test file" against "the published agent through cs_chat" and report pass/fail. It also explains the assertion scope (wording plus tool/topic/citation checks), which separates it from a plain chat or evaluation tool. It does not explicitly name sibling tools like cs_run_evaluation, so the distinction is clear but implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "The CLI-native complement to portal evaluations" locates the tool relative to portal-style evaluation UX, and "through cs_chat" suggests it parallels the chat tool. However, it does not explicitly name alternative siblings (cs_run_evaluation, cs_create_test_set_csv, cs_create_test_set) or specify a when-not-to-rule, so guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_run_evaluationRun an 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.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | ||
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| runName | No | ||
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| testSetId | Yes | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| timeoutSeconds | No | ||
| mcsConnectionId | No | User profile connection id for authenticated knowledge/tools | |
| runOnPublishedBot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that running counts against a 20-run-per-agent-per-24h limit and requires confirm: true, which is important operational guidance. It also mentions the optional wait-for-summary behavior, though it does not explain what is returned when wait is false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and immediately followed by the most important caveats. Every clause adds information: test set target, draft/published default, optional waiting, and quota/confirm requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key action and constraints but has gaps: it does not describe the return value when wait is false, does not mention how to poll for results via cs_get_evaluation_run, and does not explain the dry-run behavior when confirm is false. Given 12 parameters and no output schema, a complete definition should provide more guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 58%, so the schema already documents many parameters, but the description adds meaning missing from the schema for runOnPublishedBot ('draft agent by default, or the published one'), wait ('Optionally wait for completion'), and confirm ('requires confirm: true'). This goes beyond the bare schema and helps parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific action ('Start an evaluation run') on a specific resource (a test set) and clarifies the draft-agent default vs the published one. It clearly differentiates from siblings like cs_get_evaluation_run and cs_list_evaluation_runs by focusing on initiating a run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context like the optional wait behavior and the 20-run quota, but it does not explicitly say when to use this tool over alternatives or when not to use it. It implies usage for starting evaluation runs but leaves the choice versus cs_run_conversation_tests or polling tools to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_run_flowStart a flow runA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | Flow id (cs_list_flows) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| payload | No | Body for the trigger | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| triggerName | No | Trigger key inside the definition (cs_get_flow lists them); default 'manual' | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations provide any safety or behavioral hints, the description carries the full burden and does well: it states that flows execute for real, that confirm:true is required for live changes, that it uses the Power Automate service scoped to 'flow', and that it is unverified. This is exactly the kind of behavioral transparency expected for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with no filler. It front-loads the core action in the first sentence, then immediately states the trigger constraint, the real-world consequence, and the verification incompleteness. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema and no annotations, the description gives the critical runtime context: trigger constraints, live side effects, and confirmation. It could also mention the dry-run mode when confirm is false or return/status semantics, but those are not essential and are partially implied by the parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying that the flowId must point to a manually triggered flow, that the payload is optional, and that confirm must be true for live execution, which supplements the schema more than just repeating its fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Start a run of a manually triggered cloud flow'. It also disambiguates by stating that scheduled and event-driven flows are not started this way, helping the agent distinguish this from flow-management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the when and when-not: only manual or agent-callable triggers can be used, and scheduled/event-driven flows run on their own. It also flags the confirmation requirement for live changes, but does not name a specific sibling tool to use instead, so the differentiation is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_select_auth_profileSelect the active pac 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| name | No | Profile name | |
| index | No | Profile index | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral side effects. It says the tool makes a profile active and runs 'pac auth select', but it does not explain consequences like persistent state change, behavior on invalid name/index, or how the 'profile' parameter works. The phrase 'with the active path auth profile' is ambiguous and potentially misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose in the first sentence. However, the second sentence 'Runs 'pac auth select' with the active path auth profile' is awkwardly phrased and adds confusion rather than clarity, so it loses a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has no annotations, 6 schemas, and no output schema. The description does not mention how name/index interact with profile, whether they are only mutual, what happens on success/failure, or whether background/job handling applies here. An agent may not know how to correctly combine parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes the parameters. The description adds a small link between 'name' and 'index' options and cs_init listing, but it does not clarify the relationship between these and 'profile' beyond what schema states. This is baseline adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: make a pac auth profile active, by index or name, and cites cs_init for listing. It distinguishes itself from profile listing or creation tools, though it doesn't explicitly nameify which sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus other auth-profile tools (e.g., cs_list_auth_profiles, cs_create_auth_profile, cs_auth_who) or when not to use it. The only mention is 'cs_init lists them' for finding the index, which implies prerequisite context but does not state selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_set_flow_stateTurn a cloud flow on or offA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | on = Activated, off = Draft | |
| flowId | Yes | Flow (workflow) id | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and meets it: it explicitly warns about changing a live environment and requires confirm: true, which sets expectations explicitly. It also notes the prerequisite constraints, adding useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: the core action, the typical scenario, and the safety precondition. No wasted words and no redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations or output schema, the description covers the critical ground: what it does, when to call it, which prerequisites must hold, and the confirmation gate. The only minor gap is no statement about idempotency or what happens if the flow is already in the target state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a bit beyond the schema by explaining that confirm is required for real changes, but most per-parameter meaning already lives in the schema, so it does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Switch a flow on (Activated) or off (Draft)') on a clear resource, making it immediately distinguishable from siblings like cs_run_flow or cs_update_flow. The added import-time context reinforces this purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the when-to-use scenario (post-import activation), and clearly states the conditions needed for a successful switch (connections bound, definition valid). It stops short of explicitly naming alternative tools, but the context is enough to prevent misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_set_solution_versionSet the solution version in Solution.xmlA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| filename | No | Tracker CSV for the filetracking strategy | |
| strategy | No | Version strategy (see pac solution version help) | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| buildVersion | No | Build version | |
| solutionPath | No | Unpacked solution folder or Solution.xml | |
| timeoutSeconds | No | Default 600 | |
| revisionVersion | No | Revision version |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses the key side effect ('Local file change only') and the execution context ('Runs pac solution version with the active pac auth profile'). It does not mention return values or failure modes, but the main behavioral traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action and resource front-loaded, followed by scope and implementation detail. Every sentence contributes meaningful information without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema, the high-level description is useful but leaves strategy-to-parameter relationships implicit (e.g., filename belongs to the filetracking strategy) and does not describe what the command returns. The rich schema partly compensates, but a sentence connecting the strategies to the parameters would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mentions the strategy names but adds no parameter-level detail beyond what the schema already provides; it neither compensates further nor introduces confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Update the version in a local unpacked solution's Solution.xml.' It further differentiates from online-version siblings by explicitly stating 'Local file change only,' and names the underlying pac command, so the tool's purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes the tool to local unpacked solutions and says it only changes local files, which prevents confusion with online solution versioning. It does not explicitly name alternative sibling tools or give when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_set_tool_presetChoose how many tools are offeredA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | Extra tool names to keep on top of the preset | |
| preset | Yes | Which set to offer for the rest of this session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden fully. It discloses scope (rest of session), effect (tools hidden, not lost), environmental safety ('changes nothing in any environment'), the cost tradeoff being addressed (50k tokens of schema crowding smaller models), and a consent precondition. That is unusually complete for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the trigger and effect, then backs it with rationale and preset definitions. Information density is high, though the preset list and token-count rationale make it longer than strictly necessary; nothing is wasted but it could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must cover purpose, scope, safety, and preset semantics – and it does. An agent has everything needed to decide whether to call it, which preset to pass, and that user confirmation is expected first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum values are documented in the schema, so the schema already carries parameter meaning. The description adds the semantics behind the preset names (what core/authoring/admin/solutions/full each contain), which is genuinely useful context beyond raw enum strings, but the 'keep' parameter is not addressed in the description at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific action and resource (narrow/restore the tool list) with a clear motivating symptom ('too many tools'). Distinguishes itself from every sibling: it is the only tool that changes what tools are offered rather than operating on agents, flows, or environments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the trigger condition explicitly ('Answer there are too many tools'), names the alternative direction (restore), and adds a process rule: 'Ask the user before calling it.' This is as close to explicit when/when-not as a session-scoped tool gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_snapshot_environmentSnapshot an 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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Snapshot folder (recreated) | |
| label | Yes | Short name such as DEV, TEST, ACC, PROD | |
| agents | No | Agent schema names or ids to clone; default: every agent pac copilot list returns | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| solution | No | Solution unique name to record version/managed state for | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| maxAgents | No | Default 20 | |
| environment | Yes | Environment id or URL | |
| includeDataverse | No | Default true: flows, connection references, environment variables and publish state via Dataverse (needs cs_login; skipped silently otherwise) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by explicitly stating 'Read-only for the environment.' It also discloses the conditional behavior for flows and Dataverse data when signed in, which agents need to know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense sentence with a front-loaded purpose, a clear colon-delimited content list, and a final safety qualifier. Every clause earns its place, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no annotations and no output schema, the description provides a solid overview, safety profile, and content scope while the schema covers parameter semantics. Explicit routing to related comparison tools is absent, but this is a minor gap given the otherwise complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented in the input schema. The description adds conceptual context about what the snapshot contains but does not need to repeat parameter-level details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Capture one environment into a folder') and enumerates the exact contents of the snapshot, including solution version, agents, flows, and publish state. This clearly distinguishes it from sibling comparison tools like cs_compare_snapshots or cs_check_drift.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for comparison or history' gives clear context for when to use this tool, and 'when signed in' notes a conditional scope. It does not explicitly name alternatives or exclusions, but the intended use case is stated well enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_solution_online_versionRead or set the online solution 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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| solutionName | Yes | Solution unique name | |
| timeoutSeconds | No | Default 600 | |
| solutionVersion | No | New version to set; omit to read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that it mutates a live environment and requires confirm: true to avoid a dry run, which is critical safety information not fully captured in annotations (since none are provided). It also mentions it runs 'pac solution online-version' and uses the active auth profile, adding operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core purpose and mutation warning, followed by a note on which inputs mutate. It is compact, with no filler, and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and no output schema, the description covers the core behavioral contract (read vs set, confirmation, dry run). It doesn't explain return values, but since there is no output schema, that might be a gap. However, given the complexity, it is fairly complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described in the schema. The description adds the distinction that solutionVersion is optional and controls read vs set, but does not add more depth beyond schema. The schema descriptions for confirm and profile already include important context, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the solution version without solutionVersion and sets it with solutionVersion, directly distinguishing it from siblings like cs_set_solution_version. The phrase 'Read or set the online solution version' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when to use the read vs set mode, and mentions the requirement for confirm: true to actually mutate, which is a key usage condition. It doesn't explicitly compare with other version-related tools like cs_set_solution_version, but the read/set distinction is clear enough for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_statusAgent provisioning statusC
pac copilot status for an agent id.
| Name | Required | Description | Default |
|---|---|---|---|
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, whether it requires authentication, whether it hits the network, or what the output looks like. The word 'status' implies a read, but the description does not confirm side-effect-free behavior or any failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, which is concise, but it is under-specified. It front-loads the resource and operation but omits essential context. A single sentence can be effective, but this one lacks enough substance to be genuinely useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, no annotations, and three optional parameters with defaults, the description should explain what status information is returned and how the defaults resolve. It does neither. The tool is simple, but the description is too thin for an agent to know what to expect or when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds no additional meaning beyond the schema, which is acceptable per the baseline. However, it does not clarify how the optional parameters interact (e.g., whether botId is required if workspace metadata is absent).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'pac copilot status for an agent id' identifies the resource (agent) and the operation (status), but it is terse and does not clarify what 'status' means (e.g., provisioning state, runtime health, deployment status). It is distinguishable from cs_job_status and cs_admin_environment_status only by the word 'agent', which is weak differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like cs_job_status, cs_get_org_agent, or cs_admin_environment_status. The description does not state prerequisites, such as needing an initialized workspace or a valid agent id, nor does it mention that all parameters are optional and default to workspace metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_summarize_transcriptsSummarise how the agent is doing in productionA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum sessions to read (default 100, max 500) | |
| days | No | Window in days (default: everything returned) | |
| topN | No | How many topics/tools/questions to list (default 10) | |
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and explicitly states 'Read-only,' which is the most safety-relevant behavior an agent needs to know. It also discloses that this is an aggregation operation rather than a per-session mutation, adding value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph with no fluff. It front-loads the key action ('Aggregate over recent sessions') and quickly covers what metrics are produced, state behavior, and downstream usage; slightly long but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description enumerates the return dimensions (how sessions ended, escalation rate, average turns, unmatched topics, topics/tools, and questions behind failures), which is sufficient for an agent to know what to invoke. It does not detail output shape, but the metric list is strong given the tool's analytic nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter has a description in the JSON schema. The description adds general context by explaining what the aggregated results measure, but it does not add additional per-parameter meaning beyond the schema's existing documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Aggregate') plus a concrete resource ('recent sessions') and enumerates exact metrics (escalation rate, average turns, unmatched topics, topics/tools that fire). It clearly distinguishes itself from sibling tools like cs_list_transcripts and cs_get_transcript by being an aggregate summary rather than a raw transcript reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly positions the tool as the input for deciding what to fix next and as a dependency for cs_create_test_set_csv fromTranscripts. While it does not enumerate explicit exclusions or alternatives, the stated purpose gives an agent enough context about when to reach for this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_sync_solutionSync a solution project from the environmentB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| map | No | Mapping XML file for component folders | |
| async | No | Run the operation asynchronously | |
| include | No | Settings to include in the export (pac solution export --include values) | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| localize | No | Extract string resources into .resx files | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| packageType | No | Unmanaged, Managed or Both (default Both) | |
| solutionFolder | No | Unpacked solution folder (Other/Solution.xml root) or .cdsproj folder; default: cwd | |
| timeoutSeconds | No | Default 3600 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It does state that the operation is read-only for the environment, which is a key safety hint, and that it updates an existing folder, implying local file modification. However, it does not mention potential side effects such as overwriting local files, the possibility of long-running execution, or async/background behavior (though the schema has those params). It also does not note that it requires an existing unpacked solution. These are significant gaps given the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. The main action and scope are front-loaded, followed by a key safety note and the underlying command. It is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters and no annotations, the description is under-specified. It lacks context on when to use this tool versus siblings, does not explain that it requires an existing solution project, does not disclose side effects like overwriting, and does not describe the return value or how to handle async/background operations. While the schema covers parameter details, the description should provide the operational context, which it largely omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters are fully documented in the input schema. The description adds no additional meaning beyond what the schema already provides (e.g., it mentions the active profile, but the schema already covers the 'profile' parameter). Baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool re-exports a solution and updates an existing unpacked solution folder or .cdsproj, which is a specific and actionable purpose. It mentions 'Read-only for the environment' and the underlying 'pac solution sync' command. However, it does not explicitly name sibling tools to differentiate itself, so an agent might still confuse it with cs_pull_solution or cs_pull, though the verb 'sync' and the 'update existing' phrasing help.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not state prerequisites (e.g., that a solution project must already exist), nor does it mention when to prefer a different tool like cs_init_solution_project or cs_pull_solution. The only context is that it uses the active pac auth profile, which is an implementation detail, not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_test_set_from_transcriptsBuild an evaluation test set from real conversationsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum sessions to read (default 100, max 500) | |
| days | No | Only sessions from the last N days | |
| botId | No | Agent (bot) id. Defaults to workspace sync metadata or CPS_AGENT_ID. | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| maxCases | No | Maximum cases in the CSV (portal limit is 100) | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| onlyFailed | No | Default true: only sessions that escalated, went unresolved or were abandoned | |
| outputPath | No | Default <workspace>/../<agent>-transcript-testset.csv | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it is read-only apart from writing a file, and that it reads sessions from a source. It explains the 'onlyFailed' behavior and hints at portal import. However, it doesn't disclose details like rate limits, authentication requirements, or potential side effects beyond file creation. The description is fairly transparent but misses some depth that an agent might need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose and the key behavioral distinction. It packs a lot of information into a compact space without redundancy. Every sentence adds something: purpose, the onlyFailed behavior, and the usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters with full schema coverage, an output file that is the CSV, and no output schema, the description provides enough context: what it does, how to use it, and the next step. It doesn't detail the CSV format or error handling, but those are not required for an agent to invoke it correctly. The description is complete for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds value by explaining the purpose of 'onlyFailed' in context and clarifies that the output file is the import CSV. It also mentions 'real conversations' which aligns with top/days parameters. However, it doesn't add much beyond the schema for parameters like botId or environmentId, but the schema already explains defaults clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states what the tool does: writes a CSV from real user questions, ordered by frequency. It distinguishes itself from guessing from workspace content and mentions 'onlyFailed' filtering. It also names a sibling tool (cs_run_evaluation) for the next step, differentiating its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains when to use it: when you need a test set derived from actual conversations instead of guesses. It mentions the 'onlyFailed' flag for selecting valuable sessions and notes the workflow: import once in portal, then use cs_run_evaluation. It doesn't explicitly say when NOT to use it (e.g., if you need all sessions or synthetic data), but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_update_agentUpdate the agent's settingsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| history | No | Whether the agent sees conversation history | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| displayName | No | ||
| capabilities | No | Capability toggles; only the ones you pass are changed | |
| instructions | No | Replace the instructions | |
| modelNameHint | No | Model hint, e.g. GPT5Chat | |
| historyMessages | No | How many past user messages to include (with history: conversation) | |
| contentModeration | No | ||
| useModelKnowledge | No | Whether the model may answer from its own general knowledge as well as the knowledge sources | |
| appendInstructions | No | Add a paragraph to the instructions | |
| defaultResponseMode | No | Response mode: Auto, ThinkDeeper (more reasoning, slower) or QuickResponse | |
| conversationStarters | No | ||
| responseInstructions | No | How answers should be worded and formatted (the portal's response instructions), separate from the main instructions | |
| isFileAnalysisEnabled | No | ||
| addConversationStarters | No | ||
| isSemanticSearchEnabled | No | ||
| appendResponseInstructions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it makes a local file change and that cs_push is required to apply it, which is useful behavioral context. It also differentiates file locations by harness. However, it does not mention whether changes are merged or overwritten, whether an existing agent is required, or any side effects beyond the file edit. These gaps limit transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not overly verbose, packing a lot of information into a single sentence. It front-loads the core action ('Edit agent.mcs.yml') before listing settings. While it could be split for readability, the length is justified given the 17-parameter complexity. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (17 params, nested objects, enums) and lack of output schema, the description covers most essential context: file locations, harness variants, and the need to push changes. It does not explicitly state that the agent must already exist, but that is inferred from sibling tools and the update verb. Overall, it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 59%, and the description adds significant semantic value by grouping parameters into meaningful categories (e.g., 'response instructions (wording and formatting)', 'capability toggles (web browsing, code interpreter, image generation...)'). It also explains the operational context ('Local file change; cs_push applies it') not present in the schema. This helps an agent understand the impact of parameters beyond their raw definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('Edit') and the exact resource ('agent.mcs.yml'), lists the specific settings it can change, and distinguishes between standard and Copilot harnesses. It clearly differentiates from sibling tools like cs_create_agent (creation) and cs_update_settings (generic settings) by specifying it updates agent configuration files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is used: to edit agent settings locally, and notes that 'cs_push applies it,' indicating the workflow. It also provides harness-specific guidance ('For GitHub Copilot harness... settings.mcs.yml'), which helps select the right target. However, it does not explicitly state when not to use it versus alternatives, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_update_connectionUpdate a service-principal Dataverse 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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| tenantId | Yes | Entra tenant id | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| clientSecret | Yes | New client secret (masked in logs) (masked in logs and results) | |
| connectionId | Yes | Connection id (cs_list_connections) | |
| applicationId | Yes | App registration (client) id | |
| timeoutSeconds | No | Default 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden; it clearly states that the command 'mutates a live environment' and ties the mutation guard to confirm: true, with a dry-run fallback. It also names the auth context via the active pac auth profile. It does not fully cover reversibility, permissions, or side effects on existing connections, but the core mutation risk is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver the action, the shell command, and the critical safety gate with no filler. The most decision-relevant fact (mutates a live environment) is clearly separated and easy to notice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating 10-parameter tool with no output schema, the description plus the rich parameter schema is largely sufficient to call the tool correctly: purpose, command, auth context, and the mandatory confirm flag are all present. It omits return/output expectations and explicit alternative routing, but those are partially covered by the background/jobId parameter and sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured fields already document tenantId, applicationId, clientSecret, confirm, and profile in detail. The description mostly echoes the profile default and confirm semantics rather than adding new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Rotate the app registration or secret') and names the exact resource ('service-principal Dataverse connection') and underlying command ('pac connection update'). This makes it easy to distinguish from siblings like cs_create_connection and cs_delete_connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly establishes the intended scenario: rotating credentials on an existing service-principal connection, and it gives a concrete execution condition (confirm: true or dry run). It does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_update_flowUpdate a cloud 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| steps | No | Steps in order; each waits for the previous one to succeed | |
| flowId | Yes | Flow (workflow) id | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| outputs | No | What the flow answers with (agent-callable and HTTP flows) | |
| trigger | No | Default: 'agent' (When an agent calls the flow) | |
| clientId | No | Entra app (client) id for MSAL. Defaults to CPS_CLIENT_ID, then the first-party VS Code id. | |
| tenantId | No | Entra tenant id. Defaults to the workspace sync metadata, then CPS_TENANT_ID. | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. | |
| clientData | No | The whole clientdata document; overrides 'definition' | |
| definition | No | Power Automate definition object (properties.definition), instead of steps | |
| description | No | ||
| dataverseUrl | No | Dataverse URL; default: from the workspace or the environment | |
| environmentId | No | Power Platform environment id (GUID). Defaults to workspace sync metadata or CPS_ENVIRONMENT_ID. | |
| connectionReferences | No | Connection reference entries to add or explicitly replace; existing entries are otherwise preserved | |
| connectionReferencePrefix | No | Prefix for generated connection reference names, usually your publisher prefix |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that this changes a live environment, requires confirm: true, preserves connection references, replaces properties.definition in the existing clientdata, and that clientData replaces the whole document. It does not mention the dry-run behavior or return format, though the schema's confirm parameter covers the dry-run behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with no filler. Every sentence contributes: the core action, the two ways to supply a definition, the clientData override, the prerequisite read, the managed-flow exclusion, and the confirm requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 16-parameter mutation tool with no output schema, the description covers the important workflow: how to supply changes, what gets replaced, what is preserved, the managed-flow constraint, and the confirm requirement. It does not describe the return value, but the schema and the tool's update nature make that a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the baseline is 3. The description adds real semantics beyond the schema for key parameters: steps/trigger rebuild the definition, definition is a ready-made alternative, clientData replaces the entire document, and connection references are preserved. It does not add detail for every parameter, but the schema already documents most of them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Change a flow's name, description or definition in the environment') with a clear resource and scope. It is clearly distinguishable from siblings like cs_create_flow, cs_set_flow_state, and cs_get_flow without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: read the current flow with cs_get_flow includeDefinition first, use steps/trigger to rebuild definitions the way cs_build_flow_definition does, and notes that managed flows cannot be edited in place but should be edited in their source environment or through a solution. This is strong when/when-not and alternative-tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_update_settingsUpdate settings.mcs.ymlA
Set values in settings.mcs.yml by dot path, e.g. {"configuration.settings.GenerativeActionsEnabled": true}. Do not change authoringModel/recognizer/template.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | ||
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool mutates settings and includes a guardrail against changing certain keys, which adds useful context. But it does not state whether the patch merges or replaces existing settings, what happens on invalid paths, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: it states the action, mechanism, an example, and a critical safety warning in two sentences. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter settings update tool, the description provides the essential information for invoking it correctly: the dot-path format, a concrete example, and a warning about protected keys. It does not explain merge behavior or error handling, but these are not critical for selecting the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% because the required 'patch' parameter lacks a description. The description compensates by explaining dot-path semantics and giving an example with a boolean value, which is meaningful beyond the empty additionalProperties schema. The 'workspace' parameter is already covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set values') and names a concrete resource ('settings.mcs.yml'), then clarifies the mechanism ('by dot path') with a concrete example. This clearly distinguishes it from sibling tools like cs_update_agent or cs_update_flow, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage: when you need to change a value in settings.mcs.yml, use this tool. It also provides a boundary by explicitly saying not to change authoringModel/recognizer/template. However, it does not explicitly mention alternatives or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_upgrade_solutionApply a staged solution upgradeA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for pac (for project commands: the solution project folder) | |
| async | No | Run the operation asynchronously | |
| confirm | No | Required to actually perform a change in a live environment. Without it the tool returns a dry run. | |
| profile | No | pac auth profile to run as: the admin account for tenant commands. Defaults to CPS_ADMIN_PROFILE for admin commands and CPS_PAC_PROFILE otherwise, then the active profile. cs_init lists the profiles. | |
| background | No | Run in the background and return a jobId immediately, for a command that takes longer than the client will wait. Poll cs_job_status. | |
| environment | No | Environment id or URL; default: the environment of the active pac auth profile | |
| solutionName | Yes | Solution unique name | |
| timeoutSeconds | No | Default 3600 | |
| maxAsyncWaitTime | No | Max asynchronous wait time in minutes (default 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It honestly warns that the command 'Mutates a live environment' and explains the dry-run behavior when confirm is not set. It also mentions the active pac auth profile, giving an important authentication context. It could go further to note irreversibility or side effects on existing solution customizations, but the core safety-critical behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct function: purpose, execution mechanism, and safety warning. It is front-loaded with the core purpose and ends with the most critical operational constraint. There is no fluff or redundancy, and the structure makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the full operation context: staged-upgrade scenario, command execution, profile usage, and mutation danger. With 9 parameters but 100% schema coverage and no output schema, the description provides enough for an agent to understand the tool's role and invoke it safely. It does not explain return values, but that is not required given the schema's parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline for parameter semantics is 3. The tool description repeats the 'confirm: true' requirement that is already fully documented in the schema, but it adds no new parameter-level meaning beyond that. With high schema coverage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Complete') and resource ('managed solution upgrade') with a critical qualifier ('imported as a staged upgrade'). This clearly distinguishes it from general solution import or deployment tools listed among siblings. The explicit command reference ('pac solution upgrade') adds further precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when the tool should be used: after a staged upgrade has been imported via pac or the portal. It also implies a prerequisite ('confirm: true') for actual execution. It does not explicitly name alternative tools or say when not to use it, but the staged-upgrade framing makes the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cs_validateValidate workspace YAMLA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Validate a single file (relative to workspace) | |
| workspace | No | Path to (or inside) the agent workspace. Defaults to CPS_WORKSPACE or the current directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that it 'only reads them and sends nothing anywhere' (safety/read-only), lists the validation categories (kinds, duplicate ids, placeholders, Power Fx prefixes, variable scopes, cross-file checks), and its relationship to cs_push. It stops short of return-value or severity/reporting behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scoping, followed by the check inventory and the read-only note. The long parenthetical is dense but each item is informative; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must establish safety and coverage, which it does via the read-only statement and the enumerated check categories. It leaves the shape of the validation report (severity, error list format) unspecified, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description implies scope ('every component file') but adds no syntax, path-format, or workspace-resolution detail beyond what 'file' and 'workspace' already say, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Structural validation of every component file against the Copilot Studio authoring schema') and enumerates the exact check classes it covers. An agent can distinguish it from cs_check_drift, cs_status, or cs_review_agent without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Frames its purpose as answering 'is anything broken in these files?' and notes that 'cs_push runs it itself and blocks on errors', which tells the agent when this is redundant. It does not explicitly contrast with nearby siblings like cs_check_drift, so it falls short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.6- Added
cs_analyze_flow_health - Added
cs_bind_flow_connection - Added
cs_compare_flow_runs - Added
cs_delete_flow - Added
cs_explain_flow_run - Changed
cs_guide1 field changed- changed
Input schema / properties / topic / enumPrevious value: -[ - "getting-started", - "instructions", - "knowledge", - "tools", - "topics", - "evaluations", - "publish-and-test", - "drift", - "transcripts", - "solutions", - "administration", - "troubleshooting" -]New value: +[ + "getting-started", + "instructions", + "knowledge", + "tools", + "topics", + "flows", + "evaluations", + "publish-and-test", + "drift", + "transcripts", + "solutions", + "administration", + "troubleshooting" +]
137 tool updates
v0.1.5- First observed
cs_add_flow - First observed
cs_add_knowledge_source - First observed
cs_add_solution_component - First observed
cs_add_solution_license - First observed
cs_add_solution_reference - First observed
cs_add_tool - First observed
cs_add_topic - First observed
cs_add_trigger - First observed
cs_add_variable - First observed
cs_admin_add_environment_to_group - First observed
cs_admin_assign_group - First observed
cs_admin_assign_user - First observed
cs_admin_assign_users - First observed
cs_admin_backup_environment - First observed
cs_admin_copy_environment - First observed
cs_admin_create_environment - First observed
cs_admin_create_service_principal - First observed
cs_admin_delete_environment - First observed
cs_admin_environment_status - First observed
cs_admin_list_app_templates - First observed
cs_admin_list_applications - First observed
cs_admin_list_backups - First observed
cs_admin_list_dlp_policies - First observed
cs_admin_list_environment_groups - First observed
cs_admin_list_environments - First observed
cs_admin_list_security_roles - First observed
cs_admin_list_service_principals - First observed
cs_admin_list_tenant_settings - First observed
cs_admin_query - First observed
cs_admin_register_application - First observed
cs_admin_reset_environment - First observed
cs_admin_restore_environment - First observed
cs_admin_self_elevate - First observed
cs_admin_set_backup_retention - First observed
cs_admin_set_governance_config - First observed
cs_admin_set_runtime_state - First observed
cs_admin_show_dlp_policy - First observed
cs_admin_unregister_application - First observed
cs_admin_update_tenant_settings - First observed
cs_auth_who - First observed
cs_backup_tenant - First observed
cs_block_org_agent - First observed
cs_build_flow_definition - First observed
cs_chat - First observed
cs_check_drift - First observed
cs_check_solution - First observed
cs_clone_agent - First observed
cs_clone_solution - First observed
cs_compare_environments - First observed
cs_compare_snapshots - First observed
cs_create_agent - First observed
cs_create_agent_from_template - First observed
cs_create_auth_profile - First observed
cs_create_connection - First observed
cs_create_deployment_settings - First observed
cs_create_flow - First observed
cs_create_solution - First observed
cs_create_test_set_csv - First observed
cs_delete_agent - First observed
cs_delete_auth_profile - First observed
cs_delete_connection - First observed
cs_delete_solution - First observed
cs_deploy_pipeline - First observed
cs_deploy_solution - First observed
cs_describe_connector - First observed
cs_describe_solution - First observed
cs_describe_workspace - First observed
cs_edit_knowledge - First observed
cs_edit_tool - First observed
cs_edit_topic - First observed
cs_env_fetch - First observed
cs_env_list - First observed
cs_env_select - First observed
cs_env_who - First observed
cs_extract_agent_template - First observed
cs_extract_translations - First observed
cs_generate_instructions - First observed
cs_get_evaluation_run - First observed
cs_get_flow - First observed
cs_get_flow_run - First observed
cs_get_org_agent - First observed
cs_get_transcript - First observed
cs_guide - First observed
cs_import_solution - First observed
cs_init - First observed
cs_init_solution_project - First observed
cs_job_status - First observed
cs_list_agents - First observed
cs_list_auth_profiles - First observed
cs_list_connections - First observed
cs_list_connectors - First observed
cs_list_environments - First observed
cs_list_evaluation_runs - First observed
cs_list_flow_runs - First observed
cs_list_flows - First observed
cs_list_org_agents - First observed
cs_list_pipelines - First observed
cs_list_prompts - First observed
cs_list_solutions - First observed
cs_list_test_sets - First observed
cs_list_transcripts - First observed
cs_login - First observed
cs_login_status - First observed
cs_logout - First observed
cs_lookup_schema - First observed
cs_merge_translations - First observed
cs_pac - First observed
cs_pack - First observed
cs_pack_solution - First observed
cs_publish - First observed
cs_publish_customizations - First observed
cs_pull - First observed
cs_pull_solution - First observed
cs_push - First observed
cs_quarantine_agent - First observed
cs_reassign_org_agent - First observed
cs_remove_component - First observed
cs_review_agent - First observed
cs_run_conversation_tests - First observed
cs_run_evaluation - First observed
cs_run_flow - First observed
cs_select_auth_profile - First observed
cs_set_flow_state - First observed
cs_set_solution_version - First observed
cs_set_tool_preset - First observed
cs_snapshot_environment - First observed
cs_solution_online_version - First observed
cs_status - First observed
cs_summarize_transcripts - First observed
cs_sync_solution - First observed
cs_test_set_from_transcripts - First observed
cs_update_agent - First observed
cs_update_connection - First observed
cs_update_flow - First observed
cs_update_settings - First observed
cs_upgrade_solution - First observed
cs_validate
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.
Maintenance
Related MCP Connectors
Debug, build, and manage Power Automate cloud flows with AI agents
Build, deploy, and sell AI agents for local-service businesses - from your IDE.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Governed app access for AI agents: 1,000+ apps & 12,000+ tools via Code Mode MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with Microsoft Copilot Studio Agents directly from VS Code through the Direct Line 3.0 API. Supports starting conversations, sending messages, retrieving history, and managing conversation lifecycle with your custom agents.410 npmMIT
- AlicenseNot gradedqualityDmaintenanceGives a Microsoft Copilot Studio agent Claude-Code-style tools to read, edit, search, and run shell commands against your local filesystem.19MIT
- AlicenseNot gradedqualityDmaintenanceEnables platform engineering workflows via GitHub Copilot, including creating repositories from templates and provisioning Azure deployment environments.3MIT
- AlicenseAqualityDmaintenanceEnables interaction with Microsoft Copilot Studio Agents through the Direct Line 3.0 API, allowing users to start conversations, send messages, retrieve history, and end conversations directly from their code editor.410 npmMIT