# Agent Control Pro
We understand that our customers need to be confident using Agent Control Pro, and be aware of our data collection practices. Agent Control Pro is a Microsoft 365 Copilot declarative agent that helps administrators discover, classify, and govern Copilot agents in their tenant — with KPIs, duplicate detection, org-wide promotion candidates, usage analytics sourced from the Copilot usage report, and cost analytics (FinOps) sourced from the Power Platform billing report.
Note
This section is subject to change and we recommend that you check back quarterly for updates.
# Licensing prerequisites
Microsoft Agent 365 license required per user
A Microsoft Agent 365 license is required per Agent Control Pro user. Every individual who uses Agent Control Pro must be assigned one, in addition to an active Microsoft 365 Copilot license. Without an Agent 365 license, Microsoft 365 Copilot will not issue a token for the access_as_user scope and the Agent Control Pro tools cannot be invoked for that user. Microsoft applies the same requirement to the underlying Graph API: access to the Copilot Package Management API requires a Microsoft Agent 365 license.
The license is only needed for the people who actually use Agent Control Pro, not for every user in the tenant.
| Requirement | Scope | Required |
|---|---|---|
| Microsoft Agent 365 license | Per Agent Control Pro user | Yes |
| Microsoft 365 Copilot license | Per Agent Control Pro user | Yes |
| Agent Control Pro subscription (Microsoft AppSource) | Per tenant | Yes |
| Tenant administrator role | Admin consent and usage-report upload | Yes |
Licensing is enforced by Microsoft on the Copilot host side. Agent Control Pro does not read, store, or evaluate license assignments itself, so no license data is persisted by the service. See the Get Started guide for the full prerequisite list and activation steps.
# Data Management Practices
Through the implementation of its different features, Agent Control Pro accesses, processes and stores several kinds of data:
- User profiles
- Uploader identity (who uploaded a report)
- Tenant identifier (used for tenant isolation)
- Microsoft 365 Copilot agent catalog metadata
- Microsoft 365 Copilot usage report rows (admin-uploaded)
- Power Platform billing report rows (admin-uploaded)
- Marketplace subscription metadata
Here is how we're managing data for these different categories:
| Data | Accessed | Cached | Stored | Backup | Notes |
|---|---|---|---|---|---|
| User profiles | ✔ | ✔ | 🚫 | 🚫 | Read at sign-in via Microsoft Graph (User.Read) and resolved on demand for package access reviews. Not persisted beyond the active session, apart from the uploader identity recorded below. |
| Uploader identity | ✔ | ✔ | ✔ | ✔ | For each report upload we record the uploading admin's object id and user principal name, alongside the original file name, row count, and size, so the upload has an audit trail. Stored in the Uploads and BillingUploads tables. |
Tenant identifier (tid) | ✔ | ✔ | ✔ | ✔ | Stamped on every tenant-owned record so all queries are filtered by the caller's tenant. Stored as long as the organization is active. |
| Copilot agent catalog metadata | ✔ | 🚫 | 🚫 | 🚫 | Read on demand from /beta/copilot/admin/catalog/packages. Returned to the caller; not persisted. |
| User & group directory entries | ✔ | ✔ | 🚫 | 🚫 | Resolved on demand to label package access entries. In-memory cache per request only; never written to durable storage. |
| Copilot usage report rows | ✔ | ✔ | ✔ | ✔ | Uploaded manually by an admin as a CSV export of the Microsoft Graph getMicrosoft365CopilotUsageUserDetail report. Parsed and stored tenant-isolated in the Uploads and Rows tables. No automated Graph fetch is performed. |
| Power Platform billing report rows | ✔ | ✔ | ✔ | ✔ | Uploaded manually by an admin as a CSV export of the Power Platform / Copilot Studio consumption report. Parsed and stored tenant-isolated in the BillingUploads and BillingRows tables. Each row holds the agent id and name, product, billable feature, billed and non-billed credits, channel, knowledge sources, tool used, LLM model, scenario name, and environment id and name. No automated Power Platform API call is performed. |
| Marketplace subscription metadata | ✔ | ✔ | ✔ | ✔ | Received via Microsoft commercial marketplace SaaS webhooks. Stored in the Subscriptions table for plan, status, and trial tracking. |
| Copilot Conversations | 🚫 | 🚫 | 🚫 | 🚫 | No access. No cache. No storage. |
No model training
No customer data is used to train any AI or machine-learning model. Agent Control Pro only reads from the Microsoft 365 Copilot catalog (via Microsoft Graph) and from admin-uploaded usage and billing reports for governance reporting. No data is sent to any third-party model provider, and no Witivio model is fine-tuned, indexed, or otherwise enriched with customer data.
# Tenant isolation
Tenant isolation is enforced in the data layer. Every record that belongs to a customer tenant carries the caller's tid claim, and every query against those records is automatically filtered by that tenant. This covers the four tenant-owned entity types:
- Usage report uploads
- Usage report rows
- Billing report uploads
- Billing report rows
The Subscriptions table is deliberately outside this filter, because a marketplace subscription has to be resolvable before a tenant context exists (the webhook that creates it arrives before any user signs in). It holds plan, status, and trial metadata plus the tenant id it belongs to, and it never contains catalog, usage, or billing data.
# Microsoft Graph
TIP
All permissions are delegated permissions.
| Scope | Description | Justification | Admin Consent Required |
|---|---|---|---|
User.Read | Retrieve the properties and relationships of the signed-in user. | Allows Agent Control Pro to read user information for the admin UI and to identify the caller for the on-behalf-of flow. | No |
CopilotPackages.Read.All | Read all package (agent) information in the tenant. | Used to enumerate the tenant's Copilot agent catalog at /beta/copilot/admin/catalog/packages for inventory, duplicate detection, and consolidation analysis. | No |
CopilotPackages.Read.All is the least-privileged delegated permission for the Microsoft 365 Copilot Package Management API.
Admin consent
Microsoft does not require admin consent for the delegated CopilotPackages.Read.All permission. Agent Control Pro activation still asks a tenant administrator to grant consent once for the whole tenant, so that individual users are never prompted themselves.
TIP
The Microsoft Entra ID App ID is: 0f2c7309-6f93-4362-b4f5-67b7db9856fd
# Microsoft Graph endpoints
Each Microsoft Graph endpoint that Agent Control Pro calls, the feature it powers, and where in the code the call is issued:
| Endpoint | Purpose |
|---|---|
GET /beta/copilot/admin/catalog/packages | List the tenant's Copilot agents. Paginated; up to five pages / one thousand items per call. |
GET /beta/copilot/admin/catalog/packages/{id} | Retrieve a single Copilot agent for the detail view. |
GET /v1.0/users/{id} | Resolve user details for package access reviews. |
GET /v1.0/groups/{id} | Resolve group details for package access reviews. |
All Graph calls are issued with a token acquired via the on-behalf-of (OBO) flow from the bearer token presented by Microsoft 365 Copilot — Agent Control Pro never holds an application-only credential against Microsoft Graph and cannot act outside of the calling user's permissions.
# Microsoft Graph limits
In addition, Microsoft Graph applies a token-bucket algorithm based on the complexity of the request. The maximum number of requests applies based on the number of users in the tenant (opens new window).
All the limits are available here (opens new window).
# Architecture and flow diagram
The MCP server validates every Copilot-issued bearer token against the Entra application, then performs an on-behalf-of exchange so all Microsoft Graph requests are scoped to the calling user's delegated permissions. Tenant identity is enforced inside the data layer, as described under Tenant isolation above.
# MCP
Agent Control Pro exposes its capabilities to Microsoft 365 Copilot through a remote Model Context Protocol (MCP) server rather than classic REST plugins.
- Public endpoint:
https://agentcontrol.teams-pro.com/mcp— HTTPS only. - Authentication: OAuth 2.0 with the custom API scope
access_as_userexposed by Entra application0f2c7309-6f93-4362-b4f5-67b7db9856fd. Microsoft 365 Copilot is pre-authorized on this scope and obtains a token on the user's behalf. - Tools exposed (nine). Every tool is read-only; none of them writes to your tenant.
get_agent_analytics— tenant-level KPIs.find_similar_agents— duplicate / overlap detection.copilot_admin_catalog_GetPackages— paginated catalog listing with optional OData filter.copilot_admin_catalog_GetPackageById— single-package detail lookup.get_agent_usage— adoption metrics for a given agent.list_usage_rows— paged access to admin-uploaded usage report rows.get_agent_cost— Power Platform consumption cost in credits for one agent, or all agents ranked by credits.list_billing_rows— paged access to admin-uploaded billing report rows.get_billing_summary— tenant-wide FinOps rollup with cost broken down by environment, product, and feature.
- Interactive results: two UI widgets (
ui://widget/agents.htmlandui://widget/agent-detail.html) are served as MCP resources so catalog answers render as agent cards inside Copilot Chat. Each widget is published with a content security policy that restricts it to fetching from the Agent Control Pro domain only. - Data sent to the server: the caller's bearer token (validated and exchanged via OBO) and tool arguments such as a package id, an agent id, or an OData filter expression.
- Third-party APIs: none. Tool inputs and Microsoft Graph responses are not retained for model training.
# Declarative agent capabilities
The Agent Control Pro declarative agent is published with a deliberately narrow capability set:
| Capability | Configuration |
|---|---|
| Code Interpreter | Enabled, so Copilot can compute over the governance data returned by the tools. |
| Web Search | Enabled but restricted to a single site, https://learn.microsoft.com/microsoft-agent-365/. The agent cannot search the open web. |
| Model knowledge | Discouraged, so answers are grounded in your tenant's catalog, usage, and billing data rather than the model's own training data. |
# Trial subscriptions
A tenant on a Microsoft AppSource trial can call the same nine tools, with two differences: catalog responses are capped at five agents, and every tool response is prefixed with a banner stating that trial mode is active and when it ends. Trials run for seven days by default. No data handling differs between trial and paid subscriptions.
Licensing
Users calling Agent Control Pro through Microsoft 365 Copilot must hold a Microsoft Agent 365 license, which is what allows the Copilot host to obtain an access_as_user token on their behalf. See Licensing prerequisites above.
# Resource Endpoints
All the traffic from and to the Agent Control Pro platform uses HTTPS protocol on port 443. Here is a short description of each flow:
| Name | Comments |
|---|---|
agentcontrol.teams-pro.com | Public Agent Control Pro MCP server (/mcp endpoint accepts JWT-bearer requests from Microsoft 365 Copilot). The admin Razor Pages UI is also served from this host. |
graph.microsoft.com | Microsoft Graph — Copilot admin catalog, user and group lookups. |
login.microsoftonline.com | Microsoft Entra ID — token acquisition and OpenID Connect sign-in. |
*.applicationinsights.azure.com | Application Insights telemetry (optional). |
api.sendgrid.com | Outbound transactional email — reminders to upload the usage report and the billing report. |
Both report uploads are manual. Agent Control Pro never calls the Microsoft 365 admin center or the Power Platform admin center on your behalf: an administrator exports the CSV there and uploads it to the admin UI, so neither host appears as an outbound flow above.