Skip to main content
Glama
takleb3rry

Zitadel MCP

by takleb3rry

Zitadel MCP Server

An MCP (Model Context Protocol) server for Zitadel identity management. Manage users, projects, applications, roles, and service accounts through natural language from AI tools like Claude Code.

"Provision jane@example.com as an Admin." — One tool call: creates the user, assigns the admin project role (v2 authorization), and grants ORG_USER_MANAGER so she can manage other users — no Super Admin required.

Tools (37)

Category

Tool

Description

Users

zitadel_list_users

List/search users

zitadel_get_user

Get user details

zitadel_create_user

Create user (sends invite email; optional client-supplied userId)

zitadel_deactivate_user

Deactivate user

zitadel_reactivate_user

Reactivate user

zitadel_lock_user

Lock user

zitadel_unlock_user

Unlock user

zitadel_delete_user

Permanently delete user

Projects

zitadel_list_projects

List projects

zitadel_get_project

Get project details

zitadel_create_project

Create project

Applications

zitadel_list_apps

List apps in a project

zitadel_get_app

Get app details + Client ID

zitadel_create_oidc_app

Create OIDC application (incl. grantTypes / responseTypes / accessTokenType)

zitadel_update_app

Update app (redirect URIs, accessTokenType, etc.)

Roles

zitadel_list_project_roles

List roles in a project

zitadel_create_project_role

Create a role (standardized: admin/standard)

zitadel_list_user_grants

List user's role grants

zitadel_create_user_grant

Assign project roles (v2 authorization; flags off-vocabulary drift)

zitadel_remove_user_grant

Remove role grant

Org Managers

zitadel_list_org_manager_roles

List supported manager roles (ORG_OWNER, ORG_USER_MANAGER, …)

zitadel_list_org_managers

List who holds manager grants (filter by role)

zitadel_grant_org_manager

Grant manager role(s) (default ORG_USER_MANAGER); idempotent

zitadel_revoke_org_manager

Revoke manager role(s); guards the last ORG_OWNER

Provisioning

zitadel_provision_user

Atomic + idempotent: create user + assign admin/standard + (for Admins) ORG_USER_MANAGER

zitadel_offboard_user

Remove role + revoke manager + deactivate; guards last-Admin & self-demotion

Service Accounts

zitadel_create_service_user

Create machine user

zitadel_create_service_user_key

Generate key pair

zitadel_list_service_user_keys

List keys (metadata only)

Organizations

zitadel_get_org

Get current org details

Login Policy

zitadel_get_login_policy

Get the org login policy (self-registration on/off, custom vs. inherited)

zitadel_set_self_registration

Enable/disable self-registration (allowRegister) for the org — idempotent. Opt-in: requires ZITADEL_ENABLE_LOGIN_POLICY_WRITE=true

Login Texts (Login V2)

zitadel_get_hosted_login_translation

Read the new hosted-login (Login V2) text overrides for a locale — merged effective file, or onlyOverrides for this level's stored keys

zitadel_set_hosted_login_translation

Override Login V2 texts for a locale (Settings v2 API) — pass flat dot-path keys mirroring apps/login/locales/<locale>.json; merges onto shipped defaults, idempotent

Utility

zitadel_get_auth_config

Get .env.local template for an app

Portal

portal_register_app

Register app in portal DB

portal_setup_full_app

One-click: Zitadel + portal setup

Portal tools (portal_*) are only available when PORTAL_DATABASE_URL is configured.

zitadel_set_self_registration is only available when ZITADEL_ENABLE_LOGIN_POLICY_WRITE=true. It is off by default because enabling self-registration opens the organization to public signup for every application whose login resolves to that org, and — unlike every other write tool here — the change leaves behind no user, grant, or app record that would make it noticeable. The read-only zitadel_get_login_policy is always available.

Two-role model & no-super-admin (Renewal Initiatives SSO)

The provisioning tools implement a standardized RBAC model for the core apps:

  • Two project (business) roles only: admin and standard — these land in the OIDC token and gate what a user can do in the apps. The provisioning tools refuse any other key to prevent drift.

  • No Super Admin: every Admin also receives an org-level ORG_USER_MANAGER grant (a manager role — administers Zitadel itself, not in the token), so any Admin can create/manage any user, including other Admins. Keep ≥2 ORG_OWNER break-glass accounts for org configuration.

  • Role assignment prefers the v2 AuthorizationService (POST /v2/authorizations) and automatically falls back to v1 user-grants if that endpoint is unavailable on the instance (some Zitadel Cloud versions return 404). Org-manager grants use the Management v1 org-member API.

Login texts: Login V2 vs. the legacy Custom Login Texts

