Skip to content
Agentmart
Submit a tool

Microsoft Entra SCIM

Microsoft Entra SCIM 2.0 Provisioning API: user and group lifecycle, with a local mock.

Connector by darrenjrobinson · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 2
Write a review

Chalk Labs

Need help deploying Microsoft Entra SCIM?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/darrenjrobinson-entra-scim-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Microsoft Entra SCIM 2.0 Provisioning API: user and group lifecycle, with a local mock.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
8 read · 3 write · 7 delete
Secrets
3 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 18

Read from the source code; the running server may list different tools.

Read 8 · Look things up without changing anything.

  • get_group
  • get_service_provider_config
  • get_user
  • get_user_custom_security_attributes
  • list_groups
  • list_resource_types
  • list_schemas
  • list_users

Write 3 · Create, change, send or run things.

  • add_group_members
  • create_group
  • provision_user

Delete 7 · Delete, drop, revoke or wipe things.

  • delete_group
  • deprovision_user
  • remove_group_member
  • update_group
  • update_user
  • update_user_custom_security_attributes
  • update_user_lifecycle

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • ENTRA_CLIENT_CERT_PASSWORD
  • ENTRA_CLIENT_SECRET
  • ENTRA_SCIM_STATIC_TOKEN

Other settings (environment variables or headers).

  • ENTRA_CLIENT_CERT_PATH
  • ENTRA_CLIENT_ID
  • ENTRA_SCIM_BASE_URL
  • ENTRA_SCIM_DRY_RUN
  • ENTRA_TENANT_ID

Network hosts it talks to 2

  • github.com · found in code
  • graph.microsoft.com · found in code

