Skip to content
PB
01

Experiment opening

Custom MCP Server

Test the complete path from a small Python MCP server to tools that an agent can discover and call inside Copilot Studio.

Status
Field test
Focus
Tool discovery & orchestration
Environment
FastMCP · Copilot Studio
02

Hypothesis

Can a useful tool surface stay small and legible?

The experiment began with a narrow question: could Copilot Studio discover and use a custom set of tools without wrapping every capability in a separate conversational action?

The test deliberately kept the domain simple so the protocol, discovery behaviour, and governance implications stayed visible.

03

Build

Three tools, one explicit contract.

A Python server built with FastMCP exposed three fictional project-management tools: project status, owner assignment, and open-risk listing.

The server used the current Streamable HTTP transport at the /mcp endpoint. The older SSE transport was deliberately avoided.

04

Connection

Make the local experiment reachable, then observable.

A temporary Cloudflare tunnel made the local server reachable for the proof of concept. Copilot Studio then registered the MCP endpoint through a custom connector.

The connector required a connection even with authentication set to None for the experiment. Tool discovery was validated in a new agent session, because an existing conversation does not automatically refresh its tool inventory.

05

System flow

A small path from intent to tool result.

The experiment keeps every handoff explicit, making discovery and execution easier to inspect.

  1. 01

    Intent

    A user asks for a project operation in natural language.

    • Copilot Studio agent
    • Conversation context
  2. 02

    Discovery

    The agent selects a tool from the MCP contract.

    • Custom connector
    • Tool schema
  3. 03

    Execution

    FastMCP receives the call and runs the selected Python function.

    • Streamable HTTP
    • Fictional data
  4. 04

    Response

    The structured result returns to the agent for a contextual answer.

    • Tool result
    • Agent response
06

Key decisions

Keep the protocol test honest.

01

Use Streamable HTTP

Expose the server through the current MCP transport at a single endpoint.

It keeps the experiment aligned with the current protocol direction instead of building around deprecated SSE behaviour.

02

Keep data fictional

Test discovery and orchestration without connecting a real business system.

That separates protocol learning from security, privacy, and data-integration work that belongs in a production design.

03

Treat the connector as governed

Observe how the custom connector appears inside the Power Platform control plane.

MCP does not bypass platform governance; the connector remains visible and classifiable through data-loss-prevention policy.

07

Observations

What the field test demonstrated.

  • 01

    Copilot Studio discovered the custom tool set and could invoke the expected function from a natural-language request.

  • 02

    A new agent session was necessary before an updated tool inventory became visible.

  • 03

    The custom connector remained part of the existing Power Platform governance surface.

08

Production path

What must change before real data arrives.

  • 01

    Replace the temporary tunnel with a stable, monitored host.

  • 02

    Add OAuth 2.0 and validate authorization at the tool boundary.

  • 03

    Define connector allowlisting, data-loss-prevention classification, and operational ownership before real data is introduced.

09

Related content