Zitadel has two login UIs with two unrelated text mechanisms — mixing them up is a common dead-end:

  • Login V2 (the current default — instance feature loginV2.required, or per-app loginVersion.loginV2) is the TypeScript/hosted login. Its strings live in the login app's i18n bundles (apps/login/locales/<lang>.json in zitadel/zitadel). Override individual keys with zitadel_set_hosted_login_translation (Settings v2 API); overrides merge onto the shipped defaults key-by-key, so upstream fixes to untouched keys still flow through.

  • Login V1 (legacy Angular login) reads the Management API Custom Login Texts (/management/v1/text/login/{lang}). Login V2 ignores those entirely (zitadel #8608), so this server deliberately does not wrap them.

Practical example — the confusing wrong-password message "Sitzung für Benutzer konnte nicht erstellt werden" is the Login V2 key password.errors.couldNotCreateSessionForUser (fallback when the password-check error carries no attempt counter). Fix it with:

zitadel_set_hosted_login_translation({
  locale: "de",
  translations: {
    "password.errors.couldNotCreateSessionForUser": "Benutzername oder Passwort falsch. Bitte versuchen Sie es erneut.",
    "loginname.errors.couldNotCreateSession": "Benutzername oder Passwort falsch. Bitte versuchen Sie es erneut."
  }
})

Related MCP server: vibelogin-mcp

Prerequisites

  1. A Zitadel instance (Cloud or self-hosted)

  2. A service account with Org Owner or IAM Admin role

  3. A JSON key for the service account

Creating a Service Account

  1. In the Zitadel Console, go to Users > Service Users > New

  2. Give it a name (e.g., mcp-admin) and select Bearer token type

  3. Go to the service user's Keys tab > New > JSON

  4. Save the downloaded key file — you'll need the userId, keyId, and base64-encoded key

  5. Grant the service account the Org Owner role under Organization > Authorizations

Setup

git clone https://github.com/takleb3rry/zitadel-mcp.git
cd zitadel-mcp
npm install
npm run build

Configuration

Add the server to your MCP client config. The JSON block below works for both options:

  • Global (all projects): ~/.claude.json under the "mcpServers" key

  • Per-project: .mcp.json in the project root

{
  "mcpServers": {
    "zitadel": {
      "command": "node",
      "args": ["/path/to/zitadel-mcp/build/index.js"],
      "env": {
        "ZITADEL_ISSUER": "https://your-instance.zitadel.cloud",
        "ZITADEL_SERVICE_ACCOUNT_USER_ID": "...",
        "ZITADEL_SERVICE_ACCOUNT_KEY_ID": "...",
        "ZITADEL_SERVICE_ACCOUNT_PRIVATE_KEY": "...",
        "ZITADEL_ORG_ID": "...",
        "ZITADEL_PROJECT_ID": "..."
      }
    }
  }
}

Restart Claude Code after adding the config. The Zitadel tools will appear automatically.

To keep secrets out of the MCP client config, omit the env block and put the variables in a gitignored .env file instead. The server reads the file named by DOTENV_CONFIG_PATH if set, then the .env in the repo root. Variables already present in the process environment (e.g. from an env block) take precedence over both. DOTENV_CONFIG_PATH is what makes a globally installed binary work without machine-specific paths:

{
  "mcpServers": {
    "zitadel": {
      "command": "zitadel-mcp",
      "env": { "DOTENV_CONFIG_PATH": "/home/me/.config/zitadel-mcp/.env" }
    }
  }
}

Environment Variables

Variable

Required

Description

ZITADEL_ISSUER

Yes

Zitadel instance URL

ZITADEL_SERVICE_ACCOUNT_USER_ID

Yes

Service account user ID

ZITADEL_SERVICE_ACCOUNT_KEY_ID

Yes

Key ID from the JSON key file

ZITADEL_SERVICE_ACCOUNT_PRIVATE_KEY

Yes

Base64-encoded RSA private key (the key field from the downloaded JSON)

ZITADEL_ORG_ID

Yes

Organization ID

ZITADEL_PROJECT_ID

No

Default project ID for role operations

PORTAL_DATABASE_URL

No

Postgres connection string (enables portal tools)

ZITADEL_ENABLE_LOGIN_POLICY_WRITE

No

Set true to expose zitadel_set_self_registration (default: off)

LOG_LEVEL

No

DEBUG, INFO, WARN, ERROR (default: INFO)

DOTENV_CONFIG_PATH

No

Path of a .env file to load the variables above from (read before the repo-root .env)

Security

This server has admin-level access to your Zitadel instance. Understand what that means before using it:

  • The service account needs org-level management rights. Empirically (Zitadel Cloud, verified 2026-06): ORG_USER_MANAGER is enough to create users and assign existing project roles, but ORG_OWNER is required to create project roles, manage org-manager grants (the no-super-admin pattern), and manage applications. For the full provisioning workload, give the service account ORG_OWNER; human Admins can stay at ORG_USER_MANAGER. Keep the key in a gitignored .env (not a shared dotfile) and use ZITADEL_READ_ONLY=true for non-mutating sessions.

  • When you create an OIDC app (zitadel_create_oidc_app) as a confidential client, the client secret is NOT returned in the tool response (so it never enters the AI conversation). Retrieve it from the Zitadel Console: Project → Apps → Configuration → Regenerate Client Secret.

  • When you generate a service account key (zitadel_create_service_user_key), the private key is written to ~/.zitadel-mcp/keys/ (file mode 600) instead of being returned in the tool response — only the file path appears in the conversation.

  • All tool arguments containing PII (email, name, URLs) are redacted from debug logs. IDs and tool names are still logged.

  • All Zitadel IDs are validated against an alphanumeric format before being used in API paths.

Note for new users: always audit the source yourself (or with your own tooling) before installing any MCP server that gets admin access to your infrastructure — and re-audit every update before applying it. Do not take this README's word for it.

Development

npm run dev    # Run with tsx (hot reload)
npm run build  # Compile TypeScript
npm start      # Run compiled version
npm test       # Run tests

License

MIT

Available Tools

34 tools
zitadel_create_oidc_appA

Create a new OIDC application in a Zitadel project. Returns the Client ID (and Client Secret for confidential clients). Configure redirect URIs, response types, and grant types.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesApplication name
appTypeNoApplication type (default: OIDC_APP_TYPE_WEB)
devModeNoEnable dev mode to allow http:// redirect URIs (default: false)
projectIdYesThe project ID to create the app in
grantTypesNoOAuth grant types (default: [OIDC_GRANT_TYPE_AUTHORIZATION_CODE]). Include OIDC_GRANT_TYPE_REFRESH_TOKEN to issue refresh tokens.
redirectUrisYesOAuth redirect URIs (e.g., ["https://myapp.example.com/api/auth/callback/zitadel"])
responseTypesNoOIDC response types (default: [OIDC_RESPONSE_TYPE_CODE]).
authMethodTypeNoAuth method. Use NONE for PKCE public clients (default: OIDC_AUTH_METHOD_TYPE_NONE)
accessTokenTypeNoAccess token format. OIDC_TOKEN_TYPE_JWT issues self-contained JWTs validatable via JWKS; OIDC_TOKEN_TYPE_BEARER issues opaque reference tokens. Default OIDC_TOKEN_TYPE_BEARER. Use JWT for resource servers that validate tokens locally (e.g., agentgateway).
postLogoutRedirectUrisNoPost-logout redirect URIs (optional)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the return payload — Client ID, and Client Secret only for confidential clients — which is important since no output schema exists and the secret is not retrievable later.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and the return value before the configuration hint. Nothing is padded, though the final sentence largely restates schema content and is the least load-bearing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters and no output schema, the description does the key job of telling the agent what comes back from the call. It omits secondary operational details (duplicate-name behavior, whether the secret is ever re-issuable), but for a creation tool with fully documented parameters this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself carries rich per-parameter documentation (defaults, enum meanings, PKCE guidance for authMethodType, JWT-vs-bearer tradeoffs). The description's third sentence ('Configure redirect URIs, response types, and grant types') only names categories already fully documented in the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new OIDC application in a Zitadel project'), which cleanly separates it from sibling creation tools like zitadel_create_project, zitadel_create_user, and zitadel_create_service_user. The agent knows exactly what object is produced.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is relevant (creating an OIDC app, configuring redirect/grant/response types) but never states when to prefer it over alternatives such as zitadel_create_service_user or zitadel_create_project, nor any prerequisites or when-not conditions. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_create_projectB

Create a new project in Zitadel. Projects contain applications, roles, and grants.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name
projectRoleCheckNoOnly allow users with grants to authenticate (default: false)
projectRoleAssertionNoInclude roles in tokens (default: true)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a non-read-only, non-idempotent, non-destructive operation, which the description aligns with by implying creation (a write). It adds minimal behavioral context beyond annotations—mentioning that projects contain applications, roles, and grants—but doesn't cover aspects like permissions needed, rate limits, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and front-loaded with the core purpose. The second sentence provides useful context without redundancy. It could be slightly improved by integrating usage hints, but it's efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with no output schema and moderate complexity (3 parameters), the description is minimally adequate. It covers the purpose but lacks details on usage, behavioral traits beyond annotations, and output expectations. With annotations providing safety info, it's not incomplete, but gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema. The description doesn't add any semantic details about parameters beyond what's in the schema (e.g., explaining 'projectRoleAssertion' further), but it doesn't need to given the high coverage. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new project') and resource ('in Zitadel'), with additional context about what projects contain. It distinguishes from siblings like 'zitadel_create_user' or 'zitadel_create_oidc_app' by focusing on projects, though it doesn't explicitly contrast with 'zitadel_get_project' or 'zitadel_list_projects'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing admin permissions), compare to sibling tools (e.g., 'zitadel_get_project' for reading), or specify scenarios for project creation (e.g., initial setup vs. adding new projects).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_create_project_roleB
Idempotent

Create a new role in a Zitadel project. For the standardized RBAC model use the keys "admin" or "standard" (see zitadel_provision_user).

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoOptional role group for organization
roleKeyYesRole key. Standardized vocabulary: "admin" or "standard".
projectIdNoThe project ID (uses default project if omitted)
displayNameYesHuman-readable role name

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety/idempotency profile is covered. The description adds no behavioral context of its own — nothing about duplicate role keys, required permissions, or side effects — so it contributes almost nothing beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core action front-loaded and the key convention as supporting detail. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create mutation with 100% schema coverage and annotations handling safety and idempotency, the description is adequate. It is still thin on failure behavior (e.g., duplicate roleKey in an idempotent tool), but the structured fields carry most of the load.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description's note about "admin"/"standard" keys merely repeats the schema's own roleKey description, adding no syntax or format detail beyond it; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (role in a Zitadel project), which clearly separates it from siblings like zitadel_list_project_roles. It does not explicitly name an alternative to differentiate further, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a key-vocabulary convention ("admin" or "standard") and cross-references zitadel_provision_user, which implies when the standardized model applies. However, it never states when to create a custom role instead, nor any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_create_service_userA

