Skip to main content
Glama
@beyondidentity/mcp

@beyondidentity/mcp

Official

@beyondidentity/mcp

npm version CI

An MCP (Model Context Protocol) server that gives AI agents direct access to the Beyond Identity API — no admin panel required. Agents can manage identities, groups, applications, SSO configurations, credentials, and every other Beyond Identity resource through natural tool calls.

The server auto-detects which Beyond Identity platform you're using from your API key and registers the appropriate tools:

  • Secure Access (v1): 104 tools for the modern platform

  • Secure Workforce (v0): 35 tools for the legacy platform

Quick Start

Add the server to your MCP client configuration:

{
  "mcpServers": {
    "beyondidentity": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@beyondidentity/mcp"],
      "env": {
        "API_KEY": "your-jwt-api-key"
      }
    }
  }
}

For EU region tenants:

{
  "mcpServers": {
    "beyondidentity": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@beyondidentity/mcp"],
      "env": {
        "API_KEY": "your-jwt-api-key",
        "REGION": "EU"
      }
    }
  }
}

That's it. The server extracts your tenant ID from the JWT and determines the correct platform and base URL automatically.

Related MCP server: Britive MCP Server

Environment Variables

Variable

Required

Default

Description

API_KEY

Yes

—

Beyond Identity API key (JWT). Obtained from the admin console under Settings > API Access.

REGION

No

US

US or EU. Determines the API base URL.

BASE_URL

No

(computed from platform + region)

Override the API host. Use for non-production environments (e.g. staging, local mock). When set, takes precedence over REGION.

How It Works

Platform Detection

The server inspects your JWT at startup to determine which platform to target:

  • If the token contains a bi_t claim, you're on Secure Access (v1). The bi_t value is your tenant ID, and the server hits api-us.beyondidentity.com or api-eu.beyondidentity.com.

  • If there is no bi_t claim, the server falls back to the sub claim and targets Secure Workforce (v0) at api.byndid.com or api-eu.byndid.com.

Only one set of tools is registered per session. Agents never see version numbers or need to think about which platform they're on.

Tool Discovery

With 100+ possible tools, agents need a way to find the right one. The search_tools tool accepts a natural language query and returns the most relevant tools:

search_tools("add a user to a group")
→ add_group_members, create_identity, list_groups, ...

It uses keyword matching, synonym expansion (user matches identity, app matches application, cred matches credential/passkey), and CRUD verb detection (create matches POST endpoints, delete matches DELETE endpoints).

Automatic Parameter Injection

On the v1 platform, every API path looks like /v1/tenants/{tenant_id}/realms/{realm_id}/.... The server injects tenant_id automatically from the JWT — agents never provide it. The realm_id is a required parameter on realm-scoped tools; agents call list_realms first to discover available realms.

On v0, paths are simpler (/v2/...) with no tenant or realm in the URL — the token handles tenant scoping.

Error Handling

The server validates your API key at startup with clear messages for common problems:

  • Not a JWT (wrong segment count)

  • Corrupted payload (bad base64 or invalid JSON)

  • Missing expected claims (bi_t or sub)

  • Invalid region value

At runtime, API errors are returned as structured tool results with HTTP status codes and error details, not thrown as exceptions that crash the conversation.

Available Tools

Secure Access (v1) — 104 tools

Tool

Description

get_tenant

Retrieve an existing tenant

update_tenant

Patch a tenant

Tool

Description

list_realms

List realms for a tenant

create_realm

Create a new realm

get_realm

Retrieve an existing realm

update_realm

Patch a realm

delete_realm

Delete a realm

Tool

Description

list_groups

List groups for a realm

create_group

Create a new group

get_group

Retrieve an existing group

update_group

Patch a group

delete_group

Delete a group

add_group_members

Add members to a group

delete_group_members

Delete members from a group

list_group_members

List members for a group

list_group_roles

List role memberships for a group

Tool

Description

list_identities

List identities for a realm

create_identity

Create a new identity

get_identity

Retrieve an existing identity

update_identity

Patch an identity

delete_identity

Delete an identity

batch_delete_identities

Batch delete identities

list_identity_groups

List group memberships for an identity

list_identity_roles

List role memberships for an identity

Tool

Description

list_roles

List roles for a resource server

create_role

Create a new role

get_role

Retrieve an existing role

update_role

Patch a role

delete_role

Delete a role

add_role_members

Assign members to a role

delete_role_members

Unassign members from a role

list_role_members

List members for a role

add_role_scopes

Assign scopes to a role

delete_role_scopes

Unassign scopes from a role

list_role_scopes

