capacities
950 TopicsFabric ML Model Endpoint returns 401 from application but works in Postman with the same token
Hi , Now, I'm currently integrating the Fabric ML Model endpoint with a .NET application and encountering a 401 Unauthorized error when calling the scoring API. The endpoint is activated and working as expected when tested directly through Postman. However, when the application calls the same Fabric scoring API, it returns HTTP 401. As far as we've verified, the same Bearer token and authentication details are being used. Endpoint pattern: POST /v1/workspaces/{workspaceId}/mlmodels/{modelId}/endpoint/score Error response: { "errorCode": "RequestFailed", "message": "Unable to process the request", "isRetriable": false } Additional details from the application logs: HTTP status: 401 Unauthorized Authorization header present on final request: True WWW-Authenticate header: Empty Postman request: Successful Application request: Fails with 401 The error response doesn't provide any additional information to identify the exact cause. I'm trying to understand whether there are any specific authentication, authorization, endpoint configuration, or HTTP client requirements when calling Fabric ML Model endpoints from an external application. Has anyone encountered a similar issue where the same token works in Postman but fails when used in the application? Are there any additional headers, permissions, redirect behaviors, or diagnostic steps that we should check to identify the cause? Any suggestions? Thanks!6Views0likes0CommentsImplement Fabric capacity Pause and Resume operation using Azure Automation Runbook - Part 1
Introduction Microsoft Fabric allows pausing an F SKU capacity when it is not needed and resume it when work should continue. While pausing Fabric capacities will reduce operational cost, it will make Fabric content within these capacities unavailable. When a paused Fabric capacity is resumed, billing resumes and assigned content becomes available again. Pausing Fabric capacity can provide significant operational discounting as the capacity compute charges stop once the capacity is Paused. Hence this approach could be a significant price optimization technique if the capacity does not have to be online 24 hours a day. This blog will help you implement automated control plane operation with Azure Automation. A system-assigned managed identity authenticates the runbook, a custom Azure role grants only the Fabric capacity suspend and resume operations, and two schedules pass either Pause or Resume to the same runbook. What will you need to build and enable as part of this process? Create a custom RBAC role that permits PAUSE and RESUME operations on Fabric capacities within a subscription Configure an Azure Automation runbook to undertake PAUSE and RESUME operations through a scheduled operation Following pre-requisites are needed prior to commencing the process described in this Blog. An existing Microsoft Fabric F SKU capacity. Pause and resume apply to the Azure Fabric capacity resource (not tenant). Permission to create a custom role and role assignment. Microsoft documents User Access Administrator or equivalent role-definition and role-assignment permissions for these tasks. An Azure Automation account, or permission to create one. This guide uses its system-assigned managed identity. [2] [11] PowerShell in Azure Cloud Shell for the one-time RBAC setup Step 1 - Record deployment values Before commencing the process, its important to document the necessary values as they will be needed multiple times during the process. Value Example Where to find it Subscription ID 00000000-0000-0000-0000-000000000000 Subscriptions > target subscription Fabric Resource Group rg-fabric-prod Fabric Capacity > Overview Fabric Capacity Name fab-prod-uswest2 Microsoft Fabric -> Capacity Resource Azure Automation Resource Group rg-automation-prod Azure Automation Account > Resource Group Name Automation Account Name aa-fabric-operations Automation Account -> Account Name Time zone Australia/Melbourne Azure Portal Step 2 - Create Azure automation account and enable account identity If an Azure Automation account does not already exist, create one from Automation Accounts > Create and complete the subscription, resource group, name, region, and review steps documented in the Azure Automation quickstart. Open the Automation account in the Azure portal. Under Account Settings, select Identity. On the System assigned tab, set Status to On, select Save, and confirm the change. Copy the displayed Object (principal) ID for validation. The PowerShell assignment step below also retrieves it directly. The system-assigned identity is registered in Microsoft Entra ID and is represented by an object ID. The runbook later uses Connect-AzAccount -Identity, so no stored username, password, certificate, or Automation Run As account is required. Step 3 - Prepare Azure Automation Powershell runtime From the Automation account Overview, switch to the Runtime Environment experience if it is not already enabled. Under Process Automation, select Runtime Environments > Create. Choose PowerShell and runtime version 7.4. Give the environment a descriptive name such as ps74-fabric-operations. On Packages, retain the default Az PowerShell package and add Az.Fabric from the gallery. Verify that Az.Accounts is available because the script uses Connect-AzAccount, Disable-AzContextAutosave, and Set-AzContext. Create the runtime environment and wait until its packages are available. Microsoft documents that PowerShell runtime environments include the Az package by default and can accept additional packages from the gallery. In the older Automation experience, modules are managed under Shared Resources > Modules instead. Step 4 - Create a new custom RBAC role Following four Azure RBAC actions are required for Fabric capacity pause and resume operations. Existing built-in privileged (pre-defined) roles do not contain these permissions, hence a custom role is needed. RBAC Action Purpose Microsoft.Fabric/capacities/read Read the target Fabric capacity Microsoft.Fabric/capacities/write Write to the target Fabric capacity Microsoft.Fabric/capacities/suspend/action Initiate a pause/suspend action for Fabric capacity Microsoft.Fabric/capacities/resume/action Initiate a resume action for Fabric capacity There are 2 ways to create the custom role - Using a definition file (in JSON format) Defining the permissions inline as part of a command issued within a Powershell session. As part of this blog, I'll show you both ways to create the role. Following examples shows you a functional JSON file that could be leveraged to create the custom role through command line or Azure portal. In the text below, replace SUBSCRIPTION_ID placeholder with actual subscription ID. The role definition is available at the subscription level, while the role assignment in the next step is narrowed to one capacity resource. If its desirable to create this role at resource group level, that can be done by updating the assignableScopes node to the resource group. JSON { "properties": { "roleName": "Fabric capacity Pause Operator", "description": "", "assignableScopes": [ "/subscriptions/<SUBSCRIPTION_ID>" ], "permissions": [ { "actions": [ "Microsoft.Fabric/capacities/read", "Microsoft.Fabric/capacities/write", "Microsoft.Fabric/capacities/suspend/action", "Microsoft.Fabric/capacities/resume/action" ], "notActions": [], "dataActions": [], "notDataActions": [] }] } } Now we will use the second method to configure new RBAC custom role. In Azure Cloud Shell (PowerShell), create and inspect the role. Open a new Cloud Shell Powershell session Replace the SUBSCRIPTION_ID below with the SubscriptionID in the following commandlet. Copy and paste each command into the Cloud shell session one at a time and execute. Azure custom roles use Actions for control-plane permissions and AssignableScopes to specify where the role definition is available. Microsoft recommends listing actions explicitly rather than using wildcards Powershell Set-AzContext -SubscriptionId "<SUBSCRIPTION_ID>" $role = New-Object -TypeName Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition $role.Name = 'Fabric Capacity Pause Resume Operator' $role.Description = 'Pause and Resume Fabric Capacities” $role.IsCustom = $true $role.AssignableScopes = @("/subscriptions/<SUBSCRIPTION_ID>") $permission = New-Object -TypeName Microsoft.Azure.Commands.Resources.Models.Authorization.PSPermission $permission.Actions = @( "Microsoft.Fabric/capacities/read" "Microsoft.Fabric/capacities/write" "Microsoft.Fabric/capacities/suspend/action" "Microsoft.Fabric/capacities/resume/action" ) $role.Permissions = @($permission) New-AzRoleDefinition -Role $role This blog series continues in the next post. Part 2 can be found here: Implement Fabric capacity Pause and Resume operation using Azure Automation Runbook - Part 267Views0likes0CommentsCan I start a new Fabric trial capacity after the 60-day trial expires?
Hi everyone, Once a Fabric trial capacity reaches its 60 days and expires, can I start a new trial capacity in the same tenant? The documentation says that eligibility for another trial isn’t guaranteed and that Microsoft might restrict repeated trials, but it doesn’t explain the exact rules. Specifically: Can the same user, or another user in the same tenant, start a new trial after the first one expires? Does an expired trial still count toward the tenant’s trial capacity limit?Solved18Views0likes2CommentsUnable to activate Microsoft Fabric trial – “An unknown error occurred”
Hello, I can’t activate the Microsoft Fabric 60-day trial in my tenant. Tenant: Default Directory (created October 2026, home region Switzerland North) User: Margarita Fabric (Fabric Administrator role assigned) Tenant settings “Users can create Fabric items” and “Users can try Microsoft Fabric paid features” are both enabled for the entire organization. The Power BI individual trial is active (59 days left), but starting the Fabric trial (from the profile menu or by creating a Lakehouse in My workspace) fails with: “An unknown error occurred. Unfortunately, the trial cannot be started right now.” Error details: Activity ID: be46dd06-3b87-4005-9ab6-b04b66e8e18e Request ID: fdb30fcb-30bd-4db8-8a6f-548279264a67 Correlation ID: 1d4d8e94-a3ac-53ab-5047-12bad35d907f Time: Tue Oct 27 2026 16:11:00 GMT+0100 Cluster URI: https://wabi-switzerland-north-primary-redirect.analysis.windows.net/ Is there a restriction or waiting period for new tenants? How can I activate the Fabric trial? Thank youSolved47Views0likes5CommentsMicrosoft Fabric SAP Table Copy Job Fails During Incremental Load with `__rowMarker__` Column Error
Hey Everyone, I am currently working on a Microsoft Fabric Copy Job, using SAP Table Application Server as the source to fetch data from SAP HANA. I have enabled the ABAP Add-on option and configured a Fabric SQL Database as the destination, with the copy mode set to Incremental Load. The initial full load completes successfully, and the data is loaded into the destination table. However, when I modify an existing document in SAP and rerun the Copy Job, it fails with the following error: Error: SqlColumnNameNotExist: Column '__rowMarker__' does not exist in the target table '[##InterimTable_db7db620-2727-4b15-8095-e5aab4f179f8]'. Has anyone encountered this issue with Microsoft Fabric SAP Table Copy Jobs while using incremental loading with the ABAP Add-on? Any suggestions on how to resolve this issue would be appreciated. I have attached a screenshot of the error for reference. Any help in identifying the root cause and resolving this issue would be appreciated. Regards, Darshan64Views0likes5CommentsFabric Capacity Metrics app vs Chargeback app
Hi, using Fabric Capacity Metrics app and Chargeback app I've noticed that they seem to overlap about the exposed data, even if their goal is different: the Capacity Metrics is useful for operational and performance monitoring, while the Chargeback app is useful for attribution/allocation of capacity consumption. I think it's very difficult not to use them together in a Fabric solution: why not have a single app? They should share the same data that feeds the two semantic models. What do you think? Thanks56Views0likes5CommentsMicrosoft Fabric Security Policies are not available in North Europe region
This feature is critical for Fabric features adoption in my company. Our tenant is located in North Europe region, so it will be great to know when current limitation will be resolved ? Thanks for your support.70Views0likes4CommentsBest practices for integrating the Fabric ML Model endpoint with an application (preferably .NET)?
Hi, I'm working on a ML use case in Microsoft Fabric where we train models using Fabric notebooks, track experiments through MLflow, and register models for real-time predictions. We have already registered a model and activated its real-time inference endpoint in Fabric. We're now planning to integrate this endpoint with an application (preferably .NET). I'd appreciate some guidance on the recommended integration approach, particularly around authentication, permissions, and API invocation. A few questions: Authentication: What is the recommended way for the backend (.NET) to authenticate with a Fabric ML Model endpoint? Does it support OAuth 2.0 Client Credentials using a Microsoft Entra service principal, and is Managed Identity also supported? Permissions: What Fabric workspace or ML Model permissions are required for a service principal to invoke an activated endpoint? Are any additional tenant-level settings required? API integration: What is the recommended approach for calling the endpoint from .NET application, including the request payload format, response handling, and access-token management? Endpoint behavior: Are there any considerations around synchronous/asynchronous responses, latency, timeouts, or concurrent requests when integrating the endpoint with an application? Model versioning: If we train and register an updated model version later, can we activate a new endpoint while keeping the existing version available? What is the recommended approach for switching between versions without affecting the application? If anyone has implemented a similar integration, I'd appreciate any recommended architecture, documentation, or working. Also would like to understand whether there is a secure Fabric-native approach that would be more appropriate. Thanks in advance!27Views0likes1CommentCopilot Studio, Foundry, Fabric Data Agent or Operations Agent? Which one to pick
Most confusion comes from the word "agent" being used for all four. The fastest way to choose is to ask two questions: who builds it (maker or developer) and what triggers it (a person asking, or data changing). Meet the four Copilot Studio is Microsoft's low-code agent builder on Power Platform. You describe the agent in plain language, add knowledge (SharePoint, Dataverse, websites), plug in 1,000+ connectors and Power Automate flows, then publish to Teams, Microsoft 365 Copilot or a website. It is also the easiest place to orchestrate other agents, including Foundry and Fabric agents. Microsoft Foundry (formerly Azure AI Foundry) is the pro-code platform for engineers. You pick from a large model catalog, write orchestration in code, run evaluations, trace every call and deploy behind private networking. Use it when the agent is a product component, not just a chat window. Fabric data agent is a read-only, conversational analyst over your Fabric data. It turns a question into SQL, DAX or KQL against up to five sources (lakehouse, warehouse, Power BI semantic model, KQL database, ontology) and respects each user's permissions. It is generally available. Fabric operations agent lives in Real-Time Intelligence. You give it an Eventhouse, a business goal and allowed actions. It writes its own monitoring rules, wakes up when a condition hits, reasons over the data, and messages people in Teams or runs a Power Automate action. It reached general availability in mid-2026. Which one should I pick? Ask the questions in order and stop at the first "yes". A "yes" does not rule the others out: a data agent or Foundry agent is often published through Copilot Studio. Side by side Copilot Studio Foundry Fabric data agent Fabric operations agent Core job Converse and automate Build custom AI apps and agents Answer questions over data Monitor live data and act Triggered by A person (or event/flow) Your code A person or another agent A data condition Builder Maker, IT, business AI engineer, developer Data/BI team Ops and RTI team Skill level Low-code Pro-code Low-code + good data modelling Low-code, chat-based setup Data it reaches Connectors, SharePoint, Dataverse, other agents Anything you wire up Lakehouse, warehouse, semantic model, KQL, ontology Eventhouse (KQL) streams Writes or acts? Yes, via flows and tools Yes, whatever you code No, read-only Yes, Teams messages and Power Automate actions Where users meet it Teams, M365 Copilot, web, other channels Your app, API, Teams Fabric, Copilot Studio, Foundry, M365 Copilot, MCP Teams chat or channel Billing Copilot Credits Azure consumption Fabric capacity (CU) Fabric capacity (CU) Pick it when You need speed and M365 reach You need model choice, evals, isolation People Real-world scenarios These are the patterns that come up most often in the community. Each names the tool that fits and why. HR policy helper in Teams → Copilot Studio. A 3,000-person company wants staff to ask "How many leave days do I have?" and "Book Thursday off." Knowledge sits in SharePoint, leave balances in an HR system with a connector. A maker builds it in days and publishes to Teams. No developer needed. Insurance claims triage inside a customer app → Foundry. An insurer reads uploaded photos and PDFs, extracts fields, scores fraud risk and returns a decision to its claims system through an API. It needs a vision model, evaluation datasets, tracing and a private network. That is a product feature, so it belongs in Foundry. Sales leaders asking about pipeline → Fabric data agent. "Which regions missed Q3 target, and by how much?" The data agent sits on the sales semantic model, writes the DAX, and only shows rows each person may see. Publish it into Microsoft 365 Copilot or Copilot Studio so leaders never open Fabric. Cold-chain monitoring for a food distributor → Fabric operations agent. Truck temperature sensors stream into an Eventhouse. The goal: "Keep chilled loads between 2 and 5 °C." When a truck drifts, the agent posts in the fleet Teams channel with the truck, route and trend, and can trigger a Power Automate flow to reroute or open a ticket. Retail "what should I do?" assistant → all four together. Microsoft's Zava reference demo shows this: an operations agent spots a stock risk, a Fabric data agent pulls the numbers, Foundry agents for sales and product reason over them, and Copilot Studio is the front door in Teams where the manager approves a reallocation. Better together The strongest designs use more than one. Copilot Studio meets people where they work, Foundry adds custom reasoning, and the two Fabric agents keep answers and actions grounded in governed data. The operations agent is the only one that starts on its own: it reads live events and reaches people in Teams without anyone asking first. Status as of October 2026, and gotchas Fabric data agent is GA, and its Copilot Studio integration went GA at FabCon Barcelona (October 2026). Data agents in Microsoft Copilot Chat were only a sneak peek there. The data agent inside Copilot in Power BI was retired on 26 August 2026. Use the data agent directly, or through Foundry, Copilot Studio, Microsoft 365 Copilot or its MCP endpoint. Operations agent is GA (June to July 2026). Newer abilities, such as root-cause investigations and pre-approved actions, are still in public preview. Operations agents need a paid Fabric capacity. Trial capacity is not supported, and an admin must turn on the Copilot/AI and operations agent tenant settings. A data agent is only as good as the model under it. Clear table names, descriptions, relationships and agent instructions matter more than prompt tricks. An operations agent automates your mistakes too. Start with "recommend" actions that a person approves, then move to automatic actions. Don't pick Foundry just for governance. Both Copilot Studio and Foundry agents now show up in the same Microsoft governance and security tooling. Pick on build style, model needs and network needs. Rule of thumb: prototype in Copilot Studio for a week. If you hit a wall (model choice, evals, isolation, scale), that wall is your Foundry requirement. Sources Operations agent (Generally Available), Fabric Updates Blog Improving operational efficiency with operations agents, Fabric Updates Blog Build, deploy, and govern Fabric at scale (FabCon 2026), Fabric Community FabCon Barcelona 2026 announcements, James Serra Retirement of data agent in Copilot in Power BI, Fabric Community What are Fabric data agents: GA status and limits, Atlan Fabric data agent vs operations agent, Daymark One agent, many channels: querying Fabric data agents, Data Science at Microsoft Copilot Studio vs Microsoft Foundry, Nasstar Zava Real-Time Intelligence demo, Microsoft CDXFabric Data Agents Get Smarter on 2 November. Can You Prove Yours Still Answers Correctly?
Microsoft announced Advanced NL2SQL and advanced DAX generation as generally available on 19 October 2026. The core improvements roll out to the standard runtime by default, together with a move to GPT-5.6 Terra. Separately, the old custom-tool way of calling a Fabric data agent from Microsoft Foundry stops being supported on 6 November. Date (2026) What happens What you should have done 19 Oct GA announced Read this post Now to 1 Nov Changes available on the preview runtime Build a ground-truth set, baseline standard, test preview 2 Nov Standard-runtime rollout begins, no opt-in Baseline frozen and stored 6 Nov Foundry custom-connection integration unsupported Foundry agents moved to Fabric IQ By 10 Nov Rollout expected to complete Re-run, diff the queries, tell affected users What Microsoft actually announced The query generators stop writing in one pass and start investigating first. That is why behaviour can change even where accuracy improves. Until now, NL2SQL and NL2DAX generated a query in a single pass, resolving schema, business definitions and filter values at once. As the GA announcement puts it, a wrong guess still runs, and the wrong answer looks like a right one. Advanced NL2SQL explores the schema, tests joins and looks up real filter values before writing SQL. It works in three modes: Example query following: adapts a relevant example query, for instance by swapping a filter value. Clarifying questions: asks the user when it can't answer reliably. Data exploration: infers logic from your examples and checks assumptions against the data. Advanced DAX generation brings the same idea to semantic models: an agentic tool-calling loop plus instance value indexing, so a user's "California" maps to the stored "CA". Microsoft's internal benchmarks Microsoft's 2026 internal evaluations, standard versus preview runtime. Microsoft notes results vary by workload, model and configuration. Benchmark Smart-answer accuracy P50 latency P95 latency NL2SQL, standard 78.8% 28.4 s 46.8 s Advanced NL2SQL, preview 90.9% 26.0 s 32.9 s NL2DAX, standard 89.15% 39.1 s 97.5 s Advanced DAX, preview 91.86% 20.4 s 34.7 s SQL gains 12.1 accuracy points. DAX gains only 2.7 points, but its tail latency drops by about 64%. If your semantic-model agents felt slow, that is your headline. What moves, and what doesn't Moving to standard: Advanced NL2SQL, advanced DAX generation and the GPT-5.6 Terra model upgrade. Staying in preview: schema descriptions and topics for SQL sources. Two details catch people out (runtime docs): A published agent keeps the runtime it was published with. Publish on preview and it stays on preview until you republish. Check every production agent. Runtime choice doesn't pick the model. A preview run today is a strong signal, not a guaranteed copy of standard after 10 November. Re-run after the rollout regardless. Why "better on average" can still surprise you A benchmark counts right answers. Your users notice changed answers. The second one generates support tickets. Workaround instructions start fighting the agent. Rules written to patch single-pass behaviour may no longer be needed, and unneeded guidance can steer an agent away from a path it would have found itself. Example queries get followed more literally. Good when they are current. An example with last year's fiscal logic now gets reproduced more faithfully. Ambiguous questions get a question back. Better for users, but it breaks anything downstream that expects a number, such as a Copilot Studio flow or a Foundry agent chain. A correct new answer can be a business problem. "Active customers in Q3" returned 41,200 because of a wrong date column; now it correctly returns 38,900. Someone may already have put 41,200 in a board pack. The pass count hides the churn. 40 of 50 pass before, 44 after. Looks like +4. Underneath, 6 newly pass and 2 now fail: 8 changed answers, 2 regressions. Question status Count Action Pass both, same query 34 Nothing Pass both, different query 4 Right for the right reason? Failed before, passes now 6 Tell anyone who acted on the old answer Passed before, fails now 2 Fix instructions or examples first Fail both 4 Existing backlog Illustrative numbers. The structure is what your own run should produce. The pre-rollout routine: six steps for this week You need a Fabric notebook, a lakehouse and the Fabric data agent SDK. The SDK and its evaluation features are in preview, so note the version you used. You also need F2 or higher capacity, the data agent tenant settings enabled and read access to the sources. Step 1: Inventory agents and dependencies For each published agent, record the runtime it was published on, its source types, where it is consumed (Fabric, Teams, M365 Copilot, Copilot Studio, Foundry) and its business owner. Anything called from Foundry via the old custom tool also goes on your 6 November list. Step 2: Build a ground-truth set that covers the risky cases The SDK takes a DataFrame or CSV with question and expected_answer. Aim for 30 to 60 questions per agent, ideally from real usage, covering filter values ("California" stored as "CA"), example-adjacent questions, multi-join questions, ambiguous questions and high-stakes KPI figures. %pip install -U fabric-data-agent-sdk import pandas as pd gt = pd.DataFrame(columns=["question", "expected_answer"], data=[ ["Total net sales in California for September 2026", "1,284,550.20"], ["Returns rate by region for FY26", "North 3.1%, South 2.7%, East 4.0%, West 3.4%"], ["What was revenue last year?", "CLARIFY: should ask gross or net, fiscal or calendar"], ["Active customers in Q3 2026", "38,900"], ]) gt.to_csv("/lakehouse/default/Files/agent_eval/ground_truth_sales.csv", index=False) The values are placeholders. Use answers your business owner has signed off. Step 3: Use a critic prompt that accepts clarifying questions The default grader would mark a good clarifying question as wrong. The SDK accepts a custom critic_prompt with {query}, {expected_answer} and {actual_answer} placeholders. critic_prompt = """ Query: {query} Expected Answer: {expected_answer} Actual Answer: {actual_answer} If the expected answer starts with CLARIFY:, respond 'yes' only if the actual answer asks a clarifying question about the same ambiguity. Otherwise respond 'yes' only if the actual answer is numerically and semantically equivalent. Is the actual answer equivalent to the expected answer? """ Step 4: Capture the standard baseline before 2 November Run against the production stage, which is what users hit today. Give each run its own table. from fabric.dataagent.evaluation import ( evaluate_data_agent, get_evaluation_summary, get_evaluation_details) agent_name = "SalesAgent" baseline_table = "eval_sales_standard_baseline_2026_10" baseline_id = evaluate_data_agent( gt, agent_name, table_name=baseline_table, data_agent_stage="production", critic_prompt=critic_prompt) print(get_evaluation_summary(baseline_table)) baseline = get_evaluation_details(baseline_id, baseline_table, get_all_rows=True) print(baseline.columns.tolist()) # check column names in your SDK version This writes <table_name> with per-question results and <table_name>_steps with the detailed reasoning and step-by-step execution. Look there for the generated SQL or DAX, and keep both tables as evidence. For a single question, the Diagnostics button exports the full steps too. Step 5: Record P50 and P95 latency through the MCP endpoint The evaluation tables focus on correctness, so time each question against the published agent's MCP endpoint. This adapts Microsoft's SDK sample: import time, numpy as np from azure.identity import InteractiveBrowserCredential from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client mcp_url = ("https://api.fabric.microsoft.com/v1/mcp/workspaces/<workspace-id>" "/dataagents/<data-agent-id>/agent") cred = InteractiveBrowserCredential() async def ask(q): tok = cred.get_token("https://api.fabric.microsoft.com/.default").token async with streamablehttp_client(mcp_url, headers={"Authorization": f"Bearer {tok}"}) as (r, w, _): async with ClientSession(r, w) as s: await s.initialize() tool = (await s.list_tools()).tools[0] arg = next(iter(tool.inputSchema["properties"])) t0 = time.perf_counter() await s.call_tool(tool.name, {arg: q}) return time.perf_counter() - t0 secs = [await ask(q) for q in gt.question for _ in range(3)] print(f"P50 {np.percentile(secs, 50):.1f}s P95 {np.percentile(secs, 95):.1f}s") Run each question several times; single timings are noisy. The MCP response returns answer text only, not the query, which is why query evidence comes from the steps table. Step 6: Preview now, standard after 10 November, then diff Preview, today. Switch your draft to preview and evaluate the sandbox stage, leaving production untouched. The switch comes from the runtime docs (the ribbon's Runtime dropdown works too); check the SDK reference for the FabricDataAgentManagement import. data_agent = FabricDataAgentManagement(agent_name) data_agent.update_configuration(enable_preview_features=True) preview_id = evaluate_data_agent(gt, agent_name, table_name="eval_sales_preview_2026_10", data_agent_stage="sandbox", critic_prompt=critic_prompt) data_agent.update_configuration(enable_preview_features=False) # don't publish on preview by accident Standard, after 10 November. Repeat Steps 4 and 5 against production with new table names. The diff. Compare per question, never just the summary. Fill in your SDK's pass-flag and answer column names. def diff_runs(before, after, passed="<pass-col>", answer="<answer-col>"): m = before.merge(after, on="question", suffixes=("_b", "_a")) def status(r): b, a = r[passed + "_b"], r[passed + "_a"] if b and a: return "same" if str(r[answer + "_b"]) == str(r[answer + "_a"]) else "answer changed" return "newly correct" if a else ("REGRESSION" if b else "fail both") m["status"] = m.apply(status, axis=1) return m.sort_values("status") Then compare the generated queries from both _steps tables. A changed query with the same answer deserves a look: it may be right by coincidence on this month's data. When a result changed, check the run steps for: which example query it picked, which join path it chose, which instruction it followed, and whether a clarifying question was the right call. Most fixes will be in your examples and instructions, not the platform. The 6 November deadline: move Foundry agents to Fabric IQ If a Foundry agent calls your data agent through the original custom tool, that path stops being supported on 6 November 2026 (retirement notice). The catch: the replacement, the Fabric IQ (OneLake Catalog) tool, is in preview. Production agents move from a deprecated integration to a preview one, four days into the query rollout. Make that an explicit risk decision, with a fallback plan. What you gain: pick agents by name from the catalog, connect several data agents to one Foundry agent (the old tool allowed one), and an MCP endpoint per agent. Microsoft also says responses will soon include the query used. Portal migration, in Microsoft's order: Publish the data agent with a rich, detailed description. In the Foundry portal, open the agent and add the Fabric IQ (OneLake Catalog) tool, then select your data agent. Update the Foundry agent's instructions to name each data agent and what it handles. Remove the old custom tool, save, and test with representative questions. For code, use the MCP URL from the agent's Settings > Model Context Protocol tab and the FabricIQPreviewTool in azure-ai-projects>=2.2.0. Full samples are in Connect agents to Microsoft Fabric with Fabric IQ. Test the two changes separately. If you migrate on 5 November and answers shift on 8 November, you won't know why. Migrate now and baseline through Foundry before 2 November. The connection calls Fabric as the signed-in user, so test with accounts that match real users' permissions and row-level security. When the new answer is right, who tells people? The hardest part is not technical. Someone acted on the old number. Decide now who owns that conversation: Each agent has a business owner who reviews "newly correct" and "answer changed" rows. High-stakes answers get a change note: old answer, new answer, why, and since when. The note goes where the old answer was used: report owners, Teams channels, Copilot Studio makers. Regressions get fixed, not avoided. Standard is changing anyway, so plan the fix. Also tell users before 2 November that answers may become more precise and the agent may ask follow-up questions. A warned surprise becomes a feature. Your checklist Inventory agents, runtimes, consumers and owners Build ground-truth sets, including ambiguous and high-stakes questions Write a critic prompt that accepts correct clarifying questions Capture the standard baseline, steps and latency before 2 November Run the set on preview in the sandbox stage Migrate Foundry agents to Fabric IQ and baseline them before 6 November Decide explicitly on running production on the preview Fabric IQ tool Re-run after 10 November and diff per question and per query Retire workaround instructions and refresh stale examples Send change notes for high-stakes answers that moved