MCP roles
How MCP roles control what Claude can do on the Plur-e Business Central and Dynamics 365 CRM servers — entities, actions, the default role and the exact denial messages.
Quick answer
An MCP role is a named set of entities (Dynamics 365 CRM) or areas (Business Central), each with the actions a user may perform on it — Read, New, Update, Delete for CRM; Read, Write, Post for Business Central. A tenant administrator creates roles and assigns them to specific users in AI & MCP → Roles. Without a role that grants the entity and the action, a tool denies instantly with a clear message — nothing is queued for approval and no one has to confirm anything mid-conversation.
What a role is
- A role belongs to one destination: Business Central, or one specific Dynamics 365 CRM connection. A tenant with two CRM connections has separate roles per connection.
- A role lists entities (CRM table logical names) or areas (Business Central
sections such as
bc_wms_receipts, or legacy areas such ascustomers), each with its own Read / New / Update / Delete (CRM) or Read / Write / Post (Business Central) flags. Read turns on automatically when an entity is added; the rest start off. - A role is assigned to specific users of the tenant. A user's effective permissions are the union of every role assigned to them, plus the tenant's default role for that destination — the most permissive flag wins when an entity appears in more than one role.
- Deny-by-absence: if a user has no role for the destination, the entity/area is not in any of their roles, or the specific action is off, the tool denies immediately. There is no pending state and no elicitation — the call either runs or it is denied.
Entities and actions
Every tool declares the entity/area it touches and the action it performs; a role only needs the actions its users actually use.
Dynamics 365 CRM
| Action | Unlocks |
|---|---|
| Read | crm_query, crm_get_record, crm_describe_entity, crm_fetchxml (including every table joined through a link-entity); being offered by crm_search and listed by crm_list_entities |
| New | crm_create_record |
| Update | crm_update_record, crm_set_state, crm_assign, crm_associate; crm_execute_action on a bound entity (an unbound action needs at least one entity with Update in the connection) |
| Delete | crm_delete_record |
The Customer Insights - Journeys tools follow the same entities: reading journeys and
segments needs Read on msdynmkt_journey / msdynmkt_segment, drafting a journey needs New
on msdynmkt_journey, and crm_journey_publish / crm_segment_publish need Update on the
matching entity. crm_whoami, crm_list_connections, crm_select_connection and
crm_get_skill never check a role — they carry no data by themselves.
Business Central
| Action | Unlocks |
|---|---|
| Read | The read methods of a section (bc_setup … bc_payments) or a legacy area, plus the matching classic tools (search_customers, get_customer, search_items, get_availability, list_sales_documents, …) |
| Write | The non-posting write methods of that section or area, plus create_sales_quote, create_sales_order, bc_print_document |
| Post | The methods marked posting in the skills — post receipt, register pick, post count, post journal, ship order — which cannot be undone in Business Central |
Platform tools (list_environments, list_companies, select_tenant, bc_get_skill,
bc_list_methods, bc_resolve_codes, bc_decode_barcodes, bc_handoff_*,
bc_list_printers) and the tenant-memory tools (plure_recall, plure_remember,
plure_forget) never check a role either — see Tenant memory.
The default role
The first time a tenant connects a Dynamics 365 CRM environment, or enables Business Central with an environment, Plur-e creates a role named Default access for that destination — but only if the tenant does not already have one. It is:
- Read-only on every entity/area listed below.
- Marked Default, so it applies to every user of the tenant, in addition to any other role they are assigned.
- For Dynamics 365 CRM, re-creatable at any time from AI & MCP → Dynamics 365 CRM, the
connection's row, Create default role, if an administrator deleted it. For Business
Central it is created the first time an administrator enables the server with an
environment in AI & MCP → Settings; if it is deleted, an administrator (or Plur-e
support) can re-create it by calling
POST permission-sets/{customerId}/seed-defaults.
Default CRM entities: the tables Claude's CRM skill documents out of the box — account,
contact, lead, opportunity, incident, quote, salesorder, invoice, product,
pricelevel, campaign, list, the activity tables, knowledgearticle, queue,
systemuser, team, businessunit, transactioncurrency, uom, territory, and its
msdynmkt_* tables for Customer Insights - Journeys (journeys, segments, templates, emails,
forms, triggers…).
Default Business Central areas: all of them — the 16 mobile sections (bc_setup …
bc_payments) and the legacy areas (customers, items, sales, purchasing,
warehouse, documents, reports).
Creating a role
Open AI & MCP → Roles
Press New role, give it a name and pick its Destination — Business Central, or Dynamics 365 CRM grouped by connection.
Add entities
Open the role and press Add entities: search, filter by All / System / Custom (CRM only — Business Central has a fixed catalogue of areas), and add the ones this role needs. Already-assigned entities are hidden from the list.
Review related entities (CRM only)
Adding CRM entities opens Related entities with the ones you just added as seeds: a "System tables" switch, each suggestion tagged Child table, Lookup or Many-to-many, entities already in the role marked as such, the ones Plur-e recommends pre-checked, and a warning past 25 selections. Skip, or Add N related.
Turn on the actions each entity needs
Read is already on. Switch on New / Update / Delete (CRM) or Write / Post (Business Central) only for what the role's users actually need to do.
Assign users
In the role's Users section, press Assign users and search by login or name. Users not assigned to any role still get whatever the Default access role grants.
Denial messages
Claude sees these when a tool checks a role and the call is not allowed. Every message ends with the same instruction, so Claude always knows what to tell the user:
| Message | Why it happens | What to do |
|---|---|---|
| "No permission sets are assigned to you for this connection." | The user has no role — not even the default one — for this destination or connection | Ask a tenant administrator to assign an existing role, or create one, in AI & MCP → Roles |
| "Entity 'x' is not allowed for you in this connection." | None of the user's roles list that entity or area | Ask a tenant administrator to add the entity/area to one of the user's roles |
| "Read, Create, Update, Delete or Post is not permitted on entity 'x'." — the verb is whichever action was checked (Business Central's Write flag is checked as Update) | The entity/area is in a role, but that specific action is off | Ask a tenant administrator to turn on the action on that role |
All three end with: "Ask a tenant administrator to grant it in the Admin Center (AI & MCP > Roles)." Claude should relay that instruction rather than retry the call or guess at a workaround.
Permissions are cached for up to 60 seconds per user and connection: right after an administrator grants an entity, area or action, a denied call may need up to a minute before a retry picks up the change.
Related: MCP security model · Business Central tools · Dynamics 365 CRM · Connect Claude
Last updated on
Edit on GitHubMCP security model
How Plur-e MCP servers handle identity, MCP roles, audit and data — per-user Entra ID sessions, entities and actions granted per role, deny-by-absence, full logging, no training on customer data.
Connect Claude
How to connect Claude Desktop, Claude Code, claude.ai and custom agents to a Plur-e MCP server (remote MCP over Streamable HTTP, sign in with Microsoft, no client id to configure).