List scopes for a role

Tool

Description

list_credentials

List credentials for an identity

get_credential

Retrieve an existing credential

revoke_credential

Revoke a credential

Tool

Description

list_credential_binding_jobs

List credential binding jobs for an identity

create_credential_binding_job

Create a new credential binding job

get_credential_binding_job

Retrieve an existing credential binding job

set_credential_binding_job_revoked

Revoke an active credential binding job

create_batch_credential_binding_job

Create a new batch credential binding job

get_batch_credential_binding_job

Retrieve an existing batch credential binding job

list_batch_credential_binding_job_results

List results of a batch credential binding job

Tool

Description

create_theme

Create a new theme

get_active_theme

Get the active theme

get_theme

Retrieve an existing theme

update_theme

Patch a theme

Tool

Description

list_applications

List applications for a realm

create_application

Create a new application

get_application

Retrieve an existing application

update_application

Patch an application

delete_application

Delete an application

Tool

Description

list_authenticator_configs

List authenticator configurations for a realm

create_authenticator_config

Create a new authenticator configuration

get_authenticator_config

Retrieve an existing authenticator configuration

update_authenticator_config

Patch an authenticator configuration

delete_authenticator_config

Delete an authenticator configuration

Tool

Description

list_resource_servers

List resource servers for a realm

create_resource_server

Create a new resource server

get_resource_server

Retrieve an existing resource server

update_resource_server

Patch a resource server

delete_resource_server

Delete a resource server

Tool

Description

list_tokens

List tokens

revoke_token

Revoke a token

Tool

Description

list_sso_configs

List SSO configs for a realm

create_sso_config

Create a new SSO config

get_sso_config

Retrieve an existing SSO config

update_sso_config

Update an SSO config

delete_sso_config

Delete an SSO config

add_identities_to_sso_config

Associate identities with an SSO config

delete_identities_from_sso_config

Delete identities from an SSO config

list_identities_for_sso_config

List identities associated with an SSO config

identity_to_sso_config_check

Check if an identity is assigned to an SSO config

list_sso_configs_for_identity

List SSO configs associated with an identity

add_groups_to_sso_config

Associate groups with an SSO config

delete_groups_from_sso_config

Delete groups from an SSO config

list_groups_for_sso_config

List groups associated with an SSO config

list_sso_configs_for_group

List SSO configs associated with a group

sso_is_group_assigned

Check if groups are associated with an SSO config

application_id_to_sso_config_id

Get the SSO config ID for an application

test_sso_config

Test an SSO config

Tool

Description

list_identity_providers

List identity providers by realm

create_identity_provider

Create a new identity provider

get_identity_provider

Retrieve an identity provider

update_identity_provider

Update an identity provider

delete_identity_provider

Delete an identity provider

Tool

Description

get_flow_type_config

Get flow type configuration

update_flow_type_config

Update flow type configuration

Tool

Description

scim_list_users

List all SCIM users

scim_create_user

Create a new SCIM user

scim_get_user

Retrieve an existing SCIM user

scim_replace_user

Replace a SCIM user

scim_update_user

Patch a SCIM user

scim_delete_user

Delete a SCIM user

scim_list_groups

List all SCIM groups

scim_create_group

Create a new SCIM group

scim_get_group

Retrieve an existing SCIM group

scim_update_group

Patch a SCIM group

scim_delete_group

Delete a SCIM group

list_resource_types

List all SCIM resource types

list_schemas

List all SCIM schemas

get_service_provider_config

Retrieve the SCIM service provider configuration

Secure Workforce (v0) — 35 tools

Tool

Description

list_groups

List all groups for a tenant

create_group

Create a new group

get_groups

Retrieve an existing group

update_group

Patch a group

delete_group

Delete a group

list_group_users

List all users for a group

add_group_users

Add users to a group

delete_group_users

Delete users from a group

Tool

Description

list_users

List all users for a tenant

create_user

Create a new user

get_user

Retrieve an existing user

update_user

Update a user

delete_user

Delete a user

list_user_groups

List all groups for a user

Tool

Description

create_binding_job

Create a new credential binding job

get_binding_job

Get a credential binding job

Tool

Description

list_passkeys

List passkeys

delete_passkey

Delete a passkey

list_passkey_tags

List passkey tags

set_passkey_tags

Set passkey tags

Tool

Description

retire_tenant_issuer

Retire the intermediate tenant certificate

Tool

Description

scim_list_users

List all SCIM users

scim_create_user

Create a new SCIM user

scim_get_user

Retrieve an existing SCIM user

scim_replace_user

Replace a SCIM user

scim_update_user

