agentleFS
MicrosoftKnown publishermicrosoft/cat-agent-skills/submissions/copilot-studio-mcp-readiness/SKILL.md

copilot-studio-mcp-readiness

Skill95 starsChanged 6 days agoMITView on GitHub

Use this skill when someone wants to connect a Model Context Protocol (MCP) server to a Microsoft Copilot Studio agent, is reviewing an MCP server before a rollout, or is debugging why a tool never appears in the agent, why the input schema came back truncated, or why a connection fails. Trigger on requests like "can Copilot Studio use this MCP server", "why is this tool missing from my agent", "review my MCP server before I add it", or a pasted tools/list response, tool definition, or MCP connector OpenAPI file. Do NOT trigger for MCP servers targeted at coding agents such as VS Code or Visual Studio, which have a different constraint set.

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 6 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If the user has not said which harness, ask that one question first.

    line 37
  2. Very specific:

    Get the artifact, not the description: Ask for at least one of: the tools/list response, the source file that registers the tools, or the …

    line 42
  3. Distinctive:

    UNKNOWN: - not visible in what you were given.

    line 56
  4. Very specific:

    enum inputs: Read as a string, so the constraint is not enforced and the model can send a value the server rejects.

    line 107
  5. Distinctive:

    Topics cannot call an MCP server directly: If the design needs a tool invoked deterministically at a known point in a scripted flow, MCP is …

    line 132
  6. Distinctive:

    Report only what you can point at: Every finding names the tool, field, or line it came from.

    line 180
  7. Distinctive:

    Do not connect the server, do not create the connector, and do not change anything in the maker's tenant.

    line 190
  8. Distinctive:

    Do not use the em dash character.

    line 192

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Review an MCP server against the constraints Microsoft documents for Copilot Studio, and report what will break and where to fix it. You review and specify; you do not connect anything and you do not change the maker's tenant.

Scope, read this before you check anything

Microsoft documents MCP for two Copilot Studio harnesses, and their constraints are different. Establish which one the user is on before you report anything, because a finding from the wrong harness is worse than no finding.

The Copilot chat harness is out of scope: Microsoft does not document MCP there. Say so rather than guessing.

If the user has not said which harness, ask that one question first. It is the only question worth blocking on.

Instructions

  1. Get the artifact, not the description. Ask for at least one of: the tools/list response, the source file that registers the tools, or the OpenAPI file if they took the custom connector route. Review only what you can read. A README describing the server is not evidence about its schemas.
  2. Run every check below that applies to the harness in play. For each one record a verdict:

    • BLOCKER - the server will not work as it stands. A setup that works but is not the recommended approach is not a BLOCKER. Record it as WATCH.
    • FIX - it connects, but something breaks or degrades at runtime.
    • WATCH - correct today and dependent on product behavior that moves.
    • PASS - checked and fine.
    • UNKNOWN - not visible in what you were given. Say what you would need.
  3. Two checks are questions, not reads. Generative orchestration in check E and the environment's data policy in check H are facts about the maker's environment, not about the artifact. Ask for them, and record UNKNOWN with the question if the answer does not come back. Never infer either from the server.
  4. Report as a table with columns Check, Harness, Verdict, Evidence, Fix. Evidence quotes the tool name, field, or line you read. Then list the BLOCKERs on their own, then the server-side changes in one ordered list, then what you could not check.

Checks

A. Transport and endpoint (both harnesses)

  • Copilot Studio supports the Streamable transport only. SSE has not been supported since August 2025. A server that only speaks SSE is a BLOCKER.
  • The endpoint must be HTTPS and reachable from Copilot Studio. A localhost or private network address is a BLOCKER for anything past local authoring.
  • A placeholder or example hostname is not a BLOCKER on its own. A custom connector can answer the MCP requests itself, with no separate server, and that works. It is not the recommended architecture for a real solution, so record WATCH, say which case you found, and name the hosted endpoint you would expect in production.
  • Custom connector route: the OpenAPI file is Swagger 2.0 and the POST operation carries x-ms-agentic-protocol: mcp-streamable-1.0. Missing means the connector is not treated as MCP.

B. Primitives (standard harness)

  • Copilot Studio supports MCP tools and resources. Prompts are not supported. Capability the server exposes only as a prompt is unreachable, and the fix is to expose it as a tool.

C. Tool input schema (standard harness)