Create a new service account (machine user) for API access. Service accounts authenticate via JWT keys, not passwords.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name
userNameYesUnique username for the service account
descriptionNoOptional description of what this service account is used for
accessTokenTypeNoToken type (default: ACCESS_TOKEN_TYPE_BEARER)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-readOnly, non-destructive, non-idempotent operation. The description adds useful behavioral context about authentication method (JWT keys) that isn't captured in annotations, but doesn't disclose other important traits like rate limits, error conditions, or what happens on duplicate userName. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that are front-loaded with the core purpose. Every word earns its place - first sentence states what the tool does, second adds crucial authentication context. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with good annotations (readOnlyHint=false, destructiveHint=false) and comprehensive schema coverage, the description provides adequate context about the tool's purpose and authentication method. However, without an output schema, it doesn't describe what gets returned (e.g., user ID, credentials), leaving a minor gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents all 4 parameters thoroughly. The description doesn't add any parameter-specific semantics beyond what's in the schema (e.g., doesn't explain userName uniqueness constraints or accessTokenType implications). Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Create a new service account') and resource ('machine user for API access'), distinguishing it from sibling tools like 'zitadel_create_user' (regular user) and 'zitadel_create_service_user_key' (key for existing service account). It adds valuable context about authentication method (JWT keys vs passwords).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('for API access', 'authenticate via JWT keys') but doesn't explicitly state when to use this tool versus alternatives like 'zitadel_create_user' or 'zitadel_create_oidc_app'. No guidance on prerequisites, permissions needed, or when-not-to-use scenarios is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_create_service_user_keyA

Generate a new key pair for a service account. The private key is returned ONLY at creation time — save it immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe service account user ID
expirationDateNoOptional expiration date (ISO 8601 format)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a non-readOnly, non-idempotent, non-destructive operation. The description adds valuable behavioral context: it explicitly warns that 'The private key is returned ONLY at creation time — save it immediately,' which is critical for security and operational awareness beyond what annotations provide. However, it doesn't mention rate limits, authentication requirements, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that efficiently conveys the core action and critical warning. Every word earns its place—no fluff or redundancy, and the key behavioral detail is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (a write operation with security implications), lack of output schema, and rich annotations, the description is partially complete. It covers the main action and a crucial behavioral warning but omits details like response format, error handling, or prerequisites. It's adequate but has clear gaps for a tool that generates sensitive credentials.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear parameter documentation in the schema itself. The description doesn't add any parameter-specific details beyond what's in the schema (e.g., it doesn't explain key formats or default behaviors for expirationDate). Baseline score of 3 is appropriate since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Generate a new key pair') and target resource ('for a service account'), distinguishing it from sibling tools like 'zitadel_create_service_user' (creates the account itself) or 'zitadel_list_service_user_keys' (lists existing keys). It goes beyond just restating the name/title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing service account), compare to sibling tools like 'zitadel_list_service_user_keys', or specify scenarios where key generation is appropriate versus other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_create_userA

Create a new human user in Zitadel. An invitation email will be sent automatically so the user can set their password. Optionally supply your own userId for idempotent retries (a re-create then conflicts cleanly).

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address for the new user
userIdNoOptional client-supplied user ID for idempotency (Zitadel generates one if omitted)
lastNameYesLast name
firstNameYesFirst name

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, and the description adds valuable context: an invitation email is sent automatically, and supplying a userId enables idempotent retries with clean conflict behavior. This goes beyond the annotations, which only mark it as a non-destructive write. However, it doesn't mention permission requirements or what happens on conflict beyond the userId case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose, side effect (email), and idempotency detail. Front-loaded with the core action and no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description covers the key behavioral aspects: it's a create operation that sends an email and supports idempotent retries. Missing details on required permissions and what the response contains (e.g., the new user ID) are minor gaps for this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds meaning for userId (idempotency, conflict behavior) beyond the schema's description, but for email, firstName, and lastName it adds nothing beyond what the schema provides. Baseline 3 is appropriate when schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create), resource (human user), and scope (in Zitadel), which distinguishes it from sibling tools like zitadel_create_service_user and zitadel_provision_user. An agent can tell what the tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for creating new human users and mentions the invitation email flow, but it doesn't explicitly state when to use this tool versus alternatives like zitadel_provision_user or zitadel_create_service_user. A clear use case is provided (human user with email invitation), which is better than no guidance, but lacks exclusion criteria or explicit routing to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_create_user_grantA

Assign project roles to a user via the v2 AuthorizationService. Validates that the roles exist in the project before granting. For the standardized two-role model prefer "admin"/"standard"; other keys are allowed but flagged as drift.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe user ID to grant roles to
roleKeysYesArray of role keys to assign (standardized: ["admin"] or ["standard"])
projectIdNoThe project ID (uses default project if omitted)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/non-idempotent/non-destructive profile, so the bar is lower. The description still adds genuine behavior beyond them: pre-grant validation that roles exist in the project and drift-flagging for non-standard keys. It omits what happens on validation failure or duplicate grants, hence 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action before the role-model guidance. Every sentence carries information; the only marginal cost is the internal 'v2 AuthorizationService' reference, which is closer to implementation detail than agent-facing guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter, 100%-covered schema with annotations present and no output schema, this is largely complete: it covers purpose, validation behavior, and role conventions. Error semantics (role not found) and non-idempotency consequences are the remaining gaps but are not essential to invoking it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond it by explaining the consequence of non-standard roleKeys ('allowed but flagged as drift') and reinforcing the admin/standard model. Nice added semantic layer over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Assign project roles to a user' clearly separates it from zitadel_create_project_role (which defines roles) and zitadel_remove_user_grant (which reverses this). The 'v2 AuthorizationService' detail anchors it further. It stops short of explicitly naming a sibling for contrast, keeping it at 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a preference rule for role keys ('prefer admin/standard') but gives no when-to-use context relative to alternatives such as zitadel_grant_org_manager or zitadel_create_project_role, and no prerequisites (permissions, project existence). Usage is implied rather than scoped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_deactivate_userA
DestructiveIdempotent

Deactivate a user account. The user will no longer be able to log in. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe Zitadel user ID to deactivate
confirmNoMust be true to execute. Omit to preview the action.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a destructive, non-read-only, idempotent operation. The description adds valuable context beyond annotations by specifying the behavioral consequence ('The user will no longer be able to log in') and the confirm requirement for execution, which clarifies the tool's safety mechanism and user impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and consequence, followed by a concise prerequisite. Both sentences are essential—the first defines the tool's purpose and effect, and the second specifies a critical usage requirement—with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive user management), rich annotations (destructiveHint, idempotentHint), and full schema coverage, the description is mostly complete. It covers the action, consequence, and a key parameter behavior. However, without an output schema, it does not describe return values or error conditions, leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds some meaning by explaining the purpose of 'confirm' ('Must be true to execute. Omit to preview the action.'), but this is partially redundant with the schema's description. It does not provide additional context for 'userId' beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('deactivate a user account') and the resource ('user'), and distinguishes it from siblings like 'delete_user', 'lock_user', and 'reactivate_user' by specifying the user will no longer be able to log in, which is a distinct state change.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use it (to deactivate a user account so they can't log in) and includes a prerequisite ('Requires confirm: true'), but does not explicitly mention when not to use it or name alternatives like 'delete_user' or 'lock_user' for different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_delete_userA
Destructive

Permanently delete a user. This action cannot be undone. Requires confirm: true. Consider using zitadel_deactivate_user instead (reversible).

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe Zitadel user ID to delete
confirmNoMust be true to execute. Omit to preview the action.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond what annotations provide. While annotations already declare destructiveHint=true, the description emphasizes 'This action cannot be undone' and specifies the confirm parameter requirement. It doesn't contradict annotations but enhances understanding of the tool's irreversible nature and safety mechanism.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, with every sentence earning its place. The first sentence states the core action, the second warns about irreversibility, the third specifies the confirm requirement, and the fourth provides alternative guidance—all in just four sentences with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature and lack of output schema, the description provides strong contextual completeness. It covers the irreversible consequence, confirm requirement, and alternative tool. While it doesn't detail return values (no output schema exists), it adequately addresses the critical aspects needed for safe usage of this high-stakes operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already fully documents both parameters. The description adds minimal semantic context by mentioning 'Requires confirm: true', which slightly clarifies the confirm parameter's purpose beyond the schema's description. This meets the baseline expectation when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('permanently delete a user') and resource ('user'), distinguishing it from sibling tools like 'zitadel_deactivate_user' which is mentioned as an alternative. It goes beyond just restating the name/title by emphasizing the irreversible nature of the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides when to use this tool vs. alternatives by stating 'Consider using zitadel_deactivate_user instead (reversible)', offering clear guidance on when to choose this destructive option over a reversible one. It also specifies a prerequisite with 'Requires confirm: true'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_appA
Read-onlyIdempotent