Patch a SCIM user

scim_delete_user

Delete a SCIM user

scim_list_groups

List all SCIM groups

scim_create_group

Create a new SCIM group

scim_get_group

Retrieve an existing SCIM group

scim_update_group

Patch a SCIM group

scim_delete_group

Delete a SCIM group

list_resource_types

List all SCIM resource types

list_schemas

List all SCIM schemas

get_service_provider_config

Retrieve the SCIM service provider configuration

Project Architecture

bi-mcp/
├── openapi.yaml              # Secure Access (v1) OpenAPI spec
├── openapi-v0.yaml           # Secure Workforce (v0) OpenAPI spec
├── package.json
├── tsconfig.json
├── scripts/
│   └── generate.ts           # Reads both specs, emits tool code
├── src/
│   ├── index.ts              # Entry point — detects platform, registers tools
│   ├── config.ts             # JWT validation, platform detection, region routing
│   ├── client.ts             # HTTP client with auth and path param injection
│   ├── search.ts             # search_tools implementation
│   ├── types.ts              # Shared types (Platform, Region, Config, ApiError, ToolMeta)
│   └── generated/            # Auto-generated — do not edit
│       ├── v1-tools.ts       # 104 Secure Access tool registrations
│       ├── v1-registry.ts    # Tool metadata for v1 search
│       ├── v0-tools.ts       # 35 Secure Workforce tool registrations
│       └── v0-registry.ts    # Tool metadata for v0 search
└── dist/                     # Compiled JS (gitignored)

Code Generation

All tool definitions and HTTP handlers are auto-generated from the OpenAPI specifications. The generator (scripts/generate.ts) does the following:

  1. Parses both YAML specs and dereferences all $ref pointers

  2. Extracts every operation (path + HTTP method + operationId)

  3. Converts each operationId to a snake_case tool name

  4. Builds Zod input schemas from the OpenAPI request parameters and body definitions

  5. Generates tool handler functions that call the ApiClient with the correct method, path, and parameters

  6. Annotates read-only tools (GET) and destructive tools (DELETE) for MCP clients that surface this information

To regenerate after spec changes:

npm run generate

The generated files are committed to the repository so consumers don't need to run the generator themselves.

HTTP Client

The ApiClient class (src/client.ts) handles:

  • Bearer token authentication on every request

  • Path parameter substitution — replaces {tenant_id}, {realm_id}, {identity_id}, etc. in URL templates

  • Tenant ID injection — on v1, the tenant ID from the JWT is inserted into every path automatically

  • Query parameter serialization — optional params are omitted, not sent as empty strings

  • Error normalization — HTTP errors are caught and returned as structured ApiError objects with status code, error code, and message

Development

# Install dependencies
npm install --ignore-scripts

# Download fresh OpenAPI specs
curl -s https://developer.beyondidentity.com/api/v1/openapi.yaml -o openapi.yaml
curl -s https://docs.beyondidentity.com/api/v0/openapi.yaml -o openapi-v0.yaml

# Regenerate tool code from specs.
# Internally runs scripts/patch-spec.ts first, which applies known local
# workarounds for confirmed bugs in the upstream specs (e.g. SCIM body
# wrapping, /scim/v2/Groups/ trailing slash). The patch list lives in
# scripts/spec-patches.ts and is idempotent — re-running is safe.
npm run generate

# Type-check
npx tsc --noEmit

# Full build (generate + compile)
npm run build

# Run in development mode
API_KEY="your-key" npm run dev

# Run compiled build
API_KEY="your-key" npm start

API Documentation

Local Development MCP Config

To use a local clone of this repo instead of the published npm package, point your MCP client at the TypeScript source directly:

{
  "mcpServers": {
    "beyondidentity": {
      "type": "stdio",
      "command": "npx",
      "args": ["tsx", "/path/to/bi-mcp/src/index.ts"],
      "env": {
        "API_KEY": "your-jwt-api-key"
      }
    }
  }
}

This runs the server from source via tsx — no build step required. Changes to src/ take effect immediately on the next MCP session. To point at a non-production environment, add BASE_URL:

{
  "mcpServers": {
    "beyondidentity": {
      "type": "stdio",
      "command": "npx",
      "args": ["tsx", "/path/to/bi-mcp/src/index.ts"],
      "env": {
        "API_KEY": "your-jwt-api-key",
        "BASE_URL": "http://localhost:8021"
      }
    }
  }
}

Available Tools

36 tools
add_group_usersA

Add 1–1000 users to a group. Provide an array of user IDs. Requires the group to exist (use list_groups or create_group first). All-or-nothing: if any user ID is invalid, the entire operation fails.