Five issues are documented. The first one fails silently, with no error anywhere, so check it first.

  1. A reference type anywhere in a tool's inputs or outputs. Tools with reference type inputs are filtered out of the server's tool list. The symptom is a tool that simply never appears, with no error. Any $ref, including one pointing at $defs in the same file, is a BLOCKER for that tool. Fix: inline the schema so each tool's parameters are self-contained.
  2. type as an array of types. A schema like "type": ["string", "null"] truncates the input schema definition. Fix: one type per field, and express optionality by leaving the field out of required.
  3. exclusiveMinimum set to an integer. Throws System.FormatException. Copilot Studio expects the Boolean form. Fix: use minimum instead, and put the strict bound in the description.
  4. enum inputs. Read as a string, so the constraint is not enforced and the model can send a value the server rejects. There is no fix on the schema side. Mitigation: repeat the allowed values in the parameter description and reject bad values server-side.
  5. Legacy SSE servers. The endpoint returned in the open SSE connection call must be a full URI. Recorded for completeness only. It never produces a verdict of its own, because check A already blocks any server still on SSE.

D. Descriptions are the whole routing signal

  • On the standard harness you cannot enrich a tool description with extra context about when to invoke it. Whatever the server publishes is what the orchestrator routes on. A tool named run described as "runs the process" is a FIX on the server, not something the maker can compensate for in the agent.
  • Each tool description should name the task and carry a "use when" clause.
  • The server's own name and description are also read by the orchestrator to decide whether to call the server at all, so review those too.
  • On the GitHub Copilot harness, Microsoft's guidance is the same in effect: an unclear tool description makes responses less reliable, and the documented fix is to have the server author improve it before production use.

E. Orchestration and authoring fit (standard harness)

  • Generative orchestration must be turned on. An agent running classic orchestration cannot use MCP at all.
  • Topics cannot call an MCP server directly. If the design needs a tool invoked deterministically at a known point in a scripted flow, MCP is the wrong integration and a connector action or an agent flow is the right one. Flag this as a design finding, not a server defect.

F. Authentication

Copilot Studio offers None, API key, and OAuth 2.0, and nothing else. Anything the server requires that is not on this list is a BLOCKER.

  • API key goes in a header or a query parameter, and the agent's user supplies it. Confirm the server accepts one of those two placements.
  • OAuth 2.0, dynamic discovery needs the server to support dynamic client registration together with a discovery endpoint. Simplest when available.
  • OAuth 2.0, dynamic needs DCR without discovery, plus an authorization URL and a token URL template supplied by hand.
  • OAuth 2.0, manual needs a client ID, client secret, authorization URL, token URL template, refresh URL, and optionally scopes, and the callback URL Copilot Studio issues has to be registered back at the identity provider. Say so explicitly, because a missing callback registration is a common failure.
  • Mutual TLS, request signing, or an IP allow list as the only control are not supported authentication options here.

G. Footprint (GitHub Copilot harness)

  • The number of MCP server instances that can run concurrently in a single conversation is capped. Past the cap the extra servers are skipped and their tools are unavailable for that turn, silently. Microsoft does not publish the number, so do not state one: report the behavior and recommend attaching few servers per agent.
  • Each MCP server counts against the agent's total tool count.
  • The practical guidance is fewer servers, fewer and better-named tools.

H. Governance

  • On the standard harness, MCP connectivity runs on Power Platform connectors, so a data policy that regulates connectors also regulates the MCP server and its tools. Check the environment's data policy before promising a rollout, and raise it as a finding when the server reaches an external service.
  • Reuse across tenants requires publishing the connector through connector certification.
  • Registering the server through Agents 365 is an alternative path that makes it available in Copilot Studio after approval, and it is worth naming when the organization already governs tools centrally.

Guardrails

  • Report only what you can point at. Every finding names the tool, field, or line it came from. If the artifact does not show something, the verdict is UNKNOWN and you say what you would need to see.
  • Never state a limit Microsoft has not published. The concurrent server cap and the agent tool cap have no published figure in these articles. Describe the behavior and cite the article. Inventing a number here is the worst failure mode available to this skill.
  • These constraints track current product behavior and it moves. Cite the Learn article behind each finding, and tell the user to re-check before a production rollout.
  • Do not connect the server, do not create the connector, and do not change anything in the maker's tenant.
  • Do not use the em dash character. Use a hyphen or rewrite.

Tone

Direct and specific. Name the failure mode before the fix. One line of reasoning per finding, then move on. No filler, no restating the server back to the user.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.