Get details of a specific application including its Client ID and OIDC configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesThe application ID
projectIdYesThe project ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior, so the description doesn't need to repeat these. It adds value by specifying the type of details returned ('Client ID and OIDC configuration'), which helps the agent understand the output content beyond what annotations provide. No contradictions with annotations are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the key action and details without any wasted words. It directly communicates the tool's purpose and output, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 required parameters, no output schema), the description is reasonably complete. It specifies what details are retrieved, which compensates for the lack of output schema. However, it could be more comprehensive by mentioning potential error cases or linking to sibling tools for better context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents the two parameters ('projectId' and 'appId'). The description doesn't add any additional meaning or context about the parameters beyond what's in the schema, such as format examples or relationships between them, but this is acceptable given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get details') and resource ('specific application'), specifying what information is retrieved ('Client ID and OIDC configuration'). It distinguishes from sibling tools like 'zitadel_list_apps' by focusing on a single application, though it doesn't explicitly contrast with other get tools like 'zitadel_get_project' or 'zitadel_get_user'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when details of a specific application are needed, but it doesn't provide explicit guidance on when to use this tool versus alternatives (e.g., 'zitadel_list_apps' for listing applications or 'zitadel_update_app' for modifications). No exclusions or prerequisites are mentioned, leaving usage context somewhat vague.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_auth_configA
Read-onlyIdempotent

Get the environment variables needed for a new application's .env.local file. Fetches the app details and formats them as ready-to-paste configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesThe application ID
projectIdYesThe project ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a read-only, idempotent, non-destructive operation. The description adds valuable context beyond this by specifying the output format ('ready-to-paste configuration' for .env.local) and the purpose (fetching app details for environment variables), which helps the agent understand the tool's specific behavior and use case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that are front-loaded with the main purpose. Every word earns its place by clearly explaining what the tool does and its specific output format, with no wasted text or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 required parameters, no output schema), the description is mostly complete. It explains the purpose, output format, and context well, but doesn't detail potential errors, authentication requirements, or rate limits, which could be helpful for an agent despite the annotations covering safety aspects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for both parameters ('projectId' and 'appId'). The description doesn't add any additional semantic information about these parameters beyond what the schema provides, so it meets the baseline of 3 for adequate coverage without extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get the environment variables'), the resource ('app details'), and the output format ('formats them as ready-to-paste configuration'). It distinguishes itself from sibling tools like 'zitadel_get_app' by specifying the unique formatting purpose for .env.local files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('for a new application's .env.local file'), but it doesn't explicitly mention when not to use it or name alternatives. For example, it doesn't contrast with 'zitadel_get_app' which might return raw app details without formatting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_hosted_login_translationA
Read-onlyIdempotent

Read the Login V2 (new "hosted login" / TypeScript login) text overrides for a locale, via the Settings v2 API. This is the ONLY text-customization that affects the new login — the legacy Management "Custom Login Texts" do not. By default returns the merged, effective file (your overrides on top of the shipped defaults); pass onlyOverrides=true to see just what is stored at this level. Defaults to the configured org; pass level:"instance" for the whole instance. Override keys mirror apps/login/locales/.json in zitadel/zitadel (e.g. "password.errors.couldNotCreateSessionForUser").

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoScope to read: "organization" (default, the configured ORG_ID) or "instance".
localeNoBCP-47 language tag, e.g. "de", "en", "fr-CH" (default "en").
onlyOverridesNotrue → return only the overrides stored at this level (ignoreInheritance). false (default) → the merged effective file.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: default returns the merged effective file (overrides on top of shipped defaults), onlyOverrides surfaces just the stored level, and level defaults to the configured org with instance as the alternative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then scope, then the merged-vs-overrides distinction, then the key format. Three dense sentences with no filler; slightly long but each clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries some return-format burden, and it does describe the shape of the returned file (merged effective vs stored overrides). For a read-only, well-documented tool this is close to complete, though exact response structure is only implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes further by giving the override-key convention and a concrete example ('password.errors.couldNotCreateSessionForUser') mirroring apps/login/locales/<locale>.json, and by restating the inheritance semantics of onlyOverrides meaningfully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and resource (Login V2 hosted login text overrides for a locale) and explicitly distinguishes the target from the legacy Management 'Custom Login Texts'. An agent can identify this as the read counterpart to set_hosted_login_translation without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains when this is the correct resource ('the ONLY text-customization that affects the new login') and rules out the legacy alternative. It gives context for the parameter branches (onlyOverrides, level) but never names the sibling write tool as the complement, leaving a small routing gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_login_policyA
Read-onlyIdempotent

Get the login policy of the current organization (ZITADEL_ORG_ID), including whether self-registration (allowRegister) is on and whether the policy is inherited from the instance default or a custom org policy.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it tells the agent the read targets the current org and that the result reflects inheritance from the instance default versus a custom org policy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence leads with the verb and resource, with the elaborating clause placed after. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read with no output schema, the description usefully names the key fields returned (allowRegister, inheritance status), which compensates for the missing output schema. It stops short of covering error or empty/null cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no argument syntax the description needs to compensate for. The parenthetical clarifies that org scope is implicit via ZITADEL_ORG_ID rather than a call argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) plus resource (the login policy of the current organization, pinned to ZITADEL_ORG_ID) and enumerates what the policy carries (allowRegister, inherited vs custom). This is distinguishable from the nearest sibling, zitadel_get_auth_config, which concerns a different configuration surface.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never states when to call this tool versus alternatives, nor any preconditions (e.g., required org context or permissions). Only the scope of what is read is implied, with no exclusions or routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_orgA
Read-onlyIdempotent

Get details of the current organization (based on the configured ZITADEL_ORG_ID).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds value by specifying it retrieves details for the 'current organization' based on a configuration, which is useful context not in annotations. However, it doesn't disclose additional behaviors like rate limits, authentication needs, or response format, keeping it at a baseline 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the key information ('Get details of the current organization') and adds necessary context ('based on the configured ZITADEL_ORG_ID'). There is zero waste, and every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, rich annotations (read-only, idempotent, non-destructive), and no output schema, the description is reasonably complete. It explains what the tool does and the context (current organization based on config). However, it could slightly improve by hinting at the return type (e.g., 'details' like name, ID) since there's no output schema, preventing a perfect 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline 4 for not adding unnecessary information. It correctly focuses on the tool's purpose instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get details') and resource ('current organization'), making the purpose understandable. It distinguishes itself from sibling tools like 'zitadel_get_user' or 'zitadel_get_project' by specifying it retrieves organization details. However, it doesn't explicitly contrast with all siblings (e.g., 'zitadel_list_users'), so it's not a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by stating it retrieves 'current organization (based on the configured ZITADEL_ORG_ID)', which implies when to use it—when you need details for the pre-configured organization. It doesn't explicitly mention when not to use it or name alternatives (e.g., for other organizations), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_projectB
Read-onlyIdempotent

Get details of a specific project by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe project ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds no behavioral context beyond what annotations provide, such as authentication needs, rate limits, or error conditions, but it doesn't contradict annotations either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without any fluff or redundancy. It's front-loaded and every word serves a purpose, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple single-parameter input, rich annotations covering safety and idempotency, and lack of output schema, the description is minimally adequate. However, it doesn't explain what 'details' are returned or potential error cases, leaving gaps for a read operation that could benefit from more context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with one parameter ('projectId') fully documented in the schema. The description adds no additional meaning or context about the parameter beyond implying it's required for lookup, so it meets the baseline for high schema coverage without compensating value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get details') and resource ('specific project by its ID'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'zitadel_get_org' or 'zitadel_get_user' beyond mentioning 'project' specifically, which is why it doesn't reach a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'zitadel_list_projects' or other 'get_' tools. It mentions 'by its ID' which implies you need the ID, but doesn't specify prerequisites or contrast with siblings, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_get_userA
Read-onlyIdempotent

