Skip to main content

Microsoft 365 Copilot agent types compared (declarative, Studio, Toolkit, and SDK)

· 32 min read
Luke Steward
Technical Manager & Security Engineer

A practical map of Microsoft 365 Copilot agent types, how you deploy them (including across customer tenants if you are an MSP), and when to pick each one, as of August 2026. Spoiler from my own delivery work: Copilot Studio declarative agents (agents for Microsoft 365 Copilot) are the path I enjoy building most for customers. The Studio tool and knowledge surface is wide enough for real work, and you still stay on Copilot’s orchestrator.

Microsoft documents two approaches (declarative vs custom engine). Everything else is a builder, runtime, or legacy name. Confusing those three is why “classic agent,” “Copilot Studio declarative,” and “Agents Toolkit” feel like four different products fighting in a trench coat.

Freshness warning. Licensing meters, model catalogues, and admin blades move monthly. Treat list prices and GA badges as “as of August 2026” and re-check Microsoft Learn before you buy capacity. Full research notes (with citations) live in the repo under research/.

Hover tip: dotted underlined terms (for example DA, CEA, GA, MCP) show a short definition on hover.

The only split that matters

Declarative agentsCustom engine agents
Orchestrator and modelsMicrosoft 365 Copilot’sYours, or Copilot Studio’s
HostingMicrosoft 365 (no extra host)Studio-managed or Azure / Foundry / your service
Proactive / triggersNo (user-initiated)Yes
Best forScoped M365 Q&A and actionsComplex workflows, multi-channel, custom models

Test question: whose orchestrator is running?

  • If the answer is Microsoft 365 Copilot’s, it is a declarative agent (SharePoint agents, Agent Builder, Agents Toolkit declarative packages, or Copilot Studio’s “agent for Microsoft 365 Copilot”).
  • If the answer is Copilot Studio’s (generative or classic custom agent), it is a custom engine agent, even when you only configure topics and tools in a low-code UI.
  • If the answer is yours (Agents SDK / Foundry / Agent Framework), that is also a custom engine agent.

That is why a normal “Copilot Studio generative/classic custom agent” is not a declarative agent. Generative orchestration means Studio’s planner picks topics and tools. It does not mean the agent was loaded as configuration into Copilot’s orchestrator. Low-code is not the same as declarative in Microsoft’s taxonomy.

Copilot Studio also has a separate entry point (Agents → Microsoft 365 Copilot → Add) that creates an agent for Microsoft 365 Copilot. Learn explicitly calls that a declarative agent. Same portal, different starting point, different runtime class.

Builders for declarative: SharePoint agents, Agent Builder, Agents Toolkit, Copilot Studio (declarative / M365 Copilot agent).
Builders for custom engines: Copilot Studio (custom agent, generative or classic), Agents Toolkit + Agents SDK, Teams SDK, Foundry Agent Service.

“Classic agent” means at least three things

  1. Classic PVA bots (clone into Copilot Studio).
  2. Classic orchestration in Studio (trigger phrases) versus generative orchestration (default for new agents), and separately the classic versus new authoring experience (preview; no migration either way).
  3. The old standalone plugin path. Plugins are now only actions inside declarative agents.

If someone says “don’t use a classic agent,” ask which of those they mean. For large MCP tool surfaces (for example CIPP), prefer a declarative path (Agent Builder, Agents Toolkit, or Copilot Studio declarative) over a Studio custom-agent import that hits tool ceilings. See CIPP with Copilot Studio as a declarative agent (MCP).

Headline comparison

TypeBuild skillOrchestratorExtra host?MarketplaceReach for it when…
SharePoint agentEnd userCopilotNoNoSite/library Q&A in minutes
Agent BuilderMakerCopilotNoNoPersonal / small-team knowledge bots
Declarative + Agents ToolkitPro-codeCopilot (DA)NoYesAPIs/MCP, source control, AppSource
Copilot Studio (declarative)Low-codeCopilot (DA)No extra hostNo Marketplace; org catalogue / shareStudio-authored DA with connectors/tools; makers already in Studio
Copilot Studio (generative custom)Low-codeStudio generative (CEA)ManagedCustom agents yes; multi-tenant previewConnectors, workflows, autonomy, WhatsApp/web
Copilot Studio (classic custom)Low-codeStudio classic (CEA)ManagedSame Studio publish pathsScripted / regulated dialogs; PVA migration
Agents SDK + ToolkitPro-codeBYOYes (Azure)YesFull control, multi-channel, custom models
Foundry Agent ServicePro / platformFoundry / BYOFoundryVia ToolkitAzure-native RAG and multi-model
CoworkEnd user +MicrosoftNoN/AMulti-step M365 work with approvals (GA Jun 2026)

