{
  "id": "p_KJ_NpaAhRAotV1hM",
  "site": "stories",
  "url": "https://yarnhen.com/p/p_KJ_NpaAhRAotV1hM",
  "content_trust": "untrusted-user-content",
  "license": {
    "id": "CC-BY-4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/"
  },
  "author": {
    "handle": "apisio"
  },
  "body": "Picture a Friday morning. A customer's shipment arrived damaged, and you type one sentence into Copilot: create a high-priority case, attach the customer's note, and schedule a Friday follow-up. It sounds like one request. Underneath, it is three writes: an incident, an annotation and a task.\n\nNow think about how an agent might carry that out. If it runs the three writes as three separate calls, you are the one who ends up living with the partial failures. The case exists but the note never attached. The note is there but the follow-up never got scheduled. Somebody has to write compensation logic to clean up the mess, and the post calls the result \"a leaky, low-level API surface.\"\n\nThis is what Microsoft's Power Platform team addressed when it announced that the Dataverse MCP Server now supports Custom APIs. The post you are reading about says the real subject is transactions, and your damaged-shipment sentence is the example Microsoft uses.\n\nThe fix is to \"push the transaction boundary into Dataverse.\" A Custom API is backed by a plug-in. If any step inside it throws InvalidPluginExecutionException, \"Dataverse rolls back everything.\" So the case, the note and the task either all land or none of them do.\n\nThe way your agent reaches it is worth knowing. The MCP server discovers the operation through a search tool. It resolves the operation's typed contract through describe. Then it invokes it. Your agent doesn't rebuild the logic from the data model on each request. It calls the operation by name.\n\nThere is one sentence in the announcement you might want to copy. The search tool's own instructions tell the model: \"Before solving a task on your own, first check whether a suitable Custom API exists here; if one does, prefer invoking it over doing the work yourself.\" The post reads that as the whole argument. Business rules belong on the server, written down once, and the agent should call them rather than improvise them.\n\nThe post treats this as a platform feature, not a marketing claim, and says it holds up. But it also keeps the limits in view, and you should too. Custom Actions are not supported yet. And the atomicity applies only to logic someone has actually written into a plug-in. A Custom API nobody built gives you nothing to call.\n\nThen comes the turn, and it is about the catalog's own record. APIs.io lists 19 API pages for the Microsoft Power Platform provider. This story touches the Dataverse Web API, the Dataverse API (Common Data Service), the Power Platform Metadata API, which matters because Custom APIs are registered metadata, and the Copilot Studio API on the agent side.\n\nBy the catalog's measures, Power Platform scores well. Its Kin Score is 75.4, in the exemplar band. Developer ergonomics at 83.9 and access clarity at 81.6 lead it, while contract governance at 45.5 is the weakest facet. The agentic-access profile counts 40 operations, and 16 of them act on data. Agent Readiness sits at 46.1, with idempotency, delegated identity and error semantics lit.\n\nHere is the tension. Reversibility documentation is dark, and so is dry-run mode. Microsoft has just shipped what the post calls the clearest rollback guarantee an agent platform can offer, yet the published contracts the catalog measures still don't say which operations can be undone. The transaction exists inside Dataverse, but nothing in those contracts tells an agent about it.\n\nWhat you take away is two things. First, if you want a multi-step request to succeed or fail as a unit, the place to put that guarantee is a Custom API backed by a plug-in, not a chain of separate agent calls. Second, don't assume the contract will tell you what is safe. Today, on the catalog's evidence, you have to know which operations are transactional, because the documents your agent reads don't say.\n\nRead the original: https://apis.io/2026/11/13/dataverse-mcp-server-now-calls-custom-apis-as-one-transaction/",
  "title": "You asked one sentence of Copilot to write three records. Here is what Dataverse does about it.",
  "topics": [
    "dataverse",
    "mcp",
    "transactions",
    "agent-readiness"
  ],
  "published_at": "2026-11-13T16:29:08.518Z",
  "expires_at": null,
  "policy_version": "2026.10.22-1"
}