Get detailed information about a specific user by their user ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe Zitadel user ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds minimal behavioral context beyond this—it specifies 'detailed information' as the output, which hints at richer data than a basic list, but doesn't elaborate on what details are included, error conditions, or authentication needs. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Get detailed information') and resource ('specific user'), with no wasted words. It directly addresses the tool's purpose without redundancy, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no output schema) and rich annotations covering safety and idempotency, the description is minimally adequate. However, it lacks details on output format (e.g., what 'detailed information' includes), error handling, or authentication requirements, which could help an agent use it more effectively despite the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with one parameter ('userId') fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides—it mentions 'user ID' but doesn't clarify format, examples, or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get detailed information') and resource ('specific user'), making the purpose unambiguous. It distinguishes from sibling tools like 'zitadel_list_users' by specifying retrieval of a single user by ID rather than listing multiple users. However, it doesn't explicitly contrast with other 'get' tools like 'zitadel_get_app' or 'zitadel_get_project' beyond the user focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when detailed user information is needed for a specific ID, but provides no explicit guidance on when to use this versus alternatives like 'zitadel_list_users' for browsing or other 'get' tools for different resources. It mentions the 'user ID' requirement, which is helpful context, but lacks when-not-to-use scenarios or prerequisite conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_grant_org_managerA
Idempotent

Grant org-level manager (administrator) role(s) to a user. For the no-super-admin pattern, grant ORG_USER_MANAGER to every Admin so they can manage any user. Idempotent: merges with any existing manager roles. Defaults to ["ORG_USER_MANAGER"].

ParametersJSON Schema
NameRequiredDescriptionDefault
rolesNoManager role keys. Default ["ORG_USER_MANAGER"] (least-privilege). ORG_OWNER = full org control.
userIdYesThe Zitadel user ID to grant manager role(s) to

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false; the description corroborates and enriches this by explaining the merge semantics ('merges with any existing manager roles'), which tells the agent existing roles are preserved rather than replaced. It omits who is authorized to call it and whether super-admin privileges are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct payload (purpose, usage pattern, idempotency/default), with the core action front-loaded and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers purpose, the common pattern, merge behavior, and defaults. The main remaining gap is caller authorization context (whether the invoking identity needs super-admin rights), which matters for a role-granting tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters, including the default and the meaning of ORG_OWNER. The description's mention of the default and 'ORG_OWNER = full org control' largely restates the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Grant org-level manager (administrator) role(s) to a user'), and the directionality of the verb cleanly separates it from the sibling zitadel_revoke_org_manager and from the read-only zitadel_list_org_manager_roles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage scenario ('For the no-super-admin pattern, grant ORG_USER_MANAGER to every Admin so they can manage any user'), which tells the agent when this tool is the right call. It never names the alternative tools (revoke_org_manager, list_org_manager_roles) or states when NOT to use it, so it stops short of explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_appsB
Read-onlyIdempotent

List all applications in a Zitadel project.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe project ID to list apps for

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds no behavioral context beyond what annotations provide, such as pagination, rate limits, or what 'all applications' means in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple list operation and front-loads the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with good annotations but no output schema, the description is minimally adequate. It states what the tool does but lacks context about return format, pagination, or error conditions that would help the agent use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema fully documents the single parameter 'projectId'. The description adds no additional meaning about the parameter beyond implying it's required for scoping, which is already clear from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all applications') and resource ('in a Zitadel project'), making the purpose immediately understandable. However, it doesn't distinguish this tool from other list tools like 'zitadel_list_projects' or 'zitadel_list_users' beyond specifying the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when not to use it, or how it differs from sibling tools like 'zitadel_get_app' or 'zitadel_update_app'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_org_manager_rolesA
Read-onlyIdempotent

List the org-level manager (administrator) role keys this Zitadel org supports (e.g. ORG_OWNER, ORG_USER_MANAGER, ORG_USER_PERMISSION_EDITOR). Use to confirm the exact keys before granting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds no behavioral context beyond that — it does not note that the result set is static/fixed or how it is returned — so with annotations carrying the load, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the resource and scope, followed by the actionable purpose. Every clause earns its place, including the example keys that make the output concrete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only enumeration tool with annotations covering the safety profile, the description supplies everything needed: what is listed, at what scope, with sample values, and when to call it. Nothing an agent needs before invoking it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-level confusion is possible.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (org-level manager/administrator role keys) with concrete example keys (ORG_OWNER, ORG_USER_MANAGER). The 'org-level' qualifier implicitly separates it from the sibling zitadel_list_project_roles, which covers project scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the use case: 'Use to confirm the exact keys before granting', which ties it to the grant_org_manager workflow. It does not state any when-not condition or name alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_org_managersA
Read-onlyIdempotent

List users who hold org-level manager (administrator) grants, with their manager roles. Optionally filter to a single role key (e.g. ORG_OWNER) to see who holds it.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoOptional manager role key to filter by (e.g. "ORG_OWNER", "ORG_USER_MANAGER")

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds that results include each user's manager roles, which is useful return-content context, but says nothing about pagination, result size, or permission requirements. Adequate but not rich given the low bar set by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler: the first front-loads what is returned, the second covers the optional filter. Nothing is redundant and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one optional parameter and no output schema, the description covers the resource, the returned fields, and the filter behavior. It omits result shape (pagination, ordering, limits), which is a minor gap given the tool's simplicity and its safe annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single 'role' parameter is already fully documented in the schema with examples. The description's mention of the role-key filter and the ORG_OWNER example largely restates the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List users who hold org-level manager (administrator) grants, with their manager roles.' This clearly separates it from the sibling zitadel_list_org_manager_roles, which enumerates role definitions rather than holders. It does not name that sibling explicitly, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the purpose of the optional filter ('to see who holds it'), which implies the use case for a role-scoped query versus listing all managers. However, it never states when to prefer this tool over zitadel_list_user_grants or zitadel_list_org_manager_roles, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_project_rolesB
Read-onlyIdempotent

List all roles defined in a Zitadel project (e.g., "admin", "standard").

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoThe project ID (uses default project if omitted)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered and not contradicted. The description adds nothing beyond that – no note on default-project fallback behavior, result size, or pagination – which is acceptable but minimal given annotations carry the load.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence that front-loads the verb and resource, with the examples earning their place by clarifying what a 'role' means here. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with fully documented schema and annotations covering the safety profile, the description is adequate. The only minor gap is that it does not mention the no-filter scope behavior when projectId is omitted, though the schema states this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents projectId including the 'uses default project if omitted' behavior. The description adds no parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all roles defined in a Zitadel project') and grounds it with example role names. It does not explicitly differentiate itself from the adjacent zitadel_list_org_manager_roles or zitadel_create_project_role, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus related tools such as zitadel_list_org_manager_roles, nor any prerequisites or exclusions. Usage is only implied by the phrase 'defined in a project'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_projectsB
Read-onlyIdempotent