Not greenfield defaults: classic PVA, classic Studio orchestration (unless you need hard scripts), and the Bot Framework SDK (support tickets ended 31 Dec 2025; migrate new work to Agents SDK / Teams SDK / Studio).

Feature matrices

Legend: Yes · No · Limited · Partial (works with caveats). Columns are the specialist build and deploy paths most people actually choose.

Head-to-head: three declarative and Studio paths

The comparison that matters once you leave Agent Builder. Same Copilot orchestrator for the first two columns; Studio custom is a different runtime class.

FeatureAgents Toolkit declarativeStudio declarative (M365 Copilot agent)Studio custom agent
OrchestratorCopilot (DA)Copilot (DA)Studio (CEA)
AuthoringManifest / VS CodeStudio portal (M365 Copilot page)Studio portal (custom agent)
Power Platform connectorsNo (OpenAPI / MCP)YesYes
MCP / REST / prompts / flowsYes (as DA plugins)Yes (Studio tool picker)Yes
Computer Use (CUA)No (custom tooling)Yes (Credits; not in USL inclusion)Yes (same Credits caveat)
Topics / child agents / autonomyNoNo (sequential DA runtime)Yes
External channels (WhatsApp / web bots)NoNo (M365 / Teams hosts)Yes
Source control / CI/CDStrong (git)Limited (catalogue / ZIP / share)Limited (solutions / pipelines)
Commercial MarketplaceYesNoCustom yes; multi-tenant preview
Instruction budget≤8k consolidated≤8k consolidatedLower if split topics / children
Studio Analytics pageN/ANo (Learn tip)Yes

Parity note: Agents Toolkit still unlocks the fullest manifest surface (for example editorial answers, worker agents, some capability flags in schema v1.8). Studio declarative wins on maker-friendly connectors and tool authoring. Studio custom wins when you need Studio’s own planner, channels, or autonomy.

Authoring and orchestration

FeatureSharePointAgent BuilderDA + ToolkitStudio declarativeStudio customAgents SDK + ToolkitFoundryCowork
Natural-language / no-code createYesYesNoPartialPartialNoPartialYes
Visual designer / topic canvasNoLimitedNoLimited (overview / tools)YesNoLimitedNo
Instructions / system promptLimitedYesYesYesYesYes (your code)YesCustom skills + chat
Topics / scripted conversation flowsNoNoNoNoYesCustomCustomNo
Generative / LLM orchestrationCopilotCopilotCopilot (DA)Copilot (DA)Studio generative (default)BYOFoundry / BYOMicrosoft agentic runtime
Classic trigger-phrase routingNoNoNoNoYes (toggle)CustomCustomNo
Model picker (Claude / GPT-5.x / …)NoNoNoNo (Copilot models)Yes (admin-gated)YesYesYes
Proactive / event triggersNoNoNoNoYesYesYesScheduled / event
Multi-agent / child agents / A2ANoNoNoNoChild Yes; external A2A previewYesA2A previewSkills composition

Tools, knowledge, and extensibility

FeatureSharePointAgent BuilderDA + ToolkitStudio declarativeStudio customAgents SDKFoundryCowork
SharePoint / OneDrive knowledgeScoped (≤20)YesYesYesYesVia Graph / Retrieval API (preview)Via connectorsYes
Copilot / Graph connectorsNoLimitedYesYesYesVia APIsVia connectorsPlugins
Public web / scoped webLimitedYes (≤4 sites)YesYesYesCustomCustomYes
Code interpreter / image genNoCapability flagsCapability flagsLimitedPartial / toolsCustomYesBuilt-in skills
OpenAPI / REST actionsNoLimitedYes (≤10 plugins)YesYesCustomYesPlugins
MCP toolsNoNoYesYesYesCustomPartial / YesN/A
Power Platform connectorsNoNoNoYesYesNo (custom)NoNo
Computer Use (CUA)NoNoNoYes (Credits; not in USL inclusion)Yes (same)CustomCustomNo

Modularity: tools, topics, and instruction packing

