Source profileQuality 89/100

github/awesome-copilot/skills/entra-agent-user/SKILL.md

entra-agent-user

Create Agent Users in Microsoft Entra ID from Agent Identities, enabling AI agents to act as digital workers with user identity capabilities in Microsoft 365 and Azure environments.

Source repository stars
37,126
Declared platforms
0
Static risk flags
1
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Create Agent Users in Microsoft Entra ID from Agent Identities, enabling AI agents to act as digital workers with user identity capabilities in Microsoft 365 and Azure environments.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/github/awesome-copilot --skill "skills/entra-agent-user"
    Safe inspection promptEditorial

    Inspect the Agent Skill "entra-agent-user" from https://github.com/github/awesome-copilot/blob/9933dcad5be5caeb288cebcd370eeeb2fc2f1685/skills/entra-agent-user/SKILL.md at commit 9933dcad5be5caeb288cebcd370eeeb2fc2f1685. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Step 1: Verify the Agent Identity Exists

      Before creating an agent user, confirm the agent identity is a proper agentIdentity type:

      Before creating an agent user, confirm the agent identity is a proper agentIdentity type:Verify the response contains:Common mistake: Using an app registration's appId or a regular application service principal's id will fail. Only agent identities created from blueprints work.
    2. 02

      Step 2: Create the Agent User

      No password — agent users cannot have passwords. They authenticate via their parent agent identity's credentials.

      No password — agent users cannot have passwords. They authenticate via their parent agent identity's credentials.1:1 relationship — each agent identity can have at most one agent user. Attempting to create a second returns 400 Bad Request.The userPrincipalName must be unique. Don't reuse an existing user's UPN.
    3. 03

      Step 3: Assign a Manager (Optional)

      Assigning a manager allows the agent user to appear in org charts (e.g., Teams).

      Assigning a manager allows the agent user to appear in org charts (e.g., Teams).
    4. 04

      Step 4: Set Usage Location and Assign Licenses (Optional)

      A license is needed for the agent user to have a mailbox, Teams presence, etc. Usage location must be set first.

      A license is needed for the agent user to have a mailbox, Teams presence, etc. Usage location must be set first.Requires Organization.Read.All permission.powershell Connect-MgGraph -Scopes "User.ReadWrite.All","Organization.Read.All" -TenantId "" -NoWelcome
    5. 05

      Set Usage Location

      Review the “Set Usage Location” section in the pinned source before continuing.

      Review and apply the “Set Usage Location” source section.

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 49

    The documentation includes network, browsing, or remote request actions.

    GET https://graph.microsoft.com/beta/servicePrincipals/{agent-identity-id}

    Network access

    medium · line 67

    The documentation includes network, browsing, or remote request actions.

    Uri "https://graph.microsoft.com/beta/servicePrincipals/<agent-identity-id>" | ConvertTo-Json -Depth 3

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score89/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars37,126SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    github/awesome-copilot
    Skill path
    skills/entra-agent-user/SKILL.md
    Commit
    9933dcad5be5caeb288cebcd370eeeb2fc2f1685
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    SKILL: Creating Agent Users in Microsoft Entra Agent ID

    Overview

    An agent user is a specialized user identity in Microsoft Entra ID that enables AI agents to act as digital workers. It allows agents to access APIs and services that strictly require user identities (e.g., Exchange mailboxes, Teams, org charts), while maintaining appropriate security boundaries.

    Agent users receive tokens with idtyp=user, unlike regular agent identities which receive idtyp=app.


    Prerequisites

    • A Microsoft Entra tenant with Agent ID capabilities
    • An agent identity (service principal of type ServiceIdentity) created from an agent identity blueprint
    • One of the following permissions:
      • AgentIdUser.ReadWrite.IdentityParentedBy (least privileged)
      • AgentIdUser.ReadWrite.All
      • User.ReadWrite.All
    • The caller must have at minimum the Agent ID Administrator role (in delegated scenarios)

    Important: The identityParentId must reference a true agent identity (created via an agent identity blueprint), NOT a regular application service principal. You can verify by checking that the service principal has @odata.type: #microsoft.graph.agentIdentity and servicePrincipalType: ServiceIdentity.


    Architecture

    Agent Identity Blueprint (application template)
        │
        ├── Agent Identity (service principal - ServiceIdentity)
        │       │
        │       └── Agent User (user - agentUser) ← 1:1 relationship
        │
        └── Agent Identity Blueprint Principal (service principal in tenant)
    
    ComponentTypeToken ClaimPurpose
    Agent IdentityService Principalidtyp=appBackend/API operations
    Agent UserUser (agentUser)idtyp=userAct as a digital worker in M365

    Step 1: Verify the Agent Identity Exists

    Before creating an agent user, confirm the agent identity is a proper agentIdentity type:

    GET https://graph.microsoft.com/beta/servicePrincipals/{agent-identity-id}
    Authorization: Bearer <token>
    

    Verify the response contains:

    {
      "@odata.type": "#microsoft.graph.agentIdentity",
      "servicePrincipalType": "ServiceIdentity",
      "agentIdentityBlueprintId": "<blueprint-id>"
    }
    

    PowerShell

    Connect-MgGraph -Scopes "Application.Read.All" -TenantId "<tenant>" -UseDeviceCode -NoWelcome
    Invoke-MgGraphRequest -Method GET `
      -Uri "https://graph.microsoft.com/beta/servicePrincipals/<agent-identity-id>" | ConvertTo-Json -Depth 3
    

    Common mistake: Using an app registration's appId or a regular application service principal's id will fail. Only agent identities created from blueprints work.


    Step 2: Create the Agent User

    HTTP Request

    POST https://graph.microsoft.com/beta/users/microsoft.graph.agentUser
    Content-Type: application/json
    Authorization: Bearer <token>
    
    {
      "accountEnabled": true,
      "displayName": "My Agent User",
      "mailNickname": "my-agent-user",
      "userPrincipalName": "[email protected]",
      "identityParentId": "<agent-identity-object-id>"
    }
    

    Required Properties

    PropertyTypeDescription
    accountEnabledBooleantrue to enable the account
    displayNameStringHuman-friendly name
    mailNicknameStringMail alias (no spaces/special chars)
    userPrincipalNameStringUPN — must be unique in the tenant (alias@verified-domain)
    identityParentIdStringObject ID of the parent agent identity

    PowerShell

    Connect-MgGraph -Scopes "User.ReadWrite.All" -TenantId "<tenant>" -UseDeviceCode -NoWelcome
    
    $body = @{
      accountEnabled    = $true
      displayName       = "My Agent User"
      mailNickname      = "my-agent-user"
      userPrincipalName = "[email protected]"
      identityParentId  = "<agent-identity-object-id>"
    } | ConvertTo-Json
    
    Invoke-MgGraphRequest -Method POST `
      -Uri "https://graph.microsoft.com/beta/users/microsoft.graph.agentUser" `
      -Body $body -ContentType "application/json" | ConvertTo-Json -Depth 3
    

    Key Notes

    • No password — agent users cannot have passwords. They authenticate via their parent agent identity's credentials.
    • 1:1 relationship — each agent identity can have at most one agent user. Attempting to create a second returns 400 Bad Request.
    • The userPrincipalName must be unique. Don't reuse an existing user's UPN.

    Step 3: Assign a Manager (Optional)

    Assigning a manager allows the agent user to appear in org charts (e.g., Teams).

    PUT https://graph.microsoft.com/beta/users/{agent-user-id}/manager/$ref
    Content-Type: application/json
    Authorization: Bearer <token>
    
    {
      "@odata.id": "https://graph.microsoft.com/beta/users/{manager-user-id}"
    }
    

    PowerShell

    $managerBody = '{"@odata.id":"https://graph.microsoft.com/beta/users/<manager-user-id>"}'
    Invoke-MgGraphRequest -Method PUT `
      -Uri "https://graph.microsoft.com/beta/users/<agent-user-id>/manager/`$ref" `
      -Body $managerBody -ContentType "application/json"
    

    Step 4: Set Usage Location and Assign Licenses (Optional)

    A license is needed for the agent user to have a mailbox, Teams presence, etc. Usage location must be set first.

    Set Usage Location

    PATCH https://graph.microsoft.com/beta/users/{agent-user-id}
    Content-Type: application/json
    Authorization: Bearer <token>
    
    {
      "usageLocation": "US"
    }
    

    List Available Licenses

    GET https://graph.microsoft.com/beta/subscribedSkus?$select=skuPartNumber,skuId,consumedUnits,prepaidUnits
    Authorization: Bearer <token>
    

    Requires Organization.Read.All permission.

    Assign a License

    POST https://graph.microsoft.com/beta/users/{agent-user-id}/assignLicense
    Content-Type: application/json
    Authorization: Bearer <token>
    
    {
      "addLicenses": [
        { "skuId": "<sku-id>" }
      ],
      "removeLicenses": []
    }
    

    PowerShell (all in one)

    Connect-MgGraph -Scopes "User.ReadWrite.All","Organization.Read.All" -TenantId "<tenant>" -NoWelcome
    
    # Set usage location
    Invoke-MgGraphRequest -Method PATCH `
      -Uri "https://graph.microsoft.com/beta/users/<agent-user-id>" `
      -Body '{"usageLocation":"US"}' -ContentType "application/json"
    
    # Assign license
    $licenseBody = '{"addLicenses":[{"skuId":"<sku-id>"}],"removeLicenses":[]}'
    Invoke-MgGraphRequest -Method POST `
      -Uri "https://graph.microsoft.com/beta/users/<agent-user-id>/assignLicense" `
      -Body $licenseBody -ContentType "application/json"
    

    Tip: You can also assign licenses via the Entra admin center under Identity → Users → All users → select the agent user → Licenses and apps.


    Provisioning Times

    ServiceEstimated Time
    Exchange mailbox5–30 minutes
    Teams availability15 min – 24 hours
    Org chart / People searchUp to 24–48 hours
    SharePoint / OneDrive5–30 minutes
    Global Address ListUp to 24 hours

    Agent User Capabilities

    • ✅ Added to Microsoft Entra groups (including dynamic groups)
    • ✅ Access user-only APIs (idtyp=user tokens)
    • ✅ Own a mailbox, calendar, and contacts
    • ✅ Participate in Teams chats and channels
    • ✅ Appear in org charts and People search
    • ✅ Added to administrative units
    • ✅ Assigned licenses

    Agent User Security Constraints

    • ❌ Cannot have passwords, passkeys, or interactive sign-in
    • ❌ Cannot be assigned privileged admin roles
    • ❌ Cannot be added to role-assignable groups
    • ❌ Permissions similar to guest users by default
    • ❌ Custom role assignment not available

    Troubleshooting

    ErrorCauseFix
    Agent user IdentityParent does not existidentityParentId points to a non-existent or non-agent-identity objectVerify the ID is an agentIdentity service principal, not a regular app
    400 Bad Request (identityParentId already linked)The agent identity already has an agent userEach agent identity supports only one agent user
    409 Conflict on UPNThe userPrincipalName is already takenUse a unique UPN
    License assignment failsUsage location not setSet usageLocation before assigning licenses

    References