List all projects in the Zitadel organization.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (default: 50)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds no behavioral context beyond this, such as pagination details or rate limits, but doesn't contradict annotations, so it meets the lower bar with minimal added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words, clearly front-loading the purpose. It's appropriately sized for a simple listing tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter), rich annotations covering safety, and no output schema, the description is minimally adequate. However, it lacks details on output format or pagination, which could help an agent use it effectively, leaving room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'limit' fully documented in the schema. The description doesn't add any parameter semantics beyond what the schema provides, so it defaults to the baseline score of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all projects') and resource ('in the Zitadel organization'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'zitadel_list_apps' or 'zitadel_list_users' beyond the resource type, missing explicit sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for listing projects, or compare with similar tools like 'zitadel_get_project' for retrieving a single project, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_service_user_keysA
Read-onlyIdempotent

List existing keys for a service account. Shows key metadata only (not private keys).

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe service account user ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable context by specifying that it 'Shows key metadata only (not private keys)', which clarifies output limitations beyond what annotations provide. No contradictions with annotations exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with zero wasted words, front-loading the core purpose and efficiently adding a key behavioral detail. It's appropriately sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema), rich annotations covering safety, and clear purpose, the description is largely complete. It could slightly improve by mentioning output format or pagination, but the metadata clarification compensates well for the lack of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with 'userId' clearly documented as 'The service account user ID'. The description doesn't add any parameter details beyond the schema, so it meets the baseline for high schema coverage without extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List existing keys') and resource ('for a service account'), with the clarifying detail about showing only metadata. It distinguishes from sibling tools like 'zitadel_create_service_user_key' by focusing on listing rather than creation, though it doesn't explicitly differentiate from other list tools like 'zitadel_list_apps'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing to view keys for a specific service account, but provides no explicit guidance on when to use this versus alternatives, prerequisites, or exclusions. It doesn't mention when not to use it or refer to other tools for related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_user_grantsB
Read-onlyIdempotent

List role grants (authorizations) for a specific user, showing which project roles they have been assigned.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe user ID to list grants for
projectIdNoFilter by project ID (uses default project if omitted)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds semantic framing (grants = assigned project roles) but nothing about pagination, result size, or ordering for a list endpoint, which is a real gap even at the lower annotated bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words, and the defining scope ('for a specific user') comes early. It is appropriately sized, though it could have traded a few words for actual usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param, fully documented, read-only list tool with no output schema, the description covers the essentials of what is returned. It is adequate but thin: no indication of result shape, volume, or how to interpret multiple grants, leaving the agent to discover behavior at call time.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the 'uses default project if omitted' nuance, so the schema carries parameter meaning. The description only restates that grants belong to a specific user and adds no syntax, format, or filter semantics beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb+resource ("List role grants (authorizations)") and scopes it to a user, with a clarifying parenthetical that distinguishes it from the project-scoped sibling zitadel_list_project_roles. It stops short of naming the alternatives (list_project_roles, list_users) that an agent might confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: "for a specific user" suggests it answers 'what can this user access?', and the schema's projectId hints at project filtering. There is no explicit when-to-use/when-not or routing to siblings, so the agent must infer the boundary against list_project_roles and create_user_grant itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_list_usersB
Read-onlyIdempotent

List or search users in the Zitadel instance. Returns user details including name, email, status, and login names.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of users to return (default: 50)
queryNoOptional search query to filter users by email, name, or username

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds value by specifying the return content ('user details including name, email, status, and login names'), which isn't covered by annotations. However, it lacks details on pagination, rate limits, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('List or search users') and includes key return details. Every word earns its place with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (read-only list/search), rich annotations, and full parameter documentation, the description is adequate but minimal. It lacks output schema, so describing return values is helpful, but it doesn't cover error cases or behavioral nuances like pagination. It meets basic needs but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented in the schema. The description mentions 'search' which aligns with the 'query' parameter but adds no additional semantics beyond what the schema provides. With high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List or search') and resource ('users in the Zitadel instance'), making the purpose evident. It distinguishes from siblings like 'zitadel_get_user' (singular retrieval) by emphasizing listing/searching multiple users. However, it doesn't explicitly differentiate from 'zitadel_list_user_grants', which might cause some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer 'zitadel_get_user' for single-user retrieval, 'zitadel_list_user_grants' for related data, or other sibling tools. Usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_lock_userA
DestructiveIdempotent

Lock a user account. The user will not be able to log in until unlocked. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe Zitadel user ID to lock
confirmNoMust be true to execute. Omit to preview the action.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and idempotentHint=true, but the description adds valuable context: it explains the consequence ('user will not be able to log in until unlocked') and the confirm parameter's role in execution vs. preview. However, it lacks details on permissions, rate limits, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste: the first sentence states the purpose and effect, and the second specifies the confirm requirement. It is front-loaded and appropriately sized for a destructive action tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description is mostly complete: it covers purpose, effect, and a key parameter requirement. However, it lacks details on permissions needed, potential errors, or return values, which would be helpful given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema fully documents both parameters. The description adds minimal value by mentioning the confirm parameter's requirement, but does not provide additional semantics beyond what the schema already states (e.g., format of userId or implications of confirm).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Lock') and resource ('user account'), specifies the effect ('will not be able to log in until unlocked'), and distinguishes it from sibling tools like 'zitadel_unlock_user' and 'zitadel_deactivate_user' by focusing on locking functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (to lock a user account) and includes a prerequisite ('Requires confirm: true'), but does not explicitly state when not to use it or name alternatives like 'zitadel_deactivate_user' for comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_offboard_userA
DestructiveIdempotent

Offboard a user: remove their Admin|Standard project role assignment, revoke any org-manager grant, and deactivate the account. Guards: cannot remove the last Admin, cannot self-demote (pass actingUserId), cannot remove the last ORG_OWNER. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoEmail of the user to offboard (used if userId omitted)
userIdNoThe Zitadel user ID to offboard (or provide email)
confirmNoMust be true to execute. Omit to preview the action.
projectIdNoProject ID (uses default project if omitted)
deactivateNoDeactivate the account (default: true)
actingUserIdNoThe user performing the action — blocks self-demotion if it equals the target
removeManagerNoRevoke org-manager grant (default: true)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, yet the description still adds substantive context beyond them: the exact set of mutations performed, the last-Admin/ORG_OWNER protection rules, and the confirm-gated preview mode. That is exactly the elevated bar annotations should not count toward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the offboard action leads, the guards are compressed into one clause-heavy sentence, and the confirm requirement is stated last where it is most likely to be acted on. No filler sentences, though the semicolon-heavy guards take a second read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param mutation with full schema coverage and no output schema, the description covers the action, the guards, and the preview/confirm protocol adequately. It stops short of describing reversibility or what happens to other grants the user may hold, which would matter for an offboarding operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: it explains why actingUserId exists (self-demotion block), what confirm does beyond 'must be true' (omitting previews), and names the role removals tied to removeManager. It does not cover projectId or deactivate defaults, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (offboard) plus the concrete sub-actions it performs (remove Admin|Standard project role, revoke org-manager grant, deactivate account), which distinguishes it from siblings like zitadel_deactivate_user and zitadel_delete_user that do only one of those things.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions and exclusions: 'Requires confirm: true', 'Omit to preview', and three hard guards (last Admin, self-demotion, last ORG_OWNER). It doesn't explicitly route to a sibling for partial operations, but the guard conditions clearly scope when this tool may be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_provision_userA
Idempotent

Atomically provision a user for the core SSO apps (the app-portal cascade-up). Creates the human user (idempotent by email or supplied userId), assigns the Admin|Standard project role via the v2 AuthorizationService, and — for Admins — grants ORG_USER_MANAGER so they can manage any user (no-super-admin pattern). Returns { zitadelUserId, role, authorizationId }. Safe to re-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesBusiness role: "admin" or "standard" (the only two)
emailYesEmail address for the user
userIdNoOptional client-supplied user ID for idempotent retries
lastNameYesLast name
firstNameYesFirst name
projectIdNoProject ID for the role assignment (uses default project if omitted)
grantOrgManagerNoGrant the org-manager role. Default: true for role=admin, false for role=standard. Set explicitly to override.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, idempotentHint=true, destructiveHint=false; the description adds real substance on top: atomicity, the three cascade steps (create user, assign project role via v2 AuthorizationService, grant ORG_USER_MANAGER for admins), the idempotency key semantics, and the no-super-admin rationale. It stops short of stating permission requirements or conflict/error behaviour when an email already exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and scope, then enumerates the cascade compactly, ending with the return shape and a one-line 'Safe to re-run' reassurance. Dense jargon ('app-portal cascade-up', 'no-super-admin pattern') makes it slightly hard to parse but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully supplies the return shape { zitadelUserId, role, authorizationId } and covers idempotency and role-grant side effects. It omits failure/conflict handling and required permissions, which an agent calling a mutating provisioning tool would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds meaning beyond the schema: userId is explained as the idempotent-retry key ('idempotent by email or supplied userId'), and grantOrgManager's admin-only coupling to ORG_USER_MANAGER clarifies why the default varies by role. projectId and the required fields gain no extra description-level detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (provision) and resource (user) and scopes it to 'the core SSO apps (the app-portal cascade-up)', which implicitly separates it from the raw zitadel_create_user sibling by signalling it is a composite operation. It never names a sibling explicitly, so an agent must infer the boundary rather than being routed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys context ('for the core SSO apps', 'safe to re-run') and the no-super-admin pattern, so the intended scenario is implied. It gives no explicit when-to-use/when-not guidance or comparison against zitadel_create_user, zitadel_create_user_grant, or zitadel_grant_org_manager, which are the obvious alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_reactivate_userB
Idempotent

Reactivate a previously deactivated user account.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe Zitadel user ID to reactivate

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover key behavioral traits (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description doesn't need to repeat these. It adds minimal context by specifying 'previously deactivated,' but doesn't elaborate on effects like permission restoration or error conditions. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameter schema and annotations covering safety and idempotency, the description is adequate but minimal. It lacks details on output (no schema provided) and doesn't address potential errors or side effects, which could be helpful for a mutation tool despite the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter 'userId,' with a clear description in the schema. The tool description adds no additional parameter semantics beyond what's already documented, so it meets the baseline for high schema coverage without compensating value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('reactivate') and resource ('previously deactivated user account'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'zitadel_unlock_user' or 'zitadel_create_user', which could cause confusion about when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the user must be deactivated first), exclusions, or relationships with sibling tools like 'zitadel_deactivate_user' or 'zitadel_unlock_user', leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_remove_user_grantA
DestructiveIdempotent

Remove a role grant (authorization) from a user by grant ID. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe user ID
confirmNoMust be true to execute. Omit to preview the action.
grantIdYesThe grant / authorization ID to remove

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description reinforces this with the confirm gate and the preview-if-omitted behavior, but that same detail is already in the schema, so it adds limited new context (no permission requirements, no effect on other grants).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the action stated first and the confirm requirement front-loaded as the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation whose safety hints are already in annotations, and with no output schema to explain, the description plus schema give the agent enough to call it correctly. Missing only privilege/scope context, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the confirm/preview semantics. The description only restates the grant-ID targeting, adding nothing the schema does not already say — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a role grant (authorization) from a user by grant ID'), which cleanly separates it from siblings like zitadel_create_user_grant and zitadel_list_user_grants without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one hard prerequisite ('Requires confirm: true'), which is genuinely useful, but offers no when-to-use vs. alternatives guidance and no exclusions — e.g. it never distinguishes itself from revoke_org_manager or offboard_user, which also remove access.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_revoke_org_managerA
DestructiveIdempotent

Revoke org-level manager role(s) from a user. Omit roles to remove the entire manager membership. Guards against removing the last ORG_OWNER. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
rolesNoSpecific manager role keys to remove. Omit to remove all of the user's manager roles.
userIdYesThe Zitadel user ID to revoke manager role(s) from
confirmNoMust be true to execute. Omit to preview the action.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds beyond annotations: the last-ORG_OWNER guard is a concrete safety constraint and the confirm:true requirement is a behavioral contract. Annotations already flag destructiveHint and idempotentHint, so this supplements with operational detail. Slightly short on what happens on guard failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the default behavior, then the guard and confirm requirement. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, omissible roles, safety guard, and confirm. Lacks detail on error behavior if guard triggers or required auth level, but sufficient for correct invocation given schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining the semantic of omitting roles (removes entire manager membership) and the confirm gate, which enriches understanding beyond raw field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (revoke) + resource (org-level manager role) + object (user). Clearly distinguished from its inverse sibling zitadel_grant_org_manager and from zitadel_remove_user_grant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States behavior when roles are omitted, but gives no explicit when-to-use vs alternatives or prerequisites (e.g., admin permissions needed). Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_set_hosted_login_translationA
Idempotent

Override texts of the Login V2 (new "hosted login" / TypeScript login) for a locale, via the Settings v2 API — the correct lever for the new login (the legacy Management "Custom Login Texts" are ignored by it). Pass translations as flat dot-path keys mirroring apps/login/locales/.json in zitadel/zitadel, e.g. {"password.errors.couldNotCreateSessionForUser":"Benutzername oder Passwort falsch."}. Only the keys you send are changed: the tool reads this level's existing overrides, deep-merges yours in, and writes the result — so other overrides and untouched defaults stay intact (idempotent). Defaults to the configured org (ORG-LEVEL — affects every app whose login resolves to this org); pass level:"instance" for the whole instance (needs an IAM-level grant). Set one locale per call; repeat for each language you support.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoScope to write: "organization" (default) or "instance".
localeYesBCP-47 language tag to write, e.g. "de" or "en".
translationsYesMap of override keys to text. Keys are flat dot-paths mirroring the login locale file (e.g. "password.errors.couldNotCreateSessionForUser"); an already-nested object is also accepted. Values may contain login-app placeholders like {failedAttempts}.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false): it explains the read-deep-merge-write mechanics, that only supplied keys change and other overrides/defaults survive, the org-level default scope affecting every app tied to the org, and the IAM-level grant needed for instance scope. That is exactly the behavioral context an agent needs before mutating shared login text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded, leading with what is overridden and the critical scope warning before mechanics. Some clauses (the JSON example, the deep-merge explanation) are long, but each carries actionable information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers scope, merge semantics, idempotency, permissions, and per-call granularity. The only omission is any indication of the return payload or error behavior, which is minor given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds real meaning: the flat dot-path key format mirroring apps/login/locales/<locale>.json, a concrete example, placeholder support like {failedAttempts}, and the defaulting/grant semantics of the level parameter. This exceeds the baseline 3 for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: overriding Login V2 / hosted login texts for a locale via the Settings v2 API. It also distinguishes itself from the legacy Management 'Custom Login Texts' path, which an agent could otherwise pick by mistake.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use context (the correct lever for the new login) and an explicit when-not (legacy Management custom texts are ignored by it), plus operational guidance to set one locale per call and repeat per language. It does not name the sibling get_hosted_login_translation as the read counterpart, which is the only notable gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_unlock_userA
Idempotent

Unlock a previously locked user account.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe Zitadel user ID to unlock

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false, idempotentHint=true, and destructiveHint=false, indicating it's a non-destructive, idempotent mutation. The description adds value by specifying it unlocks 'a previously locked user account,' clarifying the precondition, but doesn't mention side effects (e.g., user regains access), permissions required, or rate limits. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with zero waste—it immediately states the tool's action and target. It's appropriately sized for a simple tool and front-loaded with essential information, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and rich annotations, the description is minimal but covers the core action. It lacks details on return values, error conditions, or broader context (e.g., how unlocking integrates with other user states), making it adequate but incomplete for full agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with 'userId' clearly documented. The description doesn't add any parameter-specific details beyond the schema, such as format examples or constraints, so it meets the baseline for high schema coverage without extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Unlock') and resource ('a previously locked user account'), making the purpose evident. It distinguishes from siblings like 'zitadel_lock_user' by specifying the opposite action, though it doesn't explicitly mention other user management tools like 'zitadel_deactivate_user' or 'zitadel_reactivate_user' for full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't specify prerequisites (e.g., the user must be locked first), exclusions (e.g., cannot unlock a deleted user), or compare to related tools like 'zitadel_reactivate_user' for deactivated users, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zitadel_update_appB
Idempotent