This is where Studio custom topics / child agents, Cowork custom skills, and Toolkit declarative agents feel most different. The question is less “who has MCP?” and more how behaviour is chunked. (Here “skills” means Cowork SKILL.md units or legacy Bot Framework skills, not “Studio has lots of tools.”)

CapabilityStudio custom (topics / child agents)Studio / Agents Toolkit declarativeCowork custom skillsAgents SDK / Foundry
Separate modular unitsYes (topics; Bot Framework skills ≤100; child agents)Limited: one agent; modularity via plugins + instruction sectionsYes (SKILL.md units, ≤50)Yes (your modules / agents)
Name + description routing metadataYes (generative orch. picks by description)Limited: plugin / tool descriptions; core behaviour in instructionsYes (skill frontmatter)Yes (your router)
Full instructions loaded only when neededPartial: topics/tools selected on demandNo: core instructions normally consolidated (≤8k)Yes: skills discovered / loaded as neededYes if you design it
Git / source-control friendlyLimited (solutions / export)Agents Toolkit strong; Studio DA limited (ZIP / catalogue)Partial (OneDrive SKILL.md folders)Yes
MCP / API actionsYesYesVia pluginsCustom
Single-agent instruction-limit pressureLower when split across topics / childrenHigher: one instruction surfaceLower: skills on demandYou control
Visual authoring / orchestrationYesStudio DA: overview UI; Agents Toolkit: codeLimited (UI + chat-built skills)No (code / Foundry UX)
Studio topic canvas / flowsYesNoNoNo

Practical takeaway: if you are hitting the 8,000-character instruction wall or a giant MCP tool list on a declarative path, thin the agent and push complexity into well-described plugins (soft quality cliff >10 tools per plugin), or move to Studio custom topics/child agents / Cowork skills when you truly need modular orchestration.

Capability snapshot (surfaces and ops)

CapabilitySharePointAgent BuilderDA + ToolkitStudio declarativeStudio customAgents SDK
Teams Chat as primary UXLimitedNo (known limit)Yes*Yes*YesYes
M365 Copilot Chat surfaceYesYesYesYesYesYes
External channels (web / WhatsApp / …)NoNoNoNoYesYes
Strong ALM / CI/CDNoNoYesLimited (ZIP / catalogue)*Solutions*Yes
Org catalogue / Agent StoreLimitedShare / Store pathYesYes (after publish)YesYes
Commercial MarketplaceNoNoYesNoCustom Yes; multi-tenant previewYes
Inherits M365 Copilot complianceHighHighHighHighHigh*You own more
Multi-tenant / partner distributeNoNoPackage / storePer-tenant ZIP / cataloguePer-tenant solution; host previewPackage + host
Studio Analytics pageN/AN/AN/ANoYesN/A

*Power Platform pipelines are same-tenant only. Cross-tenant fleets need Azure DevOps / GitHub Actions (see deployment below).
*DA + Toolkit / Studio declarative Teams Chat: when published / packaged for Teams or Copilot, not the same as Agent Builder.
*Studio custom compliance: high when authenticated; anonymous / no-auth publish is a known risk.
*Agents SDK Graph grounding via Microsoft 365 Copilot Retrieval API is Preview.

Hard limits worth memorising

LimitValueApplies to
Instructions≤ 8,000 charsDeclarative / Studio Copilot agents
DA plugins1–10 (actions)Declarative agents
Soft quality cliff>10 tools per pluginDeclarative plugins
Grounding / plugin response / timeout50 records · 25 items · ~45sDeclarative runtime
Studio tools (generative)Max 128; recommend 25–30Copilot Studio
SharePoint agent sources≤ 20SharePoint agents

Business Central docs also mention a Studio 70-tool MCP client limit; Studio’s own docs say 128. Treat 70 versus 128 as unresolved cross-doc noise, and design under the lower number if you are importing huge MCP surfaces.

Deployment, governance, and multi-tenant reality

Getting an agent into users’ hands is half the product decision. The other half is whether you are shipping into one tenant or repeating that design across many customer tenants.

Government / GCC note. Builder availability differs by cloud (for example some DoD paths are Toolkit-only; Studio multi-tenant preview calls out GCC gaps). Verify the customer’s cloud before promising Studio declarative as the delivery vehicle.

