MCP for Microsoft Copilot Studio Module Included

Vaks PM · Integration guide · MCP · Copilot Studio · August 2026

What you will end up with. A Copilot Studio agent your colleagues use in Microsoft Teams, connected to Vaks PM through a pre-registered OAuth client. Each user signs in with their own Vaks account, and the agent can never do more than that user could. This is the longest of the three assistant guides — Copilot Studio does not self-register, so there are a few more steps and one account pitfall to know about.
This page covers the “on behalf of the user” agent. Here the agent borrows the rights of the person talking to it (per-user OAuth delegation) — ideal for an assistant your staff query. If instead you want an agent to act under its own agent identity (owner, budgets, its own audit trail), claiming tasks and woken by a nudge, that is a different setup: see Autonomous agent in Copilot Studio.

Before you start

This page only covers the Copilot Studio-specific wiring. The parts common to every assistant live in the hub:

Test with a normal account, not a Global Admin

A user with a standard Microsoft 365 Copilot licence can connect — there is no extra premium Power Platform licence to buy for the connection itself. The one real pitfall is the account you test with:

Do not test the connection with a Global Administrator account. A Global Admin gets a filtered “administrative access mode” in Dataverse that breaks connector reads — the connection fails with a prvReadConnector privilege error even though the account looks all-powerful. Always test with a normal, licensed user account. See troubleshooting.

Licence & credits — who pays for usage

Connecting to Vaks costs nothing extra, but every interaction your users have with the agent consumes Copilot Credits on the Microsoft side. Who covers them depends on the user's licence:

This is capacity, not connection. Not to be confused with the account pitfall above: the connection itself works with a plain M365 Copilot licence, with no premium Power Platform licence. Here we mean consumption once the agent is used at scale. If some of your users have no Copilot licence, plan a billing policy to cover their credits. This capacity is managed in the Power Platform admin center (see also Copilot Studio billing), not in Vaks.

Step 1 — Create the Vaks credentials

