Connect Solid MCP to Microsoft Copilot Studio
End-to-end guide for adding the Solid MCP server to a Copilot Studio agent — environment setup, authentication, native MCP and REST connector options, agent instructions, and testing.
This guide walks you through connecting the Solid MCP server to a Microsoft Copilot Studio agent so it can translate natural-language questions into SQL against your data warehouse.
Two connection paths are available:
| Path | Best for |
|---|---|
| Native MCP (streamable HTTP) | Copilot Studio agents on environments that support MCP tools natively |
| REST custom connector (OpenAPI) | Environments where your agent cannot consume MCP/SSE directly |
No bridge infrastructure is required on your side for native MCP.
Before you start
Gather these from your Solid admin before opening Copilot Studio:
| What you need | Notes |
|---|---|
| Solid management key | Used as the API key in Copilot Studio — there is no token exchange and no JWT to refresh |
| Semantic layer ID(s) | The UUID(s) of your certified Solid semantic models — pass these to text2sql to target the right model |
| Solid MCP Server URL | https://mcp.production.soliddata.io/mcp |
Step 1: Set up your Copilot Studio environment
Copilot Studio requires a non-Default Power Platform environment with Dataverse provisioned and the right role assignments before you can add MCP tools or collaborate on the agent.
Things that commonly go wrong:
- "Dataverse isn't set up" in Studio almost always means the user has no org role or environment access — not that the database is missing.
- Security group membership alone isn't enough — the user must also be Enabled under that environment's Users with Environment Maker (or System Administrator).
- Only Power Platform / env admins can provision Dataverse or grant those roles.
- Chat share ≠ co-edit. Chat share only lets people use the agent (e.g. connections page). For editing, share with Editor / collaborative authoring (use classic Share if needed), ensure Environment Maker, and have them open Studio → that environment → Agents — not the chat link.
- Don't rely on the Default environment for shared authoring — create or move the agent into a governed sandbox or custom environment once Dataverse and roles are in place.
Prerequisites
| What you need | Notes |
|---|---|
| A non-Default Power Platform environment | Must have Dataverse provisioned (Dataverse = Yes) — do not use the Default environment |
| Power Platform admin or environment admin | Required to provision Dataverse or grant environment roles |
| Environment Maker role (or System Administrator) for each author | Set per-user under that environment's Users list |
1a: Choose or create a governed environment
- In the Power Platform admin center, create a new environment (or use an existing non-Default one)
- Set Dataverse to Yes when creating the environment — required for MCP tools and co-edit
- If "Dataverse isn't set up" appears in Studio, check the user's org role and environment access first — the database is almost never actually missing
1b: Grant the right roles
Group membership in a security group that gates the environment is not sufficient on its own. Each user also needs:
- In the Power Platform admin center, open the environment → Users
- Confirm the user appears there and has Environment Maker (or System Administrator) role
- If the environment is restricted to a security group, verify the user is both in the group and Enabled under the environment's Users list — both conditions must be true
Only Power Platform admins or environment admins can provision Dataverse or assign these roles.
1c: Share the agent for editing (not just chat)
Chat share and co-edit are different. Chat share only lets users interact with the agent (e.g. the connections page). It does not grant authoring access.
- Open the agent in Copilot Studio
- Share with Editor role (collaborative authoring) — use the classic Share option if the modern flow doesn't show an Editor role
- Confirm the user has Environment Maker in that environment (Step 1b)
- Have them open Copilot Studio → select that environment → Agents — not the chat link
Do not send co-editors a chat link. They must open Studio directly, select the correct environment, and navigate to Agents.
Co-edit troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| "Dataverse isn't set up" in Studio | User has no env access or org role | Grant Environment Maker role and verify env access |
| User in security group but can't access env | Group membership alone isn't enough | Enable the user under the env's Users list in admin center |
| User can open the agent's chat but not edit | Shared via chat-share only | Re-share with Editor role and confirm Environment Maker |
| User sees the agent but changes don't sync | Wrong environment selected in Studio | Have them switch to the correct non-Default environment |
Step 2: Add Solid as a tool (native MCP)
Skip to Step 3 if your environment does not support native MCP tools.
- In Copilot Studio, open your agent and go to Tools
- Select Add a tool → New tool → Model Context Protocol
- Fill in the server details:
| Field | Value |
|---|---|
| Server name | Solid Text2SQL |
| Server description | Converts natural language questions to SQL using Solid's semantic layer |
| Server URL | https://mcp.production.soliddata.io/mcp |
- Under Authentication, select API key and enter your Solid management key — this is sent as the
x-solid-management-keyheader on every request. There is no token exchange step. - Click Create, then Add to agent
The Solid tools (text2sql, glossary_search, semantic_model_qa, specific_asset_information_tool) will appear in your agent's tool list.
Step 3: Add Solid as a REST connector (OpenAPI)
Use this path only if your agent cannot consume native MCP / SSE.
- Ask your Solid admin for the OpenAPI spec for the REST-to-MCP bridge and the bridge base URL (e.g.
https://…azurewebsites.net/api/mcp) - In Copilot Studio, go to Connections → Custom connectors → New custom connector → Import from OpenAPI file
- Import the spec — the Azure Function host key (
codeparameter) is pre-filled - Under Authentication, use API key and map your Solid management key to the
management_keyfield in the connector - Add the connector to your agent as an action
For the REST path, include management_key in every request body alongside the tool fields:
{
"management_key": "<your-solid-management-key>",
"question": "What were total sales last month?",
"semantic_layer_ids": ["your-model-uuid"]
}No Bearer token and no separate auth call are needed.
Step 4: Configure your agent
Agent instructions
Tell the agent when to use Solid and how to handle the SQL it gets back. Add instructions like:
For any data, analytics, or reporting question, use the Solid text2sql tool to generate SQL.
Pass the user's question exactly as asked. Always include semantic_layer_ids: ["<your-model-uuid>"].
Show the user the generated SQL and ask if they want to run it.
If they confirm, use the warehouse connector action to execute it and return the results.
If they say the results are wrong, call submit_text2sql_feedback with sentiment: negative
and the generation_id from the text2sql response.
Adding a warehouse runner (to execute the SQL)
Solid generates SQL — it does not execute it. To run the query and return results to the user, you need a second connector in Copilot Studio that connects to your warehouse.
For Snowflake:
- In Copilot Studio, go to Connections → Add a connection
- Search for the Snowflake connector (built-in Power Platform connector)
- Enter your Snowflake account URL, database, warehouse, and credentials
- Add an Execute SQL action to your agent, wired to this connection
- In your agent's flow, pass the SQL returned by
text2sqlas the input to this action
For other warehouses (BigQuery, Databricks, Redshift):
Use a Power Automate flow as the execution layer:
- Create a Power Automate flow with an HTTP trigger that accepts a SQL string
- Inside the flow, use the appropriate connector (BigQuery, Databricks JDBC via Azure Function, etc.) to run the query
- In Copilot Studio, add the flow as an action in your agent
- Pass the SQL from
text2sqlto the flow, then return the results to the user
If you only want to surface the SQL (let the user copy and run it themselves), skip the warehouse runner entirely — just show the returned SQL in the agent's response.
Semantic layer IDs
Always pass your semantic layer UUID(s) in the semantic_layer_ids parameter so the tool routes to the right model:
{
"question": "Show total revenue by region for Q1 2025",
"semantic_layer_ids": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
}Not sure of your model IDs? Ask your Solid admin, or use the get_semantic_model tool to look up details by UUID.
Web search
Consider limiting or disabling web search for data questions so the agent routes to Solid rather than trying to answer from the web.
Step 5: Test the connection
- In Copilot Studio, open the Test panel and enable Show activity map when testing
- Ask a data question, e.g. "What were total sales last month?"
- In the activity map, confirm:
- The
text2sqltool is called - A SQL query is returned in the tool response
- No
401 Unauthorizederrors appear
- The
If the tool is called but returns unexpected SQL, check the Debugging section below.
Debugging
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Management key missing or invalid | Confirm the key is set as the API key in the connector/tool authentication — not inside tool arguments |
| Tool not called at all | Agent instructions don't route to Solid | Update agent instructions to explicitly direct data questions to Solid |
| SQL returns wrong tables or metrics | Wrong or missing semantic_layer_ids | Confirm you're passing the correct UUID(s) for a certified semantic model |
| "No certified semantic models found" | Model hasn't been certified in Solid | Ask your Solid admin to certify the model |
| SQL runs but returns unexpected results | Semantic model may need tuning | Share the question and generated SQL with your Solid admin to review the model definition |
| Co-edit / authoring access blocked | Incorrect environment or role setup | See Step 1 above |
Available Solid tools
Once connected, your agent has access to these tools:
| Tool | What it does |
|---|---|
text2sql | Translates a natural-language question into SQL using your semantic model |
glossary_search | Returns the definition of a business term from your Solid glossary |
semantic_model_qa | Answers questions about what a semantic model covers |
specific_asset_information_tool | Returns column-level details for a specific named table |
get_semantic_model | Fetches the full definition of a semantic model by UUID |
submit_text2sql_feedback | Reports whether a text2sql response was correct or not — call it after the user reacts to the SQL result (wrong answer, corrected query, or confirmation it worked); pass the generation_id from the text2sql response |
See Getting Started with the Solid MCP Server for full parameter reference and error codes for each tool.
Updated 1 day ago