Single-tenant paths

  1. Share with specific users or the organisation: Agent Builder and Studio (declarative availability options after publish).
  2. Sideload or download a ZIP: Toolkit packages, and Studio declarative “download as .zip” for admin catalogue upload. Teams “upload custom apps” policy still matters.
  3. Org catalogue / Agent Store: after admin approval. Store validation SLOs apply; channel agents need app manifest ≥ 1.25 for new Teams Store submissions from July 2026 (already in force for new channel-enabled submissions).
  4. Commercial Marketplace: Toolkit declarative and custom engine; Studio custom agents (hosted multi-tenant is preview). Agent Builder and Studio declarative listings are not Marketplace paths.
  5. Governance stack: Copilot Control System (framework), Agent 365 (GA May 2026), Entra Agent ID (platform GA; some create wizards still preview), Purview audit/DLP/eDiscovery matrices. Reach for Agent 365 / Entra Agent ID when agents need first-class identity, Conditional Access, or estate-wide inventory, not only for chatbots inside Copilot.

What you actually ship (ALM artefacts)

PathTypical artefactMSP fleet note
Studio declarativePublish → share link / security groups / org catalogue submit / download ZIPRepeat per customer tenant. This is catalogue/app packaging, not the same as a Power Platform managed-solution promote.
Studio customDataverse managed solution ZIPPer-tenant import; map connections and environment variables. Pipelines stay same-tenant.
Agents Toolkit declarative / CEAM365 app package (git + CI/CD)Best when you need repeatable product packaging or Marketplace.

Partners and multi-tenant (MSP) deployment

If you run Microsoft 365 for many customers, treat multi-tenant as a first-class constraint, not a footnote. The agent type you pick often decides whether you can productise once or must land a package in every tenant.

PatternWhat it isWhen it fitsWatch-outs
Per-tenant Studio declarativeSame agent design published (or ZIP-uploaded) into each customer tenant’s catalogue / availability optionsCustomer M365 Copilot agents with connectors / MCP / Graph knowledge; my usual customer buildNeeds Copilot licence + Studio maker access per tenant. No Studio Analytics. Prefer user auth on tools that touch customer data.
Per-tenant managed solution (Studio custom)Managed solution ZIP imported into each customer’s Power Platform environmentAutonomy, external channels, topic canvas, customer-billed Credits for CEA workloadsPipelines do not cross tenants. Automate with Azure DevOps / GitHub Actions.
Hosted Studio multi-tenant (preview)One agent in the partner host tenant; customers install a package that calls itFAQ / public-knowledge agents that do not need end-user auth to customer GraphHost-billed; transcripts off; many features blocked in preview (including several knowledge and MCP scenarios).
Toolkit package / MarketplaceOne M365 app package distributed via org catalogue or Partner CenterProductised agents; partner-hosted Azure backends for CEAsStudio declarative and Agent Builder are not Marketplace offerings.
Per-tenant licensing economicsCustomer pays USL, Credit packs, and/or PAYG in their tenantManaged-service agents grounded on tenant dataMultiplexing does not reduce licences. Graph grounding alone is 10 Credits. Unused packs do not roll over.

GDAP helps you administer customer tenants. It does not invent cross-tenant Power Platform pipelines, and it does not replace per-tenant DLP, capacity, or catalogue approval. For Graph-aware customer agents, the practical default remains: design once, land per customer tenant (Studio declarative ZIP/catalogue, managed solution, or Toolkit package), with automation where the fleet justifies it.

Secure by default (customer agents)

  • Prefer user authentication on connectors and tools that read or write customer Graph / line-of-business data; maker auth is a multiplexing and over-privilege risk.
  • Put connectors in the right DLP groups before wide share; treat prompt injection via email/ticket knowledge as a real threat (Learn calls this out for Copilot-extending agents).
  • Avoid anonymous / no-auth publish for Studio custom agents.
  • Publish Studio declarative deliberately (availability options), then have an admin approve catalogue installs.
  • Bring Entra Agent ID / Agent 365 in when the agent needs governed identity beyond “runs as the chatting user.”

How you measure Studio declarative success

These agents do not feed the Copilot Studio Analytics page. Plan measurement up front: qualitative UAT in real Copilot Chat (not only the Studio test panel), M365 / Agents admin inventory, Purview audit where enabled, and Agent 365 if the estate is on that control plane. Thumbs-down feedback in Copilot goes to Microsoft, not into your Studio dashboards.

Cost in one screen

