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, agent configuration, 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.
Before you start
You will need the following. Contact your Solid admin if anything is missing.
| What you need | Notes |
|---|---|
| Solid management key | Not self-serve — your Solid admin (or Dolev) generates and binds one per user. There is no token exchange and no JWT to refresh. |
| Semantic layer ID | The UUID of your certified Solid semantic model. Visible in the Solid UI under Semantic Models → [model name] → Settings, or ask your admin. |
| Solid MCP Server URL | https://mcp.production.soliddata.io/mcp |
| A Copilot Studio agent | The Copilot Studio home screen shows an Agent card — open or create an agent from there before proceeding. |
Authentication note: The Copilot Studio MCP wizard also shows an OAuth 2.0 option. The header API key (
x-solid-management-key) is the standard path when DCR OAuth is not set up. Use it unless your admin tells you otherwise.
Step 1: Set up your Copilot Studio environment
Copilot Studio requires a non-Default Power Platform environment with Dataverse provisioned and the correct role assignments.
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-authoring
- 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
Each user needs both of these — group membership alone is not enough:
- In the Power Platform admin center, open the environment → Users
- Confirm the user is listed there and has Environment Maker (or System Administrator) role
- If the environment is restricted to a security group, verify the user is in the group and Enabled in the 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 co-authoring
There is no "Editor" role in the share dialog — co-authoring in Copilot Studio is granted via Environment Maker access plus a Copilot Studio license.
- Ensure the co-author has Environment Maker in the environment (Step 1b) and a Copilot Studio license
- Role propagation takes roughly 10 minutes — if access doesn't work immediately, wait and retry
- Have them open Copilot Studio → select that environment → Agents — not a chat link
Chat share ≠ co-authoring. Chat share only lets people use the agent (e.g. the connections page). Co-authoring requires the environment role and license above.
Co-authoring 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 | Incorrect sharing method | Ensure Environment Maker role + Copilot Studio license |
| User sees the agent but changes don't sync | Wrong environment selected in Studio | Have them switch to the correct non-Default environment |
Common mistakes: "Dataverse isn't set up" almost always means missing org role/access, not a missing database. Security group membership alone doesn't grant env access — the user must also be Enabled in the Users list. Don't use the Default environment for shared authoring; create or move the agent into a governed custom environment once Dataverse and roles are in place.
Step 2: Add Solid as a tool
- Open your agent in Copilot Studio 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 fill in:
| Field | Value |
|---|---|
| Parameter type | Header |
| Header name | x-solid-management-key |
| Key value | Your Solid management key |
- Click Add (not Create)
- On the next screen, click Select a connection, then Create connection — it will ask for the management key again. Enter it and click Add.
All 6 Solid tools will now appear in your agent's tool list. Click Allow all to enable them.
The 6 tools are:
text2sql,glossary_search,semantic_model_qa,specific_asset_information_tool,get_semantic_model,submit_text2sql_feedback.
Step 3: Configure your agent
Agent instructions
Open your agent's Instructions and add:
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.
Web search: New agents have Knowledge → Search all websites turned on by default. Turn it off (or scope it to specific sources) for data questions so the agent routes to Solid instead of searching the web.
Finding your semantic layer ID
The UUID is visible in the Solid UI under Semantic Models → [model name] → Settings. It looks like a1b2c3d4-e5f6-7890-abcd-ef1234567890. You can also ask your Solid admin. Pass it in every text2sql call:
{
"question": "Show total revenue by region for Q1 2025",
"semantic_layer_ids": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
}Adding a warehouse runner (to execute the SQL)
Solid generates SQL — it does not execute it. To return results to the user, you need a warehouse connector.
For Snowflake:
- In Copilot Studio, go to Connections → Add a connection and search for the Snowflake connector
- Enter your Snowflake account URL, database, warehouse, and credentials
- Add an Execute SQL action to your agent and wire it to this connection
- Pass the SQL from
text2sqlas the input
For other warehouses (BigQuery, Databricks, Redshift):
Use a Power Automate flow with an HTTP trigger that accepts a SQL string, runs it via the appropriate connector, and returns the results.
To surface SQL without running it — let the user copy and run it themselves — skip the warehouse runner and show the returned SQL directly.
Step 4: Test the connection
- In Copilot Studio, click Preview (top right) to open the test chat
- Ask a data question, e.g. "What were total sales last month?"
- Confirm the following in the activity panel:
- The
text2sqltool is called - A SQL query is returned in the tool response
- No
401 Unauthorizederrors appear
- The
- If SQL is returned but looks wrong, see the Debugging section below
Debugging
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Management key missing or wrong | Confirm Parameter type = Header, Header name = x-solid-management-key; key goes in the auth wizard, not tool arguments |
| Tool not called at all | Agent routes to web search instead | Turn off "Search all websites" in Knowledge; update agent instructions |
| Only some tools appear | "Allow all" not clicked after adding | Go to Tools → Solid Text2SQL → enable all 6 tools |
| SQL returns wrong tables or metrics | Wrong or missing semantic_layer_ids | Pass the correct UUID for a certified model — find it in Solid UI or ask your admin |
| "No certified semantic models found" | Model not certified in Solid | Ask your Solid admin to certify the model |
| Co-authoring access blocked | Missing role or license | See Step 1 above |
Available Solid 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 | Call this after the user reacts to the SQL result — pass the generation_id from text2sql and sentiment: positive or negative; include corrected_sql if the user provided a fix |
See Getting Started with the Solid MCP Server for full parameter reference and error codes for each tool.
Updated 10 days ago