Inputs: group_id (required), id, user_ids.

create_binding_jobB

Create a credential binding job to provision a new passkey for a user. Specify the user_id and delivery method. The binding link is sent to the user or returned directly depending on the delivery method. Use list_users to find the user_id first.

Inputs: binding_job (required), ttl_seconds.

create_groupA

Create a new group. Requires display_name. Optionally include a description. Returns the new group with an auto-generated id. The group starts empty — use add_group_users to add members.

Inputs: group (required).

create_userB

Create a new user. Requires email, user_name, and display_name. Both email and username must be unique within the tenant (409 if duplicate). Returns the new user with an auto-generated id.

Inputs: user (required).

delete_groupA
Destructive

Permanently delete a group. The group must have NO members or the request fails with 409. Remove all members with delete_group_users first. This cannot be undone.

Inputs: group_id (required).

delete_group_usersA

Remove 1–1000 users from a group. Provide an array of user IDs. All-or-nothing: if any user ID is invalid, the entire operation fails.

Inputs: group_id (required), id, user_ids.

delete_passkeyA
Destructive

Permanently delete a passkey by passkey_id. The user will no longer be able to authenticate with this passkey. This cannot be undone. Use list_passkeys to find passkey_ids.

Inputs: passkey_id (required).

delete_userA
Destructive

Permanently delete a user. Removes the user from all group memberships. This cannot be undone.

Inputs: user_id (required).

get_binding_jobA
Read-only

Retrieve the status of a credential binding job by binding_job_id. Shows the current state of the passkey provisioning process (e.g. link sent, completed, expired, failed).

Inputs: binding_job_id (required).

get_groupsA
Read-only

Retrieve a specific group by group_id. Returns the group object including display_name, description, and timestamps. Use list_groups to discover group_ids.

Inputs: group_id (required).

get_service_provider_configA
Read-only

Get the SCIM service provider configuration describing server capabilities: authentication, filtering, patch support, and max results (1000). This is a fixed server-capability endpoint.

Inputs: no named parameters.

get_userA
Read-only

Retrieve a specific user by user_id. Returns the full user object including email, username, display_name, status, and timestamps. Use list_users to discover user_ids.

Inputs: user_id (required).

list_groupsB
Read-only

List all groups for the tenant. Returns group objects with pagination (page_size, skip, filter, order_by). Groups are logical collections of users used for access control and organizational purposes.

Inputs: skip, filter, order_by, page_size.

list_group_usersA
Read-only

List all users that are members of a group. Returns full user objects with pagination. Requires group_id — use list_groups to discover groups.

Inputs: group_id (required), skip, filter, order_by, +1 more.

list_passkeysA
Read-only

List all passkeys across the tenant. Returns passkey objects with state, type, and associated user info. Supports pagination and filtering. Passkeys are the cryptographic credentials users use to authenticate.

Inputs: skip, filter, order_by, page_size.

list_passkey_tagsA
Read-only

List all tags associated with a passkey. Tags are key-value metadata attached to passkeys for organizational purposes. Requires passkey_id — use list_passkeys to discover passkeys.

Inputs: passkey_id (required).

list_resource_typesA
Read-only

List SCIM resource types supported by this server (User and Group). Returns metadata describing schemas, endpoints, and supported operations. This is a fixed server-capability endpoint.

Inputs: no named parameters.

list_schemasA
Read-only

List all SCIM schemas supported by this server, including core schemas and Beyond Identity extensions. This is a fixed server-capability endpoint.

Inputs: no named parameters.

list_user_groupsA
Read-only

List all groups a user belongs to. Returns full group objects with pagination. Requires user_id — use list_users to find users.

Inputs: user_id (required), skip, page_size.

list_usersB
Read-only

List all users for the tenant. Returns user objects with pagination (page_size, skip, filter, order_by). Supports filtering by email, username, and other attributes.

Inputs: skip, filter, order_by, page_size.

retire_tenant_issuerA

Retire the intermediate tenant certificate used for device credential signing. This is a sensitive operation — once retired, the old certificate can no longer issue new credentials. Existing credentials signed by the old certificate remain valid until they expire.

Inputs: body.

scim_create_groupA

Create a group via SCIM. Requires displayName. Cannot use reserved permission group names. Optionally include members and description. All member IDs must reference existing users.

Inputs: schemas (required), displayName (required), members, urn_scim_schemas_extension_byndid_1.0_Group.

scim_create_userB

Create a user via SCIM. Requires externalId, userName, displayName, active, name (givenName, familyName), and emails (at least one primary). On conflict (duplicate externalId/userName), the existing user is reactivated instead of failing.