List prices below are USD marketing figures (Aug 2026). Customer invoices usually land in local currency; re-check Microsoft’s price lists for GBP and other markets before you quote.

ConstructRule of thumb (USD, Aug 2026)
Copilot ChatIncluded; web-grounded free; work/agent often metered
Copilot USL (Enterprise)$30/user/month (yearly)
Credit pack$200/mo → 25,000 credits; no rollover
PAYG$0.01 per Copilot Credit
Feature stack (metered)Classic 1 · Generative 2 · Action 5 · Graph grounding 10 · …
USL + internal Studio (B2E)Often zero-rated for listed features; fair usage; Computer Use not included
Studio declarative (M365 Copilot agent)Needs Copilot licence for makers/users; Graph grounding and actions still follow Credits rules when metered; CUA = 5/step standard or 15/step premium
Studio custom external channelsStandalone Studio / Credits (not “included with USL chat only”)

Budgeting trap: one Graph-grounded generative reply is about 12 credits (10+2), not 1. Prepaid capacity can disable agents around 125% overage. Prefer Microsoft’s June 2026 Copilot Credits / Studio licensing guides over marketing “unlimited” wording.

Each agent type in practice

The tables above are for scanning. This section is the same decision material with more room to breathe: what each path is for, where it shines, and when to leave it.

SharePoint agents

SharePoint agents are the thinnest declarative option. An end user (with the right licence or PAYG) points an agent at up to 20 sites, libraries, folders, or files, and asks questions that stay permission-trimmed to what they can already see.

Where it wins: minutes-to-value document Q&A on a known library; no Studio environment, no pro-code, no packaging ceremony.

Where it falls short: no Lists, no Site Pages library pages as sources, no rich actions or connectors, and almost no ALM. PAYG is easy to misread: a successful interaction is counted as 12 messages at the $0.01 framing.

Reach for it when you only need “ask this site/library.” Move on when you need organisation-wide instructions, APIs, workflows, Marketplace distribution, or Teams Chat as the primary surface.

Agent Builder (in Microsoft 365 Copilot)

Agent Builder is the lightweight maker path inside Copilot Chat. You describe an agent in natural language (or use Configure / templates), attach SharePoint / OneDrive / web knowledge, and share it with yourself, named people, or the organisation. It still runs as a declarative agent on Copilot’s orchestrator.

Where it wins: lowest friction for personal and small-team knowledge bots; inherits Copilot security and compliance; there is an official copy to Copilot Studio path when you outgrow it.

Where it falls short: no Power Platform connectors and only limited external actions; known limitation that these agents cannot be used in Teams Chat; weak ALM and no Commercial Marketplace. Mid-project jumps to Studio for CRM write-backs or approvals are a common pain point in the field.

Reach for it when a small team needs Graph-grounded Q&A without standing up Studio. Move on when you need Teams Chat as primary UX, connectors, autonomy, git-based packaging, or AppSource.

Declarative agents via Agents Toolkit

This is the pro-code packaging of the same declarative model: JSON/YAML manifests, API plugins, MCP, Adaptive Cards, sideload or store submit, scaffolded with Agents Toolkit (VS Code / Visual Studio / atk CLI). Hosting stays in Microsoft 365; you do not bring an orchestrator.

Where it wins: real source control and CI/CD; Agents Playground for local testing; full declarative capability surface (manifest v1.8 family); eligible for Commercial Marketplace / AppSource; same Copilot compliance inheritance as Agent Builder. For partners, this is the cleanest path to a productised declarative package across tenants.

Where it falls short: needs developer skills; no drag-and-drop Power Platform connectors (use OpenAPI / MCP instead); runtime envelopes bite large tool surfaces (grounding 50 records, plugin response 25, about 45s timeout, 1–10 plugins, soft quality cliff >10 tools per plugin). Instruction text is normally one consolidated blob (≤8,000 chars), so modularity is weaker than Studio topics or Cowork skills.

Reach for it when you are productising a declarative agent with APIs/MCP, need git, or want AppSource. Move on when you need autonomy, external channels (WhatsApp/web bots), iterative multi-step orchestration you control, or custom models. If you want a declarative agent but prefer the Studio portal over VS Code, use Copilot Studio (declarative) instead.

Copilot Studio (declarative: agent for Microsoft 365 Copilot)

