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
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.
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.
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.
System flow
A small path from intent to tool result.
The experiment keeps every handoff explicit, making discovery and execution easier to inspect.
- 01
Intent
A user asks for a project operation in natural language.
- Copilot Studio agent
- Conversation context
- 02
Discovery
The agent selects a tool from the MCP contract.
- Custom connector
- Tool schema
- 03
Execution
FastMCP receives the call and runs the selected Python function.
- Streamable HTTP
- Fictional data
- 04
Response
The structured result returns to the agent for a contextual answer.
- Tool result
- Agent response
Key decisions
Keep the protocol test honest.
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.
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.
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.
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.
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.