Inputs: active (required), emails (required), schemas (required), userName (required), +4 more.

scim_delete_groupA
Destructive

Delete a SCIM group. Cannot delete reserved permission groups. Automatically removes the group from all member users.

Inputs: group_id (required).

scim_delete_userA
Destructive

Delete a SCIM user. Removes the user from all groups. May be soft or hard delete depending on configuration.

Inputs: user_id (required).

scim_get_groupA
Read-only

Retrieve a specific SCIM group by group_id. Returns the full SCIM Group resource including members array.

Inputs: group_id (required).

scim_get_userB
Read-only

Retrieve a specific SCIM user by user_id. Returns the full SCIM User resource with all attributes.

Inputs: user_id (required).

scim_list_groupsA
Read-only

List groups via the SCIM v2.0 protocol. Returns Group resources with displayName, externalId, members array, and Beyond Identity extensions. Permission groups cannot be created or modified via SCIM.

Inputs: count, filter, startIndex.

scim_list_usersA
Read-only

List users via the SCIM v2.0 protocol. Supports SCIM filtering syntax and pagination (startIndex, count). Max 1000 results per page. Returns SCIM User resources with standard and extension attributes.

Inputs: count, filter, startIndex.

scim_replace_userA

Replace a SCIM user entirely (PUT semantics). All required fields must be provided — this is not a partial update. Uses ETag-based optimistic locking to prevent concurrent update conflicts.

Inputs: schemas (required), user_id (required), meta, name, +6 more.

scim_update_groupC

Partially update a SCIM group via PATCH operations. Supports adding/removing members subject to a max batch size limit.

Inputs: schemas (required), group_id (required), Operations (required).

scim_update_userB

Partially update a SCIM user via PATCH operations (add, remove, replace). Operations are executed in order. Supports optimistic locking via version headers.

Inputs: schemas (required), user_id (required), Operations (required).

search_toolsA

Search all available Beyond Identity API tools by keyword or natural language query. Use this to discover which tools are available for a task. Example queries: 'add user to group', 'list applications', 'manage SSO'.

Inputs: query (required).

set_passkey_tagsA

Set tags on a passkey, replacing all existing tags. Tags are key-value metadata. Uses PUT semantics — provide the complete set of desired tags; any existing tags not included will be removed.

Inputs: tags (required), passkey_id (required).

update_groupB

Update attributes of a group (display_name, description). Uses PATCH semantics — omitted fields unchanged. Returns the updated group object.

Inputs: group (required), group_id (required).

update_userA

Update attributes of a user. Uses PATCH semantics — omitted fields unchanged. Returns 409 if updated email or username conflicts with an existing user.

Inputs: user (required), user_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 36 tools

    Disambiguation2/5

    The tool set contains many overlapping operations: users can be managed via native tools (create_user, update_user, delete_user) or SCIM tools (scim_create_user, scim_update_user, scim_delete_user); similarly for groups. An agent cannot easily tell when to use one versus the other, and there is no guidance in the descriptions. This creates significant ambiguity and risk of misselection.

    Naming Consistency2/5

    Most tools follow a verb_noun pattern (e.g., create_user, list_groups), but there are several deviations: some use get_ instead of list_ (get_groups, get_user), and the SCIM tools are prefixed with scim_ while others are not. Also, 'add_group_users' and 'delete_group_users' are less predictable. The mix of prefixes and inconsistent use of get/list reduces consistency.

    Tool Count3/5

    With 36 tools, the set is quite large and includes a duplicate SCIM and native API for similar operations, which bloats the surface. However, the domain (identity management with users, groups, passkeys, SCIM) is broad enough that many tools are justified. It borderline exceeds a manageable count, but each tool has a clear purpose.

    Completeness3/5

    The surface covers core CRUD for users, groups, passkeys, and SCIM resources, but there are notable gaps: no tool to update a passkey (e.g., rename or change state), no tool to manage applications or SSO connections despite being mentioned in search examples ('list applications', 'manage SSO'). Also, there is no explicit tool for listing or managing passkey bindings beyond creation and status retrieval. These gaps could hinder some workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents and users to interact with the Britive platform for dynamic access, query configurations, reporting, and access activity.
      1
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables management of BeyondTrust Endpoint Privilege Management (EPM) through natural language, supporting policy, computer, user, group management, file inspection, audit monitoring, and admin access requests.
      1
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables LLM agents to manage Okta organizations through the Okta Admin Management APIs, supporting user provisioning, group management, and more via natural language.
      Apache 2.0