This is the missing middle that causes most of the naming fights, and it is the path I personally like building most for customer work. In Copilot Studio you start from Agents → Microsoft 365 Copilot → Add. Learn’s wording: an “agent for Microsoft 365 Copilot” is equivalent to a declarative agent created in Microsoft 365 Copilot. It extends Copilot with instructions, knowledge (SharePoint, Graph connectors, web browsing), and tools. Learn’s create-new tool list for this path includes prompts, agent flows, Computer Use, custom connectors, MCP, and REST.

It is not the same object as a Studio custom agent (generative or classic). Official differences that matter in practice:

  • Different starting point in the portal (Microsoft 365 Copilot page versus create-custom-agent).
  • It does not appear in the main Studio agents list with custom agents.
  • On publish it is ready for availability options (share link, teammates / groups, org catalogue submit, download ZIP). Unlike a standalone custom agent, it is not automatically deployed to Microsoft 365 Copilot and Teams just because you published.
  • Publishing provisions a bot resource in the tenant’s Microsoft Entra ID so users can talk to the agent in Teams.
  • Tips from Learn: these Copilot agents do not collect data for the Copilot Studio Analytics page; runtime answers in Copilot can differ from the Studio test panel.

Where it wins: the broadest low-code tool and knowledge surface I still trust on Copilot’s orchestrator. In one Studio authoring experience you can combine instructions, SharePoint / Graph connector / web knowledge, and connectors / REST / MCP / prompts / flows / Computer Use, then land the agent in Microsoft 365 Copilot and Teams. That mix is why it is my favourite customer-delivery path: maker-friendly authoring, tenant Graph and connector reach, and Copilot compliance inheritance, without jumping straight to a custom-engine host. It is also the Studio path that matches guides such as the CIPP MCP declarative wiring.

What still bites (same declarative runtime): sequential Copilot orchestration is a poor fit for long multi-step loops you control yourself. You still live with instruction pressure (≤8,000 chars), plugin/tool ceilings on the declarative envelope (1–10 plugins; soft quality cliff >10 tools per plugin), grounding / response / timeout envelopes (50 / 25 / ~45s), and no Studio Analytics. Computer Use is available here per Learn, but it burns Credits (5/step standard, 15/step premium) and is not part of USL fair-usage inclusion. Huge MCP surfaces still need careful packaging (see the CIPP post).

Where it falls short versus other builders: not a substitute for Studio custom agents when you need full multi-channel CEA behaviour, classic topic canvases, or autonomy; not as git-native as Agents Toolkit; Commercial Marketplace is the Toolkit/custom-engine story, not this path; requires Copilot licence plus Studio environment permissions for makers. Agents Toolkit can still expose manifest capabilities the Studio UI does not surface as neatly (editorial answers, worker agents, and other schema v1.8 flags).

Reach for it when you are building agents for customers (or your own tenant) that live in M365 Copilot / Teams and need more than Agent Builder can express. Use Agent Builder instead when you only need a quick personal/small-team Q&A bot. Use Agents Toolkit declarative when you need source control and AppSource. Use Studio generative/classic custom agents when you need Studio’s own orchestrator, external channels, or CEA-class autonomy.

Copilot Studio (generative custom agent)

Full Copilot Studio custom agents on copilotstudio.microsoft.com are the low-code custom engine platform, not a declarative agent. You create them as standalone custom agents (not via the Microsoft 365 Copilot agents card). New agents default to generative orchestration: Studio’s orchestrator (planner) picks topics, tools, knowledge, and child agents from descriptions. You get Power Platform connectors, agent flows, REST, MCP, Computer Use (CUA), multi-channel publish, solutions/DLP, and (for licensed B2E users) often zero-rated listed features under fair usage.

It feels declarative because you mostly configure rather than write C#, but the taxonomy test fails: the runtime is Copilot Studio’s engine (hosted in Power Platform / Dataverse), with Credits, channels, and autonomy that declarative Copilot agents do not have. Microsoft’s own custom-engine overview lists Copilot Studio as a first-class CEA builder alongside Agents SDK and Foundry.

Where it wins: departmental workflows, CRM/ERP actions, approvals, WhatsApp/web channels, autonomy and event triggers, model picker (GPT-family plus admin-gated Claude and others), child agents to split tool budgets (max 128 tools under generative orchestration; Microsoft recommends 25–30). For MSPs, this is usually the per-tenant managed-solution path when customer Graph and connectors matter.