Tools (18)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_group_membersAdd group members

    Description is built at runtime.

  • create_groupCreate group

    Create an Entra group via SCIM. displayName is required; the Entra extension flags decide the group type. securityEnabled true with mailEnabled false (or omitted) is a security group. mailEnabled true with securityEnabled false is a Microsoft 365 / Unified group and needs mailNickname. Entra does not support creating mail-enabled security groups, so setting both flags true is rejected. displayName is not unique in Entra — creating the same name twice yields two groups, so check with list_groups if a retry might duplicate. Members cannot be set here: create the group, then call add_group_member…

  • delete_groupDelete groupcan change or delete data

    DELETE a group by id. Microsoft 365 / Unified groups are soft-deleted and restorable for 30 days, security groups are removed permanently — and either way restoration is a Microsoft Graph operation, not a SCIM one, so this server cannot undo it. The group's members are not deleted, only their membership. Any access granted through this group is revoked. A second call for the same id returns 404.

  • deprovision_userDeprovision usercan change or delete data

    DELETE a user by id. The user is soft-deleted into the Entra recycle bin and is restorable for 30 days — but only through Microsoft Graph, not SCIM, so this server cannot undo it. Deleting also strips every group membership, which is why a later remove_group_member for this user returns 404. A second call for the same id returns 404 rather than succeeding quietly.

  • get_groupGet group by idread-only

    Fetch a single group by id. Note: members are NOT returned, at any page size or projection. To list this group's direct members, use list_users with a groups.value filter (Microsoft's recommended path); to find a user's groups, use list_groups with a members.value filter; to check one specific membership, filter list_groups on both id and members.value.

  • get_service_provider_configGet SCIM service provider configread-only

    Fetch the Entra SCIM service provider configuration (supported features: patch, filter, pagination, bulk). Answers what the endpoint supports, not what is in the directory. The response is the same for every tenant and changes only when Microsoft changes the API, so fetch it once and reuse it rather than calling it before each operation.

  • get_userGet user by idread-only

    Fetch a single user by Entra object id. Two things are never in the response, whatever you project: Custom Security Attributes (the schema marks them returned:"request" — use get_user_custom_security_attributes) and group memberships (filter list_groups on members.value instead; for the reverse, a group's members, filter list_users on groups.value). To look a user up by userName rather than id, use list_users with an 'eq' filter.

  • get_user_custom_security_attributesGet user Custom Security Attributesread-only

    Fetch Custom Security Attributes for a user, projected by attribute set. attributeSets is required — the API rejects the bare extension URN with a 400. CSAs never come back from a plain get_user; they are only returned when named explicitly here. A set the user holds no values in comes back empty, which is a valid answer rather than an error. Requires CustomSecAttributeAssignment.Read.All (covered by CustomSecAttributeAssignment.ReadWrite.All).

  • list_groupsList groupsread-only

    List Entra groups via SCIM. Filter supports 'eq' on displayName/id/members.value/securityEnabled/mailEnabled/owners.value and 'ew' on displayName; only 'and' is supported. Cursor-based pagination. A members.value filter is the only way to discover which groups a user belongs to — neither get_user nor get_group reports membership. For the reverse, a group's members, use list_users filtered on groups.value.

  • list_resource_typesList SCIM resource typesread-only

    List the SCIM resource types Entra supports (User, Group) and the schemas each one uses. Pass id to fetch a single type. Static per API version — cache it rather than re-fetching.

  • list_schemasList SCIM schemasread-only

    List Entra SCIM schemas (core User, core Group, enterprise extension, Entra extensions, CustomSecurityAttributes) with each attribute's type, mutability and whether it is returned by default. Use it to check an attribute name or extension URN before building a patch path. Pass id to fetch a single schema. Static per API version — cache it rather than re-fetching. It describes the schema shape only: it does not list the tenant's Custom Security Attribute sets or their values.

  • list_usersList usersread-only

    List Entra users via SCIM. Filter supports 'eq' on userName/externalId/id/active/groups.value/mailNickname/ownedGroups.value and 'ew' on userName/mailNickname, with not(...) allowed on 'ew' clauses; only 'and' combines them. Cursor-based pagination. This is also how you resolve a userName to an object id, since every other user tool takes the id, and how you list a group's direct members (groups.value eq "<groupId>") — get_group never returns them. Prefer a filter plus a narrow 'attributes' list over listing everything: each page is a separate billed request. An app granted only User.ReadBasic…

  • provision_userProvision user

    Create a user in Entra via SCIM. Enforces the required attribute set: userName, password, displayName, givenName, familyName. mailNickname is optional — omit it and Entra derives it from userName. active defaults to true. Not idempotent — a second call with the same userName fails with a uniqueness conflict, so check with list_users first if a retry might be a duplicate. Group membership is not settable here: create the user, then call add_group_members.

  • remove_group_memberRemove group membercan change or delete data

    Remove a single user from a group. The Entra SCIM API only allows one removal per PATCH call and no other ops in the same call, so removing several members means several calls. A 404 here does not mean the group is missing: the API answers "Resource '<groupId>' does not exist or one of its queried reference-property objects are not present" — naming the group, not the member — whenever the user is not a member, including when that user has been deleted. Confirm with list_groups filtered on members.value before concluding the group is gone.

  • update_groupUpdate group attributescan change or delete data

    PATCH group attributes — e.g. { op: "replace", path: "displayName", value: "Platform Engineering" }, or the Entra extension URN ending in ":description". Membership changes are NOT allowed here: a "members" path is rejected client-side before any request is sent, so use add_group_members / remove_group_member instead. Group type flags (mailEnabled, securityEnabled) are fixed at creation and cannot be patched.

Show 3 more tools
  • update_userUpdate usercan change or delete data

    PATCH a user with SCIM operations — e.g. { op: "replace", path: "displayName", value: "Ada L" }, or { op: "replace", path: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department", value: "R&D" }. Operations are validated before anything is sent: removing mailNickname (or nulling it out) is blocked, because Entra rejects removing it once the user exists, and addresses[...] paths must use exactly [type eq "work"] — the only filter the API accepts there. Other complex multi-valued paths (e.g. emails[type eq "work" and primary eq true].value) are passed through as-is. Not the tool …

  • update_user_custom_security_attributesUpdate user Custom Security Attributescan change or delete data

    PATCH CustomSecurityAttributes on a user. Set a value with { op: "replace", path: "urn:ietf:params:scim:schemas:extension:Microsoft:Entra:2.0:CustomSecurityAttributes:Engineering.Team", value: "Platform" }. Clear one with op "remove" on the same path, or by replacing a multi-valued attribute with an empty array — both delete the assignment outright. The attribute set and attribute must already exist in the tenant; this cannot define them, and an unknown path is a 400. Read the result back with get_user_custom_security_attributes, not get_user. Requires CustomSecAttributeAssignment.ReadWrite.Al…

  • update_user_lifecycleUpdate user lifecyclecan change or delete data

    PATCH lifecycle attributes on a user — currently employeeLeaveDateTime. Not an inert field: Entra Lifecycle Workflows can be scheduled off it, so writing a past or imminent date may start offboarding. Called with no attributes set it changes nothing and returns { noChanges: true } without issuing a request. Requires User-LifeCycleInfo.ReadWrite.All on the app registration, which is separate from the permissions the other tools need.

Signals

Stars
2
Forks
0
Open issues
0
Last commit
Oct 14, 2026 (17 days ago)
Last release
Oct 14, 2026 (17 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.darrenjrobinson/entra-scim-mcp
Version
0.4.0
Auth
API key
Packages
npm entra-scim-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 25, 2026

More from darrenjrobinson

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Microsoft Entra SCIM running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Microsoft Entra SCIM?

CallGet help
Cite this page

Microsoft Entra SCIM MCP server. Agent Mart. https://agentmart.dev/connectors/darrenjrobinson-entra-scim-mcp (last updated 2026-10-25)