Copilot Studio does not register itself, so you create the OAuth client up front in Vaks. Open Admin → Integrations → AI connector (MCP) → Pre-registered OAuth clients:

  1. Give the client a Name (e.g. “Copilot Studio”).
  2. The Callback URL is optional. Leave it empty and Vaks registers the standard Power Platform callback for you (https://global.consent.azure-apim.net/redirect) — so you can create the client and get its ID and secret before Copilot Studio ever reveals its redirect URL. If your tenant is on a sovereign/regional cloud with a different consent host, either paste that value here or edit it later (the Edit callback button on the client, no new secret). You can register several callbacks on one client.
  3. Press Create client. The Client ID (vaks_mcpc_…) and Client secret (vaks_cs_…) are shown once — copy them into a vault immediately, the secret is never shown again.
The callback is a known constant, so there is no chicken-and-egg. Because the redirect URL does not depend on the connector's identity, you can create the Vaks client — and hand over the ID, secret and URLs — before anyone opens Copilot Studio. No placeholder round-trip needed.

Note the three OAuth URLs shown in the same section — you will paste them into the connector next:

FieldValue
Authorization URLhttps://<your-domain>/api/v1/auth/oauth/authorize
Token URLhttps://<your-domain>/api/v1/auth/oauth/token
Refresh URLthe same as the Token URL
Scopemcp:access

Step 2 — Create the agent in Copilot Studio

  1. Sign in to https://copilotstudio.microsoft.com (with a normal account, not a Global Admin).
  2. Pick or create a Power Platform environment if prompted.
  3. Choose Create → New agent, give it a name and a short description, and create it. You now land on the agent's overview.

Step 3 — Add the MCP tool

  1. Open the agent's Tools tab and choose Add a tool (or “Add tool”).
  2. In the dialog, pick Add new MCP (the Model Context Protocol option, top-right of the tool types).
  3. Enter a name and description, and the MCP server URL: https://<your-domain>/mcp (or your public MCP URL — see reaching it from outside).
  4. For Authentication, choose OAuth 2.0 — this is where the Vaks credentials from step 1 go, configured next.
“Add new MCP” creates a connector for you. Behind the wizard, Copilot Studio builds a custom connector for the MCP server. The authentication fields below are the same ones you would see on that connector's Security tab — the wizard just surfaces them inline.

Step 4 — Configure OAuth authentication

In the authentication step (OAuth 2.0), set:

  1. Identity Provider = Generic Oauth 2, per-user authentication (not “connector owner's credentials” — that would share one identity for everyone and defeat the whole per-user model).
  2. Client ID / Client secret = the values from step 1.
  3. Authorization URL = https://<your-domain>/api/v1/auth/oauth/authorize
  4. Token URL and Refresh URL = https://<your-domain>/api/v1/auth/oauth/token
  5. Scope = mcp:access
If the client secret field shows a red warning, re-paste it. Secrets are not shown again after a save, so an edited connector often needs the secret entered once more before Update connector. The redirect URL that appears at the bottom must match, character for character, the callback registered in Vaks — and because Vaks registers the standard Power Platform callback by default (step 1), it usually matches out of the box. A stray / or http vs https makes the authorize step fail with an unhelpful error.
Saving this creates a connection — but only for setup. Once you save the authentication, Copilot Studio may ask you to connect. That is your author connection, used only to build and test the tool — it does not decide who the agent runs as. The fact that each end user signs in with their own account is set in step 5 below.

Step 5 — Set per-user identity on the agent

This is where per-user identity is actually decided — not on the connector's Security tab. In your agent, open Settings → Security → Authentication and choose Authenticate with Microsoft (Entra ID). That lets Copilot Studio identify each user and keep a separate Vaks connection per person.

Do not enable “multi-tenant”. It is meant for cross-tenant access and warns that maker credentials could be shared between tenants — the opposite of what you want here.
Two identities, kept separate. “Authenticate with Microsoft” is who the user is to the agent (Entra). The Vaks connection is a separate per-user OAuth — each user still does their own Vaks sign-in the first time they trigger a Vaks tool. The first authenticates them so the second can be per-person.

Step 6 — Connect and test

When you finish adding the tool, Copilot Studio asks you, the maker, to connect so it can validate the tool — a “Not connected” prompt appears. Click it, sign in to Vaks and approve the consent screen. This author connection is only for building and testing; connecting here does not mean your identity is what gets distributed — that is governed by the per-user setting in step 5.

The Test pane always runs as you. When you test the agent in Copilot Studio, it uses your author connection — it cannot simulate a colleague. To validate per-user, you have to publish and have someone else use it (step 8).

Step 7 — Publish and share

Publishing an agent does not, on its own, put it in front of users. Three things:

  1. Publish the agent.
  2. Under Channels, add Teams + Microsoft 365 Copilot. Submitting it to the org store puts it in a waiting-for-Teams-admin-approval state — approve it in the Teams admin center (admin.teams.microsoft.com → Manage apps → Allow).
  3. Share the agent with the users or security group who should use it.
“Available” is not the same as reachable. In the admin inventory an agent can read as “Available” (published, not blocked) while “Shared with: Not shared” — and that unshared state is why no one sees it. Sharing is the step that distributes it. To test without waiting on org approval, use the Demo website channel or add the agent to Teams for yourself.

Step 8 — Verify per-user identity

The only proof that identities are not shared is a real second user:

  1. Have a colleague open the published agent (in Teams or via the Demo website) and trigger a Vaks request such as “list my projects”.
  2. They should be prompted to sign in to Vaks with their own account (login + consent), then get their own data.
  3. In Vaks, Admin → Integrations → MCP → Active AI connections should list their email — one connection per real user, not everything under yours.
If each user gets their own Vaks sign-in and their own row under Active AI connections, delegated identity is working: the agent acts as each person, bounded by their own permissions.

Recreate the pre-built workflows

Vaks ships 11 pre-built workflows as MCP prompts (the full library is in the hub). Claude surfaces them automatically; Copilot Studio does not consume that MCP primitive, so you recreate them yourself.

Don't recreate them as one-liners. Each real Vaks prompt is a detailed, multi-step instruction — it names the exact tools to chain, the order to call them in, and the guardrails (propose options first, wait for approval before writing, stay read-only for finance). A vague “write a status report” loses most of that. Recreate them at the same level of detail — the two full examples below show the target.

The 11 workflows (read ones work as-is; write ones need Allow AI write actions on):

WorkflowWhat it does
Portfolio · Risk radarReviews every project, prioritised risk list.
Portfolio · Deliverables awaiting reviewPrioritises what is waiting for my review.
Project · Status reportShareable progress update for a project.
Team · Find work for someoneProjects/tasks matching skills + real availability.
Finance · Budget auditBudget, spend, forecast, variance + corrective levers.
Project · Start from a brief writeBrief → project: tasks, dependencies, staffing.
Project · Close out writeClose-out checklist, then mark completed.
Project · Announce a change writeDrafts and sends an announcement to stakeholders.
Team · Staff a project writeProposes an optimal assignment (skills + availability).
Team · Onboard someone writeTeam assignment, declared skills, first mission.
Time · Timesheet catch-up writeSpots empty days, proposes the missing time entries.

Two full example prompts (the level of detail to aim for)

Project · Status report (read):

Write a clear status report for project "<NAME>". Get the project id via
vaks_list_projects, then combine vaks_get_project_health, vaks_list_project_tasks,
vaks_get_tasks_in_window (deadlines) and vaks_get_workload. Factual tone, ready to
share. Use exactly this structure:
## Status report — Project · Period · Overall status (green / amber / red)
### Progress
### Milestones & deadlines
### Risks & blockers
### Next steps

Team · Staff a project (write — note the “propose, then wait for approval” guardrail):

Propose staffing for project "<NAME>". Get the id via vaks_list_projects,
coverage via vaks_get_skill_gap, candidates per task via vaks_suggest_assignees,
and a plan preview via vaks_plan_project_preview (apply NOTHING yet). Show 2–3
DISTINCT staffing options — e.g. a tight team, a load spread more widely,
reinforcement on the missing skills — and for each: who does what, the load per
person, the delivery window, the warnings, and its trade-off (cost / time / risk).
Ask me to CHOOSE an option and approve BEFORE applying via vaks_plan_project_apply.
Write the other nine the same way. Follow the pattern: name the exact vaks_* tools and the order, ask the agent to propose before it writes and to wait for your approval, and keep finance read-only. If you want the exact wording Vaks uses, run the matching prompt once in Claude (which shows it) and copy it.

Where to put them in Copilot Studio

Troubleshooting

SymptomCause & fix
Connect fails with prvReadConnector / “Administrative access mode”You are testing with a Global Admin account — Dataverse filters its privileges. Test with a normal, licensed user (a standard M365 Copilot licence is enough).
Authorize step fails / redirect errorThe callback registered in Vaks does not match the connector's redirect URL exactly. Copy it character for character.
Token step fails / invalid client secretThe secret was not re-pasted (red warning on the field). Re-enter it and Update connector.
Consent screen has no approve buttonThe connector is disabled in Vaks (mcp.enabled off). Enable it.
Agent published but nobody sees it in Teams“Available” ≠ shared. Approve it in the Teams admin center and Share it. See publish & share.
Everyone seems to act as youThe connector is on maker/shared credentials, not per-user. Set the agent to Authenticate with Microsoft and per-user auth; confirm via Active AI connections in Vaks.

Related: MCP overview (hub) — permissions, admin toggles, deployment · Claude · ChatGPT · all integrations.