Where it falls short: Copilot Credits are feature-stacked (tenant Graph grounding alone is 10 credits); prepaid capacity can disable agents around 125% overage; external channels need standalone Studio/credits; classic and new authoring experiences have no migration; anonymous publish is a security landmine. Some practitioners report different Graph retrieval depth versus Agent Builder / Toolkit declarative agents. Treat that as community colour, not Learn taxonomy.

Reach for it when you need connectors, multi-step automation, autonomy, or non-M365 channels without writing a hosted bot. Move on when you need a BYO orchestrator, Azure-native multi-model economics, or SDK-level control that Studio cannot express cleanly. Prefer generative over classic for most new Studio work unless you specifically need the classic behaviour below.

Copilot Studio classic custom agent

“Classic” in Studio is easy to misuse. It usually means one of three related things:

  1. Classic orchestration: topic selection by trigger phrases (NLU match) instead of the LLM picking topics/tools by description.
  2. Classic authoring experience: the topics / flows / nodes canvas (still GA), as opposed to the new agent experience (production-ready preview, instruction-first, enhanced orchestration for all agents, no migration either way).
  3. Classic PVA lineage: older Power Virtual Agents bots cloned into Copilot Studio unified authoring.

In practice, when people say “Copilot Studio classic agent” they mean a Studio agent on classic orchestration (often still on the classic topic canvas): tools run only when a topic explicitly calls them; knowledge is mainly a fallback; the agent tries to stay in a single matched topic rather than chaining many generative steps. Like generative Studio agents, this is still a custom engine agent. Classic versus generative is an orchestration mode inside Studio, not a flip into the declarative/Copilot-orchestrator family.

Where it wins: deterministic, auditable conversation paths for regulated or scripted processes; familiar to makers who built PVA bots; still supports Power Platform connectors, channels, and solutions ALM when you author those explicitly in topics; admins can force classic-only per environment if generative orchestration is disabled.

Where it falls short: not the greenfield default (new agents start on generative orchestration); weaker at open-ended “figure out which tools to call” behaviour; easy to confuse with declarative agents or with the separate “classic versus new authoring experience” split; creating new classic chatbots from the old Copilot Studio for Teams app path was redirected to the web app (June 2026), though existing agents keep working. Large MCP tool imports are a poor fit here compared with a declarative or generative path (see the CIPP note above).

Reach for it when you are migrating a classic PVA bot, need hard-scripted branching with predictable topic routing, or compliance prefers trigger-phrase determinism over generative tool choice. Move on when you want the LLM to select and chain tools/topics from descriptions, need autonomy/event-driven generative patterns as the primary design, or you are starting a net-new agent with no scripted-dialog requirement. Use Copilot Studio (generative custom) instead, or Studio declarative / Agents Toolkit if you mainly need M365 Copilot’s orchestrator.

Agents SDK + Agents Toolkit (custom engine)

