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
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.
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.
About
Reviews
Write a reviewNo 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_groupget_service_provider_configget_userget_user_custom_security_attributeslist_groupslist_resource_typeslist_schemaslist_users
Write 3 · Create, change, send or run things.
add_group_memberscreate_groupprovision_user
Delete 7 · Delete, drop, revoke or wipe things.
delete_groupdeprovision_userremove_group_memberupdate_groupupdate_userupdate_user_custom_security_attributesupdate_user_lifecycle
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
ENTRA_CLIENT_CERT_PASSWORDENTRA_CLIENT_SECRETENTRA_SCIM_STATIC_TOKEN
Other settings (environment variables or headers).
ENTRA_CLIENT_CERT_PATHENTRA_CLIENT_IDENTRA_SCIM_BASE_URLENTRA_SCIM_DRY_RUNENTRA_TENANT_ID
Network hosts it talks to 2
github.com· found in codegraph.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 membersDescription is built at runtime.
create_groupCreate groupCreate 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 dataDELETE 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 dataDELETE 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-onlyFetch 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-onlyFetch 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-onlyFetch 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-onlyFetch 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-onlyList 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-onlyList 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-onlyList 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-onlyList 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 userCreate 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 dataRemove 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 dataPATCH 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 dataPATCH 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 dataPATCH 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 dataPATCH 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
- 0.555score
Hibp
darrenjrobinson
A Model Context Protocol (MCP) server for the Have I Been Pwned (HIBP) API
ConnectorAFreshness: ALocalRead-only★ 5↓ 41/wkClaude Code +5 - 0.550score
Entra News
darrenjrobinson
Search the Entra.news newsletter archive — a weekly digest of Microsoft Entra news
ConnectorAFreshness: ALocalRead-only★ 7Claude Code +5 - 0.529score
Entra News Podcast
darrenjrobinson
Search Entra.Chat podcast transcripts — Merill Fernando's Microsoft Entra podcast on YouTube
ConnectorAFreshness: ALocalRead-only★ 2Claude Code +5 - 0.520score
Graph Atlas MCP
darrenjrobinson
Tracks documented and undocumented Microsoft Graph API schema changes, with an MCP Apps visualiser
ConnectorAFreshness: ALocal★ 1Claude Code +5 - 0.505score
Entrapulse Polyarchy
darrenjrobinson
Interactive Entra ID identity relationship visualization — the 2003 polyarchy, live as an MCP App
ConnectorAFreshness: ALocalClaude Code +5 - 0.505score
Microsoft AI Roundup
darrenjrobinson
Search Merill's Weekly Microsoft AI Roundup (msai.ms) archive — curated weekly Microsoft AI news
ConnectorAFreshness: ALocalRead-onlyClaude Code +5
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.
Cite this page
Microsoft Entra SCIM MCP server. Agent Mart. https://agentmart.dev/connectors/darrenjrobinson-entra-scim-mcp (last updated 2026-10-25)