Update an OIDC application's configuration (redirect URIs, auth method, grant types, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesThe application ID to update
devModeNoEnable/disable dev mode
projectIdYesThe project ID
grantTypesNoReplace OAuth grant types (omit to keep current). Include OIDC_GRANT_TYPE_REFRESH_TOKEN to enable refresh tokens.
redirectUrisNoUpdated redirect URIs
responseTypesNoReplace OIDC response types (omit to keep current).
accessTokenTypeNoChange access token format. OIDC_TOKEN_TYPE_JWT issues self-contained JWTs (validatable via JWKS); OIDC_TOKEN_TYPE_BEARER issues opaque reference tokens. Omit to keep current.
idTokenRoleAssertionNoInclude user roles in ID tokens
postLogoutRedirectUrisNoUpdated post-logout URIs
accessTokenRoleAssertionNoInclude user roles in access tokens
idTokenUserinfoAssertionNoInclude user info (name, email) in ID tokens

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety and repeatability profile is covered. The description adds no behavioral context beyond that—it does not state that this is a partial update, what permissions are required, or what happens to omitted fields (that detail lives in the schema, not the description).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and resource lead immediately. It is appropriately sized, though the parenthetical list is partly redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations plus a fully documented schema mean an agent can invoke this correctly. However, the description omits the partial-update nature of the operation and required permissions, which are meaningful for a mutation tool even with rich structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 11 parameters including the enum and the 'omit to keep current' semantics are already documented in the schema. The description only echoes a few field names (redirect URIs, grant types) without adding meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (OIDC application's configuration) and names representative fields (redirect URIs, auth method, grant types). It clearly distinguishes the mutation intent from siblings like zitadel_create_oidc_app or zitadel_get_app, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites (e.g., the app must already exist), and no routing to alternatives such as create_oidc_app for new apps or get_app for reads. Usage is only implied by the word 'Update'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 15 tool updatesv2.0.0
    • Changedzitadel_create_oidc_app3 fields changed
      • addedInput schema / properties / accessTokenType
        Added value: +{
        +  "description": "Access token format. OIDC_TOKEN_TYPE_JWT issues self-contained JWTs validatable via JWKS; OIDC_TOKEN_TYPE_BEARER issues opaque reference tokens. Default OIDC_TOKEN_TYPE_BEARER. Use JWT for resource servers that validate tokens locally (e.g., agentgateway).",
        +  "enum": [
        +    "OIDC_TOKEN_TYPE_BEARER",
        +    "OIDC_TOKEN_TYPE_JWT"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / grantTypes
        Added value: +{
        +  "description": "OAuth grant types (default: [OIDC_GRANT_TYPE_AUTHORIZATION_CODE]). Include OIDC_GRANT_TYPE_REFRESH_TOKEN to issue refresh tokens.",
        +  "items": {
        +    "enum": [
        +      "OIDC_GRANT_TYPE_AUTHORIZATION_CODE",
        +      "OIDC_GRANT_TYPE_IMPLICIT",
        +      "OIDC_GRANT_TYPE_REFRESH_TOKEN",
        +      "OIDC_GRANT_TYPE_DEVICE_CODE",
        +      "OIDC_GRANT_TYPE_TOKEN_EXCHANGE"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / responseTypes
        Added value: +{
        +  "description": "OIDC response types (default: [OIDC_RESPONSE_TYPE_CODE]).",
        +  "items": {
        +    "enum": [
        +      "OIDC_RESPONSE_TYPE_CODE",
        +      "OIDC_RESPONSE_TYPE_ID_TOKEN",
        +      "OIDC_RESPONSE_TYPE_ID_TOKEN_TOKEN"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedzitadel_create_project_role1 field changed
      • changedInput schema / properties / roleKey / description
        Previous value: -"Role key (e.g., \"admin\", \"app:finance\", \"app:timesheets\")"New value: +"Role key. Standardized vocabulary: \"admin\" or \"standard\"."
    • Changedzitadel_create_user1 field changed
      • addedInput schema / properties / userId
        Added value: +{
        +  "description": "Optional client-supplied user ID for idempotency (Zitadel generates one if omitted)",
        +  "type": "string"
        +}
    • Changedzitadel_create_user_grant1 field changed
      • changedInput schema / properties / roleKeys / description
        Previous value: -"Array of role keys to assign (e.g., [\"admin\", \"app:finance\"])"New value: +"Array of role keys to assign (standardized: [\"admin\"] or [\"standard\"])"
    • Addedzitadel_get_hosted_login_translation
    • Addedzitadel_get_login_policy
    • Addedzitadel_grant_org_manager
    • Addedzitadel_list_org_manager_roles
    • Addedzitadel_list_org_managers
    • Addedzitadel_offboard_user
    • Addedzitadel_provision_user
    • Changedzitadel_remove_user_grant1 field changed
      • changedInput schema / properties / grantId / description
        Previous value: -"The grant ID to remove"New value: +"The grant / authorization ID to remove"
    • Addedzitadel_revoke_org_manager
    • Addedzitadel_set_hosted_login_translation
    • Changedzitadel_update_app3 fields changed
      • addedInput schema / properties / accessTokenType
        Added value: +{
        +  "description": "Change access token format. OIDC_TOKEN_TYPE_JWT issues self-contained JWTs (validatable via JWKS); OIDC_TOKEN_TYPE_BEARER issues opaque reference tokens. Omit to keep current.",
        +  "enum": [
        +    "OIDC_TOKEN_TYPE_BEARER",
        +    "OIDC_TOKEN_TYPE_JWT"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / grantTypes
        Added value: +{
        +  "description": "Replace OAuth grant types (omit to keep current). Include OIDC_GRANT_TYPE_REFRESH_TOKEN to enable refresh tokens.",
        +  "items": {
        +    "enum": [
        +      "OIDC_GRANT_TYPE_AUTHORIZATION_CODE",
        +      "OIDC_GRANT_TYPE_IMPLICIT",
        +      "OIDC_GRANT_TYPE_REFRESH_TOKEN",
        +      "OIDC_GRANT_TYPE_DEVICE_CODE",
        +      "OIDC_GRANT_TYPE_TOKEN_EXCHANGE"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / responseTypes
        Added value: +{
        +  "description": "Replace OIDC response types (omit to keep current).",
        +  "items": {
        +    "enum": [
        +      "OIDC_RESPONSE_TYPE_CODE",
        +      "OIDC_RESPONSE_TYPE_ID_TOKEN",
        +      "OIDC_RESPONSE_TYPE_ID_TOKEN_TOKEN"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 25 tool updatesv1.0.2
    • First observedzitadel_create_oidc_app
    • First observedzitadel_create_project
    • First observedzitadel_create_project_role
    • First observedzitadel_create_service_user
    • First observedzitadel_create_service_user_key
    • First observedzitadel_create_user
    • First observedzitadel_create_user_grant
    • First observedzitadel_deactivate_user
    • First observedzitadel_delete_user
    • First observedzitadel_get_app
    • First observedzitadel_get_auth_config
    • First observedzitadel_get_org
    • First observedzitadel_get_project
    • First observedzitadel_get_user
    • First observedzitadel_list_apps
    • First observedzitadel_list_project_roles
    • First observedzitadel_list_projects
    • First observedzitadel_list_service_user_keys
    • First observedzitadel_list_user_grants
    • First observedzitadel_list_users
    • First observedzitadel_lock_user
    • First observedzitadel_reactivate_user
    • First observedzitadel_remove_user_grant
    • First observedzitadel_unlock_user
    • First observedzitadel_update_app

TDQS

A3.6/5.0

Scored across 34 tools

Disambiguation4/5

Tools are mostly distinct: user lifecycle, grants, org managers, projects, apps, and translations each have clear boundaries. The only mild overlap is between composite helpers (provision_user, offboard_user) and their constituent low-level operations, but descriptions make the intended use clear.

Naming Consistency5/5

All tools use the zitadel_ prefix with snake_case verb_noun naming (e.g. zitadel_list_users, zitadel_create_user_grant, zitadel_grant_org_manager). Conventions are consistent across the entire set.

Tool Count2/5

34 tools is above the 25-tool threshold for 'too many' in the rubric; while Zitadel is broad, the surface feels heavy and includes several composite wrappers alongside granular operations.

Completeness3/5

User lifecycle is complete (create, list, get, deactivate, reactivate, lock, unlock, delete), and grants/managers are well covered. However, projects and apps lack update/delete operations, login policy is read-only, and service-user keys have no delete/revoke, leaving notable gaps.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables remote MCP server connections with WorkOS AuthKit authentication and user management. Supports organization-centric authentication and permission-based tool access control.
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Add authentication to your app without leaving your IDE. Creates projects, configures auth methods, wires up OAuth, and scaffolds sign-in flows - all from your editor's chat.
    35 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to connect to Authentik and securely query users, groups, applications, events, and system status, with an optional gated tool to enable or disable user accounts.
    MIT