Here you leave Copilot’s orchestrator. Agents SDK is the channel/conversation plumbing (C# / JS / Python). Pair it with Agent Framework, LangChain, or your own planner; scaffold and package with Agents Toolkit. App manifest ≥ 1.21. This is the clear successor path for new work that used to land on Bot Framework (support tickets ended 31 Dec 2025).

Where it wins: full control of models, tool loops, proactive messaging, and channels (Teams, web, SMS, email, and so on); Marketplace-eligible; fits Agent 365 / Entra Agent ID governance stories when you treat the agent as a first-class identity. Partners can ship one package and host Azure backends centrally where that model fits.

Where it falls short: you own hosting, responsible AI, security, and Azure cost; highest skill and ops floor. If a declarative or Studio agent would meet the need, this path is overkill.

Reach for it when you need complex multi-step loops, custom models, non-M365 channels, or to modernise an existing bot estate. Prefer Teams SDK only when the experience is Teams-collaborative and you do not need multi-channel agent plumbing.

Foundry Agent Service

Foundry Agent Service is the Azure-managed agent platform (prompt agents and hosted agents) with a path to publish/share into Teams and M365 Copilot. Strong when the centre of gravity is already Azure RAG, model routing, or Foundry tooling. A2A and some hosted features remain preview.

Where it wins: managed runtime, Foundry model catalogue, and prepaid Agent Commit plans that can span Studio + Foundry spend.

Where it falls short: Azure TCO (tokens, search, compute); easy to over-engineer a problem that Agent Builder or Studio would have solved.

Reach for it when you are building Azure-native agents and want M365 as a channel. Stay on Studio/DA when the workload is mostly M365 knowledge and Power Platform connectors.

Cowork (and first-party Microsoft agents)

Cowork is documented as an agentic system, not “another DIY agent type.” It runs multi-step work across mail, calendar, files, and Teams with human approval before sensitive actions, modular SKILL.md custom skills (≤50), and Copilot Credits billing (GA June 2026). Researcher and Analyst are separate first-party agents typically tied to the Copilot USL. They cover deep research and spreadsheet-heavy work, not something you rebuild in Toolkit.

Where it wins: outcome-driven “do the work” scenarios and skill-based modularity without standing up Studio topics.

Where it falls short: it is not a substitute for a custom MCP/connector agent you design and ship; Credits still apply; governance lives under the Cowork / Agents admin surfaces, not your ALM repo.

Reach for it when users need delegated multi-step M365 work with approvals. Use Researcher/Analyst when you want Microsoft’s deep-research or spreadsheet specialists (usually needs USL). Build your own agent when the differentiator is your tools, data, or packaging.

Quick chooser

NeedPrefer
Customer M365 agent I would build firstCopilot Studio (declarative / M365 Copilot agent)
Customer has Copilot Chat only / no USLSharePoint agent PAYG, or web-grounded Agent Builder; budget Credits before Graph tools
Minutes-to-value on a librarySharePoint agent
Small-team knowledge botAgent Builder
APIs, MCP, git, AppSourceDeclarative + Agents Toolkit
Modular behaviour without one giant instruction blobStudio custom topics/child agents, or Cowork custom skills
Connectors, approvals, WhatsApp/web, autonomyCopilot Studio (generative custom agent)
Scripted / regulated topic flows; classic PVA migrationCopilot Studio (classic custom agent)
Graph-aware agent across many customer tenantsPer-tenant Studio declarative ZIP/catalogue or Toolkit package (not host multi-tenant preview alone)
Custom models / complex loops / non-M365 channelsAgents SDK (± Agent Framework / Foundry)
First-party deep research / spreadsheetsResearcher / Analyst (needs USL) — do not rebuild
Multi-step delegated M365 work with approvalsCowork — do not rebuild as a DIY agent type

Before you hand a Studio declarative agent to a customer

  1. Test in Microsoft 365 Copilot Chat (and Teams if that is the target), not only the Studio test panel.
  2. Exercise each tool with user auth; confirm connection consent and DLP allow the connectors.
  3. Check instruction length, tool count, and timeout behaviour under realistic prompts.
  4. Publish, set availability, and complete catalogue / admin approval in the customer tenant.
  5. Agree how you will measure success without Studio Analytics.
  6. Document Credits exposure (especially Graph grounding and Computer Use).

My recommendation for customer work

Copilot Studio declarative agents are my favourite path for customer delivery, and they are what I reach for first unless a hard requirement forces something else.

That preference comes from lived delivery, not from Microsoft ranking the builders. For most MSP and customer tenants, this path hits the sweet spot I care about: Copilot’s orchestrator and compliance model, plus Studio’s wide tool and knowledge authoring (connectors, MCP, REST, prompts, flows, Computer Use, Graph-aware knowledge). You can ship useful agents without standing up a custom engine, WhatsApp/web channels, or an Azure-hosted bot.

Be honest about the ceiling: you are still on the declarative runtime. If you need long autonomous loops, external channels, or git-native AppSource packaging, switch deliberately to Studio custom, Agents Toolkit, or the Agents SDK. Agent Builder remains fine for throwaway personal bots; first-party Researcher, Analyst, and Cowork should be reused rather than rebuilt.

The rest of this post is the map for those exceptions. The first place I still open for customer work is Agents → Microsoft 365 Copilot → Add in Copilot Studio.

Naming landmines (last 12 months)

  • Teams Toolkit → Microsoft 365 Agents Toolkit; Teams AI Library → Teams SDK
  • Studio “messages” → Copilot Credits (1 Sep 2025)
  • “Copilot Studio lite” briefly → back to Agent Builder
  • Inside Studio: agent for Microsoft 365 Copilot (declarative) is not the same as a custom agent (generative/classic CEA)
  • Agent Framework 1.0 (orchestration) is not Agents SDK (channels) and not Agent 365 (governance licence)
  • Field talk of “Sydney versus Samba” orchestrators is community, not Learn: useful colour, not official taxonomy

Further reading