Skip to main content
Glama
MSPbotsAI

openai-workspace-mcp

by MSPbotsAI

openai-workspace-mcp

English | 中文

OpenAI Workspace MCP server for Claude — exposes the OpenAI Admin API (the API Platform organization back office, distinct from ChatGPT Enterprise workspace admin) as MCP tools: organization members, invites, projects, project members, service accounts, project API keys, rate limits, usage, costs, and audit logs.

Tech stack: Python 3.12 + uv + FastMCP (Starlette/uvicorn)

关联需求:PRD-15751(ChatGPT / OpenAI Workspace)。完整调研见 vendor-mcp-template/prd/OpenAIWorkspace.md.

Out of scope: Admin API key self-management, fine-grained custom Roles/Groups (RBAC), mTLS Certificates, Data Retention policy, Spend Limit/Alert configuration, Model Permissions, and Hosted Tool Permissions are intentionally not implemented — see the PRD §4.11 for rationale (mostly: high-risk security/compliance writes, or orthogonal to the "members + usage + billing" scope this service targets).

Quick Start

cd openai-workspace-mcp
uv sync

# stdio mode (for Claude Desktop / CLI), single shared key from env
OPENAI_ADMIN_API_KEY=sk-admin-xxxx uv run openai-workspace-mcp

Related MCP server: OpenAI Assistant MCP Server

Authentication

This service is stateless: it never stores or persists the OpenAI Admin API key. The key is either supplied once via an environment variable (local dev, AUTH_MODE=env), or per-request via an HTTP header (AUTH_MODE=gateway, production).

Unlike some other vendor integrations in this workspace (Adobe, Bitwarden), the OpenAI Admin API needs no OAuth token exchange — it's a single static Bearer token attached directly to every request, so there's no extra Identity round trip.

Gateway mode HTTP headers (AUTH_MODE=gateway)

Header

Type

Required

Default

Enum

Description

Example

x-openai-admin-key

string

Yes

none

none

OpenAI Admin API key (sk-admin-...), created by an org Owner under Settings -> Admin API Keys. Distinct from a regular sk-... key — it cannot call model endpoints, and a regular key cannot call /organization/*. Used only for this request's Authorization: Bearer header; never persisted or logged.

sk-admin-abc123...

Missing the header on a /mcp request returns 401 with a required_headers list.

Env mode variables (AUTH_MODE=env, local dev only)

Variable

Default

Description

OPENAI_ADMIN_API_KEY

OpenAI Admin API key

OPENAI_BASE_URL

https://api.openai.com/v1

Admin API base URL (fixed, no regional variants)

AUTH_MODE

gateway

env or gateway

MCP_TRANSPORT

stdio

stdio or http

MCP_HTTP_PORT

8080

HTTP server port

MCP_HTTP_HOST

0.0.0.0

HTTP server bind address

Get a key: as an organization Owner, go to platform.openai.com -> Settings -> Admin API Keys -> Create. Requires an OpenAI API Platform organization (not a personal ChatGPT account).

Claude Desktop Setup

{
  "mcpServers": {
    "openai-workspace": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/openai-workspace-mcp", "openai-workspace-mcp"],
      "env": {
        "OPENAI_ADMIN_API_KEY": "sk-admin-xxxx"
      }
    }
  }
}

Transport Modes

stdio (Claude Desktop / CLI)

OPENAI_ADMIN_API_KEY=sk-admin-xxxx uv run openai-workspace-mcp

HTTP — single-tenant (env mode)

OPENAI_ADMIN_API_KEY=sk-admin-xxxx MCP_TRANSPORT=http AUTH_MODE=env uv run openai-workspace-mcp
curl http://localhost:8080/health

HTTP — gateway / multi-tenant (production)

MCP_TRANSPORT=http AUTH_MODE=gateway uv run openai-workspace-mcp

Tool List

Base URL: https://api.openai.com/v1 (fixed). List endpoints use cursor pagination (after/limit, some also before) — pass the previous response's last_id/next_page value as after/page to fetch the next batch.

Organization Users

Tool

Description

Parameters

openai_list_users

List organization members

emails (string[], optional), after (string, optional), limit (int, optional)

openai_get_user

Get a member's details

user_id (string, required)

openai_update_user_role

Change a member's org role

user_id (string, required), role (string, required — owner/reader)

openai_remove_user

Remove a member from the org

user_id (string, required)

No "create user" endpoint — joining the org always goes through an invite.

Invites

Tool

Description

Parameters

openai_invite_user

Invite a new user by email

email (string, required), role (string, required — owner/reader), projects (array of {id, role}, optional)

openai_get_invite

Get an invite's status

invite_id (string, required)

openai_list_invites

List all invites

after, limit (optional)

openai_delete_invite

Revoke a pending invite

invite_id (string, required)

Projects

Tool

Description

Parameters

openai_list_projects

List projects

include_archived (bool, default false), after, limit (optional)

openai_get_project

Get a project's details

project_id (string, required)

openai_create_project

Create a project

name (string, required)

openai_update_project

Rename a project

project_id (string, required), name (string, required)

openai_archive_project

Archive a project (cannot be undone via API; projects cannot be deleted)

project_id (string, required)

Project Users

Tool

Description

Parameters

openai_list_project_users

List members of a project

project_id (required), after, limit (optional)

openai_get_project_user

Get a project member's details

project_id, user_id (required)

openai_add_project_user

Add an existing org member to a project

project_id, user_id, role (required — owner/member)

openai_update_project_user_role

Change a member's project role

project_id, user_id, role (required)

openai_remove_project_user

Remove a member from a project

project_id, user_id (required)

Project Service Accounts

Service accounts are non-human, project-scoped identities. Creating one is the only programmatic way to mint a new API key — there's no "create user API key" endpoint.

Tool

Description

Parameters

openai_list_service_accounts

List service accounts in a project

project_id (required), after, limit (optional)

openai_get_service_account

Get a service account's details

project_id, service_account_id (required)

openai_create_service_account

Create a service account (response includes the API key's plaintext value — shown only once)

project_id, name (required), create_service_account_only (bool, default false)

openai_update_service_account

Update name/role

project_id, service_account_id (required), name, role (optional)

openai_delete_service_account

Delete a service account

project_id, service_account_id (required)

Project API Keys (read + revoke only)

Tool

Description

Parameters

openai_list_project_api_keys

List API keys in a project (values always redacted)

project_id (required), owner_project_access (active/inactive/any, optional), after, limit (optional)

openai_get_project_api_key

Get a key's details (redacted)

project_id, api_key_id (required)

openai_delete_project_api_key

Delete a key (fails if it belongs to a service account — delete the service account instead)

project_id, api_key_id (required)

Project Rate Limits

Tool

Description

Parameters

openai_list_rate_limits

List per-model rate limit configs

project_id (required), after, before, limit (optional)

openai_update_rate_limit

Update one model's rate limit

project_id, rate_limit_id (required), max_requests_per_1_minute, max_tokens_per_1_minute, max_images_per_1_minute, max_audio_megabytes_per_1_minute, max_requests_per_1_day, batch_1_day_max_input_tokens (all optional)

Usage & Costs

Tool

Description

Parameters

openai_get_usage

Query time-bucketed usage for one category

category (required — completions/embeddings/moderations/images/audio_speeches/audio_transcriptions/vector_stores/code_interpreter_sessions/file_search_calls/web_search_calls), start_time (int, required, Unix seconds), end_time, bucket_width (1m/1h/1d, default 1d), group_by (string[]), project_ids, user_ids, api_key_ids, models, limit, page (all optional)

openai_get_costs

Query daily spend breakdown

start_time (int, required), end_time, bucket_width (only 1d supported), group_by (project_id/line_item/api_key_id), project_ids, api_key_ids, limit (1-180, default 7), page (all optional)

Audit Logs

Tool

Description

Parameters

openai_list_audit_logs

List user actions and config changes

effective_start_time, effective_end_time (Unix seconds, optional), actor_emails, actor_ids, event_types, project_ids, resource_ids (string[], optional), after, before, limit (optional)

Role enums: org — owner/reader; project & service account — owner/member (service account also has read-only none). Invite status (read-only): pending/accepted/expired.

Rate limits: OpenAI has not published Admin-API-specific throttling numbers; 429 responses are passed through as-is.

Test Examples

tools/list (gateway mode)

curl -X POST http://localhost:8080/mcp \
  -H "x-openai-admin-key: sk-admin-your_key" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

tools/call — invite a member into a project

curl -X POST http://localhost:8080/mcp \
  -H "x-openai-admin-key: sk-admin-your_key" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "id": 2,
    "params": {
      "name": "openai_invite_user",
      "arguments": {
        "email": "user@example.com",
        "role": "reader",
        "projects": [{"id": "proj_abc123", "role": "member"}]
      }
    }
  }'

tools/call — query last 7 days of completions usage

curl -X POST http://localhost:8080/mcp \
  -H "x-openai-admin-key: sk-admin-your_key" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "id": 3,
    "params": {
      "name": "openai_get_usage",
      "arguments": {"category": "completions", "start_time": 1735689600, "bucket_width": "1d", "limit": 7}
    }
  }'

Missing header → 401

curl -i -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
# HTTP/1.1 401 Unauthorized
# {"error":"Missing credentials","required_headers":["x-openai-admin-key"]}

API Reference

  • Admin APIs overview

  • Invites

  • Project users

  • Usage/Cost API introduction

  • Audit logs

  • Endpoint paths, params, and enums in this service were verified against the official openai-node SDK source (src/resources/admin/organization/**, auto-generated by OpenAI from their OpenAPI spec), since the interactive docs site returns 403 to non-browser fetches. See vendor-mcp-template/prd/OpenAIWorkspace.md §8 for the exact file list.

Known Limitations

  • No "create user" or "create project API key" tools — by design, these follow OpenAI's own API surface: org membership only grows via invites, and a new API key can only be minted by creating a service account.

  • openai_create_service_account returns a plaintext API key — this is the underlying API's own behavior (shown once, at creation time only); the tool does not redact it.

  • Array-valued filters (project_ids, event_types, etc.) are sent as key[]=... query params, matching OpenAI's own SDK serialization — not the plain repeated-key format some other vendors in this workspace use.

  • No documented Admin-API-specific rate limits429 is passed through as-is.

  • Requires an OpenAI API Platform organization with Owner access to create an Admin API key; a personal ChatGPT account cannot use this service.

  • Advanced features intentionally out of scope: Admin API key self-management, custom Roles/Groups (RBAC), Certificates (mTLS), Data Retention, Spend Limit/Alerts, Model Permissions, Hosted Tool Permissions — see the PRD for rationale.

Available Tools

31 tools
openai_add_project_userA

Add an existing organization member to a project.

    The user must already be a member of the organization (see
    openai_invite_user / openai_list_users) — this call cannot invite
    someone new to the org.

    Args:
        project_id: The project's ID (see openai_list_projects).
        user_id: The organization member's user ID (see openai_list_users).
        role: Project role to grant — `owner` or `member`.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
user_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the key constraint (cannot invite new org members), the prerequisite (must already be a member), and the role options. It does not cover potential idempotency or error behavior, but the core mutation semantics are clear.

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 concise and well-structured. The main action is front-loaded, followed by a key limitation, then parameter documentation. Every sentence adds value with no redundancy.

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?

Given the tool's simplicity (3 required params), no annotations, and presence of an output schema, the description is complete. It covers purpose, usage constraints, prerequisites, and parameter semantics, providing enough context for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates. Each parameter is explained with meaningful context: project_id references openai_list_projects, user_id references openai_list_users, and role specifies valid values 'owner' or 'member'.

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 tool's function with a specific verb and resource: 'Add an existing organization member to a project.' It distinguishes this from invite_user by explicitly noting this call cannot invite someone new to the org.

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 provides explicit usage guidance, stating the prerequisite (user must already be an org member), directly referencing alternatives (openai_invite_user / openai_list_users), and providing cross-references for parameter lookups (openai_list_projects, openai_list_users).

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

openai_archive_projectA

Archive a project. Archived projects cannot be used or modified further, and this action cannot be undone via the API.

    Args:
        project_id: The project's ID (see openai_list_projects).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the action cannot be undone and that archived projects cannot be used or modified further—critical behavioral traits. It doesn't cover permissions or side effects on related resources, but the key irreversible nature is clearly communicated.

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 no redundant information. Every phrase earns its place: the action, the irreversible consequence, and the parameter reference. It is front-loaded and appropriately sized.

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 one parameter and an output schema, the description is nearly complete for correct invocation. It includes the crucial irreversible warning and a pointer to a sibling tool for ID lookup. The only missing contextual element is explicit authorization requirements, but that is not essential for basic use.

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 only parameter, project_id, is described as 'The project's ID (see openai_list_projects)'—this adds meaningful guidance beyond the bare schema type by telling the agent how to obtain a valid value. For a single-parameter tool, this is sufficient semantic enrichment.

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 starts with 'Archive a project,' which is a specific verb+resource that clearly distinguishes this tool from siblings like openai_update_project and openai_get_project. It also explains the consequence ('cannot be used or modified further'), making the purpose unmistakable.

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 doesn't explicitly name alternatives, but it clearly implies this tool is for permanently disabling a project. It also cross-references openai_list_projects for obtaining the project ID, which is a useful usage hint. However, it stops short of stating when not to use it.

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

openai_create_projectA

Create a new project in the organization.

    Args:
        name: The project's friendly name (appears in usage/cost reports).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description offers minimal behavioral detail. It only notes that the project's name appears in usage/cost reports; it doesn't disclose permissions, side effects, or what the response contains.

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 sentence plus a compact Args block. Every part is relevant and it's front-loaded with the primary function.

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?

While the output schema covers return values, the description lacks contextual details such as organization prerequisites, whether the project is created immediately, or any constraints. It's minimally adequate for a simple create 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?

The Args section explains that 'name' is the project's friendly name and appears in usage/cost reports, adding meaning beyond the schema's bare type definition. For a single-parameter tool, this is helpful.

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 action ('Create') and the resource ('a new project in the organization'), which distinguishes it from sibling tools like get, update, or archive.

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 given on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description simply states the function.

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

openai_create_service_accountA

Create a new service account in a project.

    By default this also creates a `member`-role project membership and an
    API key for the account. IMPORTANT: the response contains the API key's
    PLAINTEXT value — this is the only time it is ever shown. Surface it to
    the user immediately so they can store it; it cannot be retrieved again.

    Args:
        project_id: The project's ID (see openai_list_projects).
        name: Name for the new service account.
        create_service_account_only: If True, skip creating the default role/API key.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
project_idYes
create_service_account_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it excels. It discloses the critical behavioral trait that the response contains a plaintext API key that is only shown once, instructing the agent to surface it immediately. It also explains the default creation of a role membership and API key, providing essential context for side effects.

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 well-structured and front-loaded with the main purpose. The important warning about the plaintext API key is highlighted with 'IMPORTANT', and the Args section is necessary given the lack of schema descriptions. Every sentence adds value without redundancy.

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 create tool with an output schema, the description is complete. It covers the purpose, parameters, and the most critical behavioral side effect (the one-time API key exposure). The cross-reference to openai_list_projects for project_id is helpful. The output schema handles return value details, so the description does not need to.

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

Parameters5/5

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

The schema has 0% description coverage, so the description fully compensates by explaining each parameter in the Args section. It adds meaningful context: project_id is tied to openai_list_projects, name is straightforward, and create_service_account_only is defined with its behavioral impact. This is exactly what was needed.

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 tool's function with a specific verb and resource: 'Create a new service account in a project.' It also explains the default behavior (creating a member-role membership and API key), which distinguishes it from other service account operations like update or delete.

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 the tool: when you need to create a service account. It even references openai_list_projects for obtaining a project_id. However, it does not explicitly mention alternatives or when not to use it, 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.

openai_delete_inviteA

Revoke a pending invite. Invites that have already been accepted cannot be deleted.

    Args:
        invite_id: The invite's ID (see openai_list_invites).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
invite_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the important restriction that accepted invites cannot be deleted, which is valuable. However, it does not mention what happens if the invite is already revoked, whether the operation is idempotent, or any permission requirements, so transparency is moderate.

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 concise and front-loaded with the primary purpose. Each sentence earns its place, including the constraint and the parameter hint. 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?

For a simple delete operation with one parameter and an output schema, the description covers the essential behavioral constraint (accepted invites cannot be deleted) and how to find the ID. It does not detail error behavior or success/failure formats, but the output schema likely covers that, and the tool is straightforward.

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 schema provides no description for invite_id, but the description explains it as 'The invite's ID' and points to openai_list_invites for retrieval. This adds meaning beyond the schema and is sufficient for a single parameter.

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 action (revoke) and resource (a pending invite), distinguishing it from other invite-related tools like openai_get_invite or openai_invite_user. It also adds a key constraint: accepted invites cannot be deleted, which further clarifies the tool's 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?

The description explicitly notes that accepted invites cannot be deleted, telling the agent this tool is only for pending invites. It also references openai_list_invites for finding the invite ID, providing a usage hint. However, it does not explicitly name alternatives or exclusions beyond the accepted-invite case.

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

openai_delete_project_api_keyA

Delete an API key from a project.

    Fails if the key belongs to a service account — delete the service
    account instead (openai_delete_service_account) to revoke that key.

    Args:
        project_id: The project's ID (see openai_list_projects).
        api_key_id: The API key's ID (see openai_list_project_api_keys).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
api_key_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. It does reveal a notable failure mode (service account keys) and implies that deletion revokes the key, but it does not explicitly state that the operation is irreversible or mention any permissions or side effects, which are relevant for a destructive operation.

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 compact: a one-sentence action, a conditional note with an alternative, and a concise arg list. Every element earns its place and the most critical information is front-loaded.

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 delete tool with an output schema present, the description is largely complete. It covers the primary action, the key edge case, and parameter sourcing. It could mention permission requirements or explicit irreversibility, but these are not strictly necessary given the output schema and the clarity of the action.

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 0%, so the description must compensate. It does so by explaining each parameter's purpose and pointing to the correct list tools for lookups, adding valuable meaning beyond the bare input schema.

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 opens with 'Delete an API key from a project', a specific verb-resource pair that clearly states the tool's function. It also distinguishes from sibling tools like openai_list_project_api_keys and openai_get_project_api_key by focusing on deletion, and mentions the alternative openai_delete_service_account for a specific case.

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 states a condition under which the tool fails (service account keys) and directs the agent to use openai_delete_service_account instead. It also references openai_list_projects and openai_list_project_api_keys for obtaining the required IDs, providing clear when-to-use and how-to-proceed guidance.

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

openai_delete_service_accountA

Delete a service account from a project. Fails if the project is archived.

    Args:
        project_id: The project's ID (see openai_list_projects).
        service_account_id: The service account's ID (see openai_list_service_accounts).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
service_account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals a failure mode (archived project) but omits critical aspects like irreversibility, permission requirements, and potential side effects on related resources.

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: two sentences and a compact Args block. Every sentence earns its place, with no redundant or filler content.

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 delete operation with an output schema, the description is adequate but sparse. It includes a failure condition and ID references, yet lacks mention of whether deletion is permanent, any access requirements, or the exact scope of what is deleted. The output schema may clarify return values, but more behavioral context would improve completeness.

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% description coverage, and the description compensates by explaining each parameter: project_id and service_account_id, and directing the user to specific list functions for retrieval. This adds meaningful context beyond the raw schema fields.

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 action (delete a service account) and the scope (from a project). It also provides a specific failure condition (archived project) that distinguishes it from other sibling deletion tools.

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 references openai_list_projects and openai_list_service_accounts for obtaining the required IDs, implying a prerequisite workflow. It also notes that the operation fails if the project is archived, offering clear context for when the tool will work. No explicit alternatives are mentioned, but the purpose is unambiguous.

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

openai_get_costsA

Query the organization's daily spend breakdown.

    Args:
        start_time: Start of the query range, inclusive (Unix seconds).
        end_time: End of the query range, exclusive (Unix seconds).
        bucket_width: Time bucket size — only `1d` is currently supported.
        group_by: Fields to group by — project_id, line_item, api_key_id.
        project_ids: Only include costs for these projects.
        api_key_ids: Only include costs for these API keys.
        limit: Number of buckets to return (1-180, default 7).
        page: Pagination cursor from a previous response's `next_page`.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
end_timeNo
group_byNo
start_timeYes
api_key_idsNo
project_idsNo
bucket_widthNo1d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses that bucket_width only supports '1d', provides a limit range (1-180), explains pagination via next_page, and implies a read-only query operation. This is useful but does not mention authentication requirements or rate limits.

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 efficiently structured with a one-line purpose followed by a terse, informative parameter list. Every element adds value, and the critical information is front-loaded.

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?

The description covers all input parameters thoroughly, and with an output schema present, return values are already documented. The main gap is the lack of usage context relative to sibling tools like openai_get_usage, but overall it is sufficiently complete for an agent to invoke the tool.

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

Parameters5/5

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

The schema has 0% parameter description coverage, so the detailed Args block in the description fully compensates. It explains the meaning, formats, defaults, and constraints for all 8 parameters, including the allowed bucket_width value and pagination semantics.

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 it queries the organization's daily spend breakdown, which is a specific verb and resource. However, it does not explicitly contrast this with the sibling tool openai_get_usage, so it lacks explicit sibling 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 such as openai_get_usage. It merely states what the tool does, leaving usage context to be inferred from the tool name.

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

openai_get_inviteA

Get a single invite's details, including its status.

    Args:
        invite_id: The invite's ID (see openai_list_invites).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
invite_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It makes clear this is a read operation ('Get') and mentions the response includes status. However, it does not disclose potential errors (e.g., not found) or permission requirements, leaving some behavioral uncertainty.

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 minimal and well-structured: a one-sentence purpose followed by a concise Args note. Every sentence adds value, and the cross-reference is useful without padding.

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-item retrieval with an output schema present, the description covers purpose, resource, and ID sourcing. It is slightly incomplete in not addressing error behavior, but the straightforward scope keeps this from being a major gap.

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 0%, but the description compensates by explaining 'The invite's ID (see openai_list_invites)'. This adds provenance and directs the user to the correct source, going beyond the schema's bare 'Invite Id' label.

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?

Description states 'Get a single invite's details, including its status' – specific verb (get) and resource (invite). The word 'single' clearly distinguishes it from openai_list_invites.

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 context is implied by the purpose ('Get a single invite's details') but there is no explicit comparison to alternatives or exclusions. The reference to openai_list_invites for finding the ID hints at workflow but does not explain when to prefer this tool over list or delete.

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

openai_get_projectA

Get a single project's details.

    Args:
        project_id: The project's ID (see openai_list_projects).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. The verb 'Get' implies a safe, read-only operation, but the description does not disclose potential error cases (e.g., invalid project_id), authentication requirements, or response details beyond implying 'details'. For a simple getter this is adequate but minimal.

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 short and front-loaded with the main purpose. The Args block is a bit redundant with the schema, but it adds the useful hint about openai_list_projects, so every sentence earns its place. It is concise without being under-specified.

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 low complexity (1 parameter), minimal schema, and presence of an output schema, the description is nearly complete. It covers the tool's purpose and the sole parameter. It could additionally state when to use it versus alternatives, but that gap is minor for a simple get 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?

The input schema only provides the parameter name and type (project_id, string) with no description. The tool description's Args block adds meaning: 'The project's ID (see openai_list_projects)', which tells the agent where to find the ID and confirms it's a project identifier. This compensates for the 0% schema description coverage.

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 'Get a single project's details', which is a specific verb ('Get') plus a specific resource ('a single project's details'). It distinguishes itself from sibling tools like openai_list_projects (which lists all projects) and openai_get_project_user (which gets a project user). 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?

Usage is implied: use this tool when you have a specific project ID and want its details, as opposed to listing all projects. The argument hint 'see openai_list_projects' suggests a workflow (get the ID from the list tool), but there is no explicit 'when to use' or 'when not to use' statement. The guidance is clear from context but not explicitly stated.

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

openai_get_project_api_keyA

Get a single project API key's details (redacted value only).

    Args:
        project_id: The project's ID (see openai_list_projects).
        api_key_id: The API key's ID (see openai_list_project_api_keys).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
api_key_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden for disclosing behavior. It mentions the redacted value only, which is a key behavioral trait, but lacks other details like auth requirements or response specifics. This is partially compensated by the output schema.

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 concise and front-loaded with a clear one-line summary. The Args block is efficient and adds useful guidance without unnecessary fluff.

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 get tool with an output schema, the description covers the core function, parameter sourcing, and redaction behavior. It is sufficiently complete given the tool's low complexity.

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 0%, but the description adds valuable meaning by explaining each parameter with cross-reference to related list tools. This is a strong compensation, though it doesn't provide format or constraints.

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 tool gets a single project API key's details, with a specific nuance that the value is redacted. This differentiates it from sibling tools like listing or deleting API keys.

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?

It provides context for using the tool by referencing related tools for obtaining project_id and api_key_id. However, it does not explicitly state when not to use it compared to alternatives, though this is implied by the singular scope.

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

openai_get_project_userA

Get a single project member's details.

    Args:
        project_id: The project's ID (see openai_list_projects).
        user_id: The member's user ID (see openai_list_project_users).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description must convey safety profile. The verb 'Get' implies a read-only operation, but the description doesn't explicitly state non-mutating behavior or mention any permissions or potential errors. For a simple read tool, this is minimally adequate but adds no extra behavioral context.

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 short and front-loaded, with a one-line purpose followed by a focused Args breakdown. Every sentence earns its place; no filler or redundancy.

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?

With an output schema present, return-value documentation is already handled. The description covers the purpose, parameter meanings, and ID sourcing via sibling tools. For a simple single-resource getter, this is complete.

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

Parameters5/5

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

Schema description coverage is 0%, so the description bears full param documentation burden. The Args section explains each parameter's meaning and cross-references sibling tools to show how to obtain valid values (project_id via openai_list_projects, user_id via openai_list_project_users). This adds significant semantic value beyond the bare schema.

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 states a specific verb+resource: 'Get a single project member's details.' It clearly distinguishes from sibling tools like openai_list_project_users (listing) and openai_remove_project_user (mutation). The singular 'single' clarifies 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?

The description provides clear context for when to use this tool (single member lookup) and points to sibling tools for obtaining valid IDs. It doesn't explicitly state when not to use it or name alternatives, but the sibling list and 'single' wording imply the contrast.

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

openai_get_service_accountA

Get a single service account's details.

    Args:
        project_id: The project's ID (see openai_list_projects).
        service_account_id: The service account's ID (see openai_list_service_accounts).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
service_account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. 'Get' clearly implies a read-only operation with no side effects. It doesn't mention permissions or error handling, but for a simple get, this is adequate.

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 compact and front-loaded, with a single sentence defining the purpose followed by concise arg explanations. Every word earns its place.

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?

This is a simple tool with only two parameters, and the description provides complete parameter semantics and workflow references. The presence of an output schema means return values need no explanation, so the description is fully adequate.

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

Parameters5/5

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

Schema description coverage is 0%, but the description explains each parameter and points to list functions for sourcing IDs, adding significant meaning beyond the bare schema. This helps the agent invoke the tool correctly.

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 states 'Get a single service account's details', which is a specific verb+resource. It clearly distinguishes this from sibling tools like list (multiple), create, update, and delete service accounts.

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?

It provides clear context by referencing openai_list_projects and openai_list_service_accounts for obtaining the required IDs, implying a workflow. It does not explicitly state when not to use it, but the 'single' qualifier and references provide enough guidance.

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

openai_get_usageA

Query time-bucketed API usage for the organization.

    `limit` caps the number of time buckets returned, with different
    defaults/maximums per bucket_width: 1d -> default 7, max 31; 1h ->
    default 24, max 168; 1m -> default 60, max 1440.

    Args:
        category: Which usage type to query — one of: completions,
            embeddings, moderations, images, audio_speeches,
            audio_transcriptions, vector_stores, code_interpreter_sessions,
            file_search_calls, web_search_calls.
        start_time: Start of the query range, inclusive (Unix seconds).
        end_time: End of the query range, exclusive (Unix seconds).
        bucket_width: Time bucket size — `1m`, `1h`, or `1d` (default `1d`).
        group_by: Fields to group by, e.g. project_id, user_id, api_key_id,
            model, batch, service_tier (supported fields vary by category).
        project_ids: Only include usage for these projects.
        user_ids: Only include usage for these users.
        api_key_ids: Only include usage for these API keys.
        models: Only include usage for these models.
        limit: Number of time buckets to return.
        page: Pagination cursor from a previous response's `next_page`.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
modelsNo
categoryYes
end_timeNo
group_byNo
user_idsNo
start_timeYes
api_key_idsNo
project_idsNo
bucket_widthNo1d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses useful behavioral details such as bucket_width-specific defaults/maximums and pagination via 'page'. However, it does not explicitly state that the operation is read-only, mention authentication requirements, or note any rate limits, leaving some transparency gaps.

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 well-structured: a one-sentence summary followed by a parameter list. While lengthy, it is necessary for 11 parameters and every line adds value. It is front-loaded and organized, though slightly more verbose than strictly necessary.

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 tool with 11 parameters and zero schema descriptions, the description provides comprehensive semantics including defaults, enum values, pagination, and filter behavior. The presence of an output schema covers return-value documentation, making the description complete for a complex query tool.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates fully by documenting every parameter with types, allowed values (e.g., category enum, bucket_width options), semantics (start_time inclusive, end_time exclusive), and defaults (limit per bucket_width). This is exemplary parameter documentation.

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 opens with 'Query time-bucketed API usage for the organization,' which specifies a clear verb (query), resource (API usage), and scope (organization). This clearly distinguishes it from sibling tools that focus on projects, users, invites, service accounts, and costs.

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 implied by the tool's name and description: it is for querying organization API usage. However, there is no explicit guidance on when to use it versus alternatives like openai_get_costs, nor any exclusions or prerequisites. This is a clear context but lacks explicit differentiation.

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

openai_get_userA

Get a single organization member's details.

    Args:
        user_id: The member's user ID (see openai_list_users).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states 'Get' with no additional context about permissions, error behavior, rate limits, or side effects. For a read tool, this is minimal disclosure.

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 front-loaded sentence followed by a compact Args block. There is no unnecessary verbiage, making it highly concise and scannable.

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 simplicity (one parameter, no nested objects) and the presence of an output schema, the description covers the essential purpose and parameter meaning. It lacks detail on failure modes, but the low complexity reduces the need for more.

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 schema provides no description for user_id, but the description adds meaning by calling it 'the member's user ID' and pointing to openai_list_users as a source. This compensates well for the schema's 0% coverage.

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 'Get a single organization member's details' with a specific verb and resource, distinguishing it from list-oriented siblings like openai_list_users and project-specific getters like openai_get_project_user.

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 fetch details for one member) and references openai_list_users for obtaining the user_id. However, it does not explicitly state when not to use it or contrast it with alternatives.

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

openai_invite_userA

Invite a new user to the OpenAI organization by email.

    The invite must be accepted by the user before they gain access. Its
    "status" starts at `pending` until accepted.

    Args:
        email: Email address to invite.
        role: Organization role to grant — `owner` or `reader`.
        projects: Optional list of `{"id": <project_id>, "role": "owner"|"member"}`
            to grant project membership at the same time the invite is accepted.
            If omitted, the user is invited to the default project (legacy
            behavior). Pass an empty list to invite them to no projects at all.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
emailYes
projectsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses key non-obvious behaviors: the invite must be accepted before access, status starts at pending, and the projects parameter has legacy behavior (default project) versus empty list (no projects). It does not mention error conditions or idempotency, but the disclosed behaviors are significant and useful.

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 well-structured: a clear one-sentence purpose, a brief clarifying note about the invite lifecycle, and a cleanly formatted Args section. Every sentence carries necessary information without fluff, and the front-loaded purpose makes the tool's intent immediately clear.

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?

Given the tool's complexity (3 parameters, nuanced projects behavior) and the presence of an output schema, the description is complete. It covers the full invite lifecycle, parameter semantics, and edge cases. No major gaps remain; the output schema handles return-value details.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It thoroughly explains all three parameters: email (address), role (allowed values owner/reader), and projects (format, optional, special meanings of omission vs empty list). This is far more informative than the bare schema, which lacks 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?

The description starts with a specific verb+resource: 'Invite a new user to the OpenAI organization by email.' This clearly distinguishes it from sibling tools like add_project_user (adds existing user) and list_invites (lists invites), making the tool's unique purpose obvious.

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 context on when to use this tool by explaining the invitation flow ('must be accepted', 'status starts at pending') and clarifies behavior of the projects parameter (omitted vs empty list). However, it does not explicitly name alternatives or say 'use this instead of X', which would differentiate it from tools like add_project_user for existing users. Still, the usage context is reasonably clear.

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

openai_list_audit_logsA

List user actions and configuration changes in the organization.

    Args:
        effective_start_time: Only events at/after this Unix timestamp (seconds).
        effective_end_time: Only events before this Unix timestamp (seconds).
        actor_emails: Only events performed by users with these emails.
        actor_ids: Only events performed by these actors (user, service
            account, or API key tracking IDs).
        event_types: Only events of these types, e.g. `project.created`,
            `user.added`, `api_key.deleted`, `invite.sent`. See
            https://platform.openai.com/docs/api-reference/audit-logs/object
            for the full enum.
        project_ids: Only events scoped to these projects.
        resource_ids: Only events affecting these resource IDs.
        after: Pagination cursor from a previous response's `last_id`.
        before: Pagination cursor to fetch the previous page.
        limit: Maximum number of events to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
beforeNo
actor_idsNo
event_typesNo
project_idsNo
actor_emailsNo
resource_idsNo
effective_end_timeNo
effective_start_timeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must convey behavioral traits on its own. It implies a read-only operation via the verb 'List' and details pagination parameters, but it does not explicitly state permission requirements, retention limits, or the lack of side effects. This is moderate transparency.

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 a clear purpose statement, followed by a structured list of arguments. Each sentence is informative and necessary for a 10-parameter tool, with 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?

The description fully explains the purpose and all parameters, and the presence of an output schema covers return values. However, it omits explicit usage context such as authentication requirements or typical scenarios, leaving some gaps for a tool with no annotations.

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

Parameters5/5

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

The input schema has zero property descriptions, so the documentation of all 10 parameters in the description is essential. Each parameter is explained with meaningful context (e.g., time formats, actor types, event type examples), fully compensating for the missing schema 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?

The description clearly states 'List user actions and configuration changes in the organization,' which uses a specific verb and resource. This distinguishes it from sibling tools that manage projects, invites, users, API keys, and other resources, so there is no 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 explicit guidance on when to use this tool versus alternatives. It only lists parameters without any mention of use cases, prerequisites, or situations where another tool would be more appropriate, leaving the agent to infer usage.

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

openai_list_invitesA

List all invites in the organization.

    Each invite's "status" is one of `pending`, `accepted`, or `expired`.

    Args:
        after: Pagination cursor from a previous response's `last_id`.
        limit: Maximum number of invites to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses pagination behavior via the 'after' cursor and 'limit' parameter, and explains the status field values. It does not explicitly state that this is a read-only operation, but 'list' implies it. This is adequate and adds value beyond a bare statement.

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 three sentences, front-loaded with the core purpose, then adds relevant status and pagination details. Every sentence contributes meaningful information with no waste.

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 list tool, the description covers purpose, status values, and pagination. It could mention when to use it versus retrieving a single invite, but the output schema presumably handles return-value documentation. Overall, it is complete enough for the tool's simplicity.

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

Parameters5/5

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

The schema provides no parameter descriptions (0% coverage), but the tool description fully explains both parameters: 'after' as a pagination cursor and 'limit' as the maximum per page. This adds complete meaning beyond the schema.

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 starts with 'List all invites in the organization,' using a specific verb ('list'), resource ('invites'), and scope ('organization'). This clearly distinguishes it from sibling tools like openai_get_invite, which retrieves a single invite.

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 makes the intended use clear: to list all invites in the organization. It does not explicitly state when not to use it or mention alternatives, but the context is unambiguous. It also provides useful status value context (pending/accepted/expired).

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

openai_list_project_api_keysA

List API keys in a project. Key values are always redacted.

    Args:
        project_id: The project's ID (see openai_list_projects).
        owner_project_access: Filter by whether the key owner currently has
            project access — `active`, `inactive`, or `any`.
        after: Pagination cursor from a previous response's `last_id`.
        limit: Maximum number of keys to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
project_idYes
owner_project_accessNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly notes that key values are always redacted, and explains pagination semantics for 'after' and 'limit'. While it doesn't cover auth requirements or rate limits, it addresses the most critical behavioral aspect for a listing tool.

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 compact and well-structured: a one-sentence summary followed by a clean Args list. Each parameter line is informative without redundancy, and the redaction note is a valuable addition with no wasted words.

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 list operation with an output schema present, the description covers all necessary context: it explains the resource, the key parameter (project_id), optional filters, and pagination. It references a sibling tool for ID lookup and discloses the redaction behavior. The description is complete despite lacking annotations.

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

Parameters5/5

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

The schema has zero description coverage, but the description includes a detailed Args block explaining every parameter: project_id with a cross-reference, owner_project_access with valid values (active, inactive, any), after as a pagination cursor, and limit as max results. This fully compensates for the schema's lack of 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?

The description clearly states 'List API keys in a project' with a specific verb and resource, distinguishing it from sibling tools like openai_get_project_api_key (single key) and openai_list_projects (list projects). The scope is explicit, and the note about redacted key values adds clarity.

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 provides clear context for what the tool does (lists API keys in a project) and references openai_list_projects for project_id, but it does not explicitly state when to use this tool over alternatives like openai_get_project_api_key. Usage is implied rather than explicitly guided.

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

openai_list_projectsA

List projects in the organization.

    Args:
        include_archived: If True, also return archived projects (excluded by default).
        after: Pagination cursor from a previous response's `last_id`.
        limit: Maximum number of projects to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
include_archivedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses pagination behavior (after cursor, limit) and the include_archived default, which is useful. However, it does not explicitly state that the operation is read-only or safe, nor does it mention any authentication or rate-limit considerations. The verb 'List' implies non-mutating behavior, but the description does not make it explicit.

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 concise and well-structured. The main purpose is front-loaded in the first sentence, followed by a clean Args section with one-line explanations for each parameter. No unnecessary information is included.

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 list tool with three optional parameters and no required fields, the description covers the essential behavior. The output schema (present) handles return value documentation. The description explains pagination and archive filtering. It lacks some contextual details like auth requirements or error scenarios, but these are not critical for a straightforward list 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?

The input schema has no parameter descriptions (schema coverage 0%), but the description compensates by explaining all three parameters: include_archived (behavior and default), after (pagination cursor from last_id), and limit (maximum per page). This adds meaningful semantics beyond the schema's titles and defaults.

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 'List projects in the organization.' This specifies the verb (list), the resource (projects), and the scope (organization), which distinguishes it from sibling tools like openai_get_project (single project) and other list tools for different resources.

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 to use the tool (when listing projects) but does not provide explicit guidance on alternatives or exclusions. It does not mention, for example, that openai_get_project should be used for a single project, or that archived projects are excluded by default unless include_archived is set. The usage context is straightforward for a list operation but could be more explicit.

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

openai_list_project_usersA

List members of a project.

    Args:
        project_id: The project's ID (see openai_list_projects).
        after: Pagination cursor from a previous response's `last_id`.
        limit: Maximum number of users to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It reveals pagination behavior (after cursor, limit) and project scoping, but omits other traits like authentication requirements, rate limits, or whether archived projects are included. This is adequate for a simple list tool but not rich.

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 concise and well-structured, starting with a one-sentence summary followed by a clean parameter list. There is no fluff 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?

Given the tool's simplicity and the availability of an output schema, the description covers the core aspects: purpose, pagination parameters, and project context. It lacks usage guidance and access prerequisites, but overall it is reasonably complete for a straightforward list operation.

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

Parameters5/5

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

The description explains all three parameters, adding meaning beyond the bare schema. It defines 'after' as a pagination cursor from the previous response's 'last_id', which is non-obvious, and clarifies 'limit' as max users per page. The cross-reference to openai_list_projects for project_id is helpful and practical.

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 tool 'lists members of a project', specifying the verb and resource. This distinguishes it from sibling tools like openai_get_project_user (for a single user) and openai_list_users (all users), by explicitly scoping to a project.

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 explicit guidance is provided on when to use this tool versus alternatives. The only hint is the reference to openai_list_projects for obtaining project_id, but there is no discussion of cases where openai_get_project_user or other list tools would be more appropriate.

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

openai_list_rate_limitsA

List per-model rate limit configs for a project.

    Args:
        project_id: The project's ID (see openai_list_projects).
        after: Pagination cursor from a previous response's `last_id`.
        before: Pagination cursor to fetch the previous page.
        limit: Maximum number of rate limit entries to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
beforeNo
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral burden. The verb 'List' implies a read-only operation, and 'per-model rate limit configs' adds scope, but it does not disclose response behavior, pagination semantics beyond parameter names, or access requirements. Output schema may cover return details.

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 concise and front-loaded, with a clear one-line purpose followed by a compact Args list. Every sentence provides necessary information without 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?

With four parameters and an output schema, the description adequately covers the tool's purpose, scope, and pagination parameters. It could explicitly state the read-only nature or typical use cases, but the essential information for correct invocation is present.

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

Parameters5/5

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

The description includes an Args section explaining all four parameters: project_id is linked to openai_list_projects, after/before are described as pagination cursors, and limit is the maximum entries per page. This fully compensates for the 0% schema description coverage.

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?

Description states 'List per-model rate limit configs for a project' with a specific verb, resource, and scope. This clearly distinguishes it from siblings like openai_update_rate_limit or openai_list_project_api_keys.

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 use for listing rate limits but provides no explicit when-to-use guidance or comparisons with alternatives. The only contextual hint is 'see openai_list_projects' for project_id, indicating a prerequisite rather than use-case differentiation.

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

openai_list_service_accountsA

List service accounts in a project.

    Args:
        project_id: The project's ID (see openai_list_projects).
        after: Pagination cursor from a previous response's `last_id`.
        limit: Maximum number of service accounts to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It adds pagination context by explaining 'after' as a cursor from a previous `last_id` and 'limit' as per-page maximum, which is useful. However, it does not disclose potential side effects (though list is read-only), permission requirements, or ordering/filtering behavior, leaving gaps.

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 concise and well-structured: a one-line summary followed by an Args list. Every sentence adds value, and the parameter explanations are tight. It is front-loaded with the core action and avoids unnecessary verbosity.

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?

The tool has an output schema, so return values need not be explained. The description adequately covers the operation and pagination mechanism. However, it omits potential edge cases (e.g., behavior when no service accounts exist) or any mention of required permissions, which is a minor gap for a list operation of moderate complexity.

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

Parameters5/5

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

Schema description coverage is 0%, but the Args section fully compensates by explaining each parameter: project_id with a reference to another tool, after with pagination cursor semantics, and limit with 'maximum number per page.' This adds significant meaning beyond the bare schema.

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 uses the specific verb 'List' and identifies the resource as 'service accounts in a project,' which clearly distinguishes it from sibling tools like openai_get_service_account (single) and openai_create_service_account (create). This makes the tool's purpose immediately obvious.

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 provides a cross-reference for project_id (see openai_list_projects), but it does not explicitly state when to use this tool versus alternatives like openai_get_service_account, nor does it mention any exclusions (e.g., 'for a single account, use get'). Usage is implied by the verb 'List' but not fully articulated.

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

openai_list_usersA

List members of the OpenAI organization.

    Args:
        emails: Filter by these email addresses.
        after: Pagination cursor from a previous response's `last_id`.
        limit: Maximum number of users to return per page.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
limitNo
emailsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

The description adds useful context about pagination via the 'after' parameter ('Pagination cursor from a previous response's last_id'), which goes beyond the schema. However, with no annotations, it does not disclose whether the operation is read-only, permission requirements, or rate limits. The 'list' verb implies read-only but is not explicit.

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 concise and front-loaded with the purpose statement, followed by a structured Args list. No wasted words; every sentence provides value.

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 list tool with an output schema, the description covers all parameters and the core purpose. It does not explain default behavior (e.g., default limit, ordering) or when to use it, but those are less critical given the existence of an output schema and simple operation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It clearly explains all three parameters: emails (filter), after (pagination cursor), and limit (max per page). This adds meaningful semantics beyond the raw schema types and defaults.

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 'List members of the OpenAI organization', which is a specific verb+resource. It distinguishes from siblings like openai_list_project_users (project members) and openai_get_user (single user) by explicitly scoping to organization members.

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 on when to use this tool versus alternatives is provided. It does not mention that this lists all org users, nor does it distinguish from list_project_users or get_user. The description simply states what it does without usage context.

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

openai_remove_project_userA

Remove a member from a project. Fails if the project is archived.

    Args:
        project_id: The project's ID (see openai_list_projects).
        user_id: The member's user ID (see openai_list_project_users).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It explicitly notes that the operation fails if the project is archived, a non-obvious behavioral constraint. It does not describe consequences like return values, but the presence of an output schema likely covers that, so this is a reasonable disclosure for a simple removal operation.

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 concise sentence followed by a structured Args block with no unnecessary words. It is front-loaded with the core action and failure condition, making it easy for an agent to parse and act upon.

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 two-parameter removal tool, the description covers the primary action, the failure condition, and how to source the required IDs. The existence of an output schema likely covers return values, so the description is sufficiently complete without over-explaining.

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

Parameters5/5

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

The input schema has zero description coverage, so the description's parameter explanations are essential. It clarifies that project_id is the project's ID (pointing to openai_list_projects) and user_id is the member's user ID (pointing to openai_list_project_users). This adds significant meaning beyond the bare schema fields and guides the agent to obtain valid values.

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 'Remove a member from a project' with a specific verb and resource, and the failure condition ('Fails if the project is archived') adds context. This distinguishes it from sibling tools like add_project_user or update_project_user_role, making the purpose unambiguous.

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 Args block references openai_list_projects and openai_list_project_users, providing the prerequisite steps for obtaining the necessary IDs. While it does not explicitly contrast with alternatives (e.g., when to update a role instead of removing), it gives clear context on how to use the tool correctly.

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

openai_remove_userA

Remove a member from the organization.

    Args:
        user_id: The member's user ID (see openai_list_users).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It simply states the action without mentioning that removal is likely permanent, may require admin permissions, or could affect the user's access across all projects. This is a significant gap for a destructive operation.

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 concise, front-loaded with the main action, and includes a single parameter explanation. Every word earns its place with no 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 tool with one parameter and an output schema, the description is adequate at a basic level. However, it lacks important context such as irreversibility, permission requirements, or the distinction from project-level removal. Given the presence of a sibling tool for project removal, more contextual guidance would be beneficial.

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 description defines user_id as 'The member's user ID' and references openai_list_users to obtain it. This adds minor semantic value beyond the schema's bare property name, but it does not explain the ID format or any constraints. Since schema coverage is 0%, the description partially compensates but remains minimal.

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 action ('Remove a member from the organization') with a specific verb and resource. This distinguishes it from sibling tools like openai_update_user_role or openai_remove_project_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 provides a helpful pointer to openai_list_users for obtaining the user_id, but does not clarify when to use this tool versus alternatives like openai_remove_project_user (which removes from a project) or openai_invite_user. This omission could lead to incorrect tool selection.

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

openai_update_projectA

Rename a project.

    Args:
        project_id: The project's ID (see openai_list_projects).
        name: The new project name.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states 'Rename a project' and lists arguments, without mentioning permissions, side effects, reversibility, or any constraints. It adds no behavioral context beyond the operation itself.

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 action phrase followed by a compact Args list. It is front-loaded with the purpose and contains no filler. Every sentence is purposeful and earns its place.

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 rename with two parameters and an output schema, the description is minimally adequate. It provides enough to invoke the tool correctly, but omits error handling, permission requirements, and response details, relying on the 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 schema only provides titles ('Name', 'Project Id') with 0% description coverage. The description compensates by labeling project_id as the project's ID (with a reference to openai_list_projects) and name as the new project name. However, it lacks input format or constraint details.

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 opens with 'Rename a project', a specific verb and resource, clearly distinguishing it from sibling tools like create, archive, or get. The parameter names and the 'see openai_list_projects' hint further clarify 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 Guidelines4/5

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

It explicitly instructs to obtain the project ID via openai_list_projects, giving clear source context for a required argument. It does not mention alternative tools, but the unique 'rename' action implies when to use this tool.

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

openai_update_project_user_roleA

Change a member's role within a project.

    Args:
        project_id: The project's ID (see openai_list_projects).
        user_id: The member's user ID (see openai_list_project_users).
        role: New project role — `owner` or `member`.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
user_idYes
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It simply states the action without disclosing any behavioral traits such as permissions required, reversibility, side effects on existing roles, or potential restrictions (e.g., cannot demote last owner). This is a significant gap for a mutation tool.

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 purpose sentence followed by a compact Args list. Every element is necessary and adds value. It is front-loaded and structured, with no redundant content.

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?

The tool has an output schema (so return values are covered) and all parameters are documented in the description. However, as a mutation tool with no annotations, it lacks critical context about side effects, permissions, or use-case distinctions from sibling tools like openai_update_user_role. This makes it minimally complete but with clear gaps.

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 description coverage is 0%, so the description must compensate. It does: project_id and user_id are explained with pointers to lookup tools, and role explicitly states allowed values ('owner' or 'member'). This adds meaning beyond the raw schema, though it could be more detailed about ID formats or validation.

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 uses a specific verb ('Change') with a clear resource ('a member's role within a project'). The phrase 'within a project' distinguishes it from the sibling tool openai_update_user_role, which likely operates at a different scope. This makes the purpose unambiguous.

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 implies when to use the tool by specifying it changes a role within a project, and the Args show how to obtain the necessary IDs by referencing openai_list_projects and openai_list_project_users. It does not explicitly exclude alternatives, but the context is clear enough for an agent to select this over related tools.

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

openai_update_rate_limitA

Update a project's rate limit for one model.

    Each `max_*` field only applies to relevant model types (e.g.
    max_images_per_1_minute only matters for image models) — check
    openai_list_rate_limits first to see which fields are present for the
    target model before changing them.

    Args:
        project_id: The project's ID (see openai_list_projects).
        rate_limit_id: The rate limit entry's ID (see openai_list_rate_limits).
        max_requests_per_1_minute: New requests-per-minute limit.
        max_tokens_per_1_minute: New tokens-per-minute limit.
        max_images_per_1_minute: New images-per-minute limit.
        max_audio_megabytes_per_1_minute: New audio-megabytes-per-minute limit.
        max_requests_per_1_day: New requests-per-day limit.
        batch_1_day_max_input_tokens: New batch max input tokens per day.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
rate_limit_idYes
max_requests_per_1_dayNo
max_images_per_1_minuteNo
max_tokens_per_1_minuteNo
max_requests_per_1_minuteNo
batch_1_day_max_input_tokensNo
max_audio_megabytes_per_1_minuteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavior. It warns that each 'max_*' field only applies to relevant model types, which is a valuable non-obvious constraint. But it does not clarify whether omitted fields are left unchanged or reset to null, nor the effect of passing null values.

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 front-loaded with the purpose, includes a focused caveat about model types, and uses an Args block for parameter details. It is slightly verbose with repetitive 'New ...' phrasing, but every sentence contributes useful 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?

The tool has 8 parameters and an output schema; the description covers the main caveat and references sibling tools for ID lookup. However, it omits whether updating with no optional parameters is a valid no-op and does not specify that the update is partial (only provided fields change), leaving a gap for a mutation tool.

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 description lists all 8 parameters and adds explanatory context, such as 'New requests-per-minute limit' and references for project_id and rate_limit_id. Since schema description coverage is 0%, this compensation is valuable, though some entries simply restate the parameter names without deeper detail.

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 'Update a project's rate limit for one model' with a specific verb and resource. It distinguishes the tool from sibling openai_list_rate_limits, which is a read-only listing operation.

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?

It explicitly instructs to 'check openai_list_rate_limits first' to see which fields are present, providing a clear prerequisite for correct usage. However, it does not explicitly state when not to use this tool or contrast it with other update tools.

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

openai_update_service_accountA

Update a service account's name and/or role.

    Args:
        project_id: The project's ID (see openai_list_projects).
        service_account_id: The service account's ID (see openai_list_service_accounts).
        name: New name for the service account.
        role: New project role — `owner` or `member`.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
roleNo
project_idYes
service_account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden. It states the operation is an 'Update' (mutation) and that it affects 'name and/or role,' implying partial updates. However, it does not disclose any side effects, permission requirements, or behavior for invalid inputs. It lacks rich behavioral context beyond the basic action.

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 concise sentence followed by a clean Args block. Every line serves a purpose, and the information is front-loaded with the core verb. No fluff or redundant repetition of schema details.

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 tool with four parameters, no annotations, and an output schema (which covers return values), the description provides a solid but not complete picture. It covers the operation and parameter semantics, and references sibling tools for ID discovery. However, it lacks explicit usage guidance (e.g., when to use vs. alternatives) and does not mention any prerequisites like required permissions or error behavior, leaving gaps for a mutation tool.

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 zero descriptions, so the description's Args section adds necessary meaning. It explains each parameter, including the valid values for role ('owner' or 'member'), and provides guidance on how to get project_id and service_account_id. The only minor gap is that it does not clarify that name and role are optional and at least one is likely expected, though 'name and/or role' implies this.

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 action: 'Update a service account's name and/or role.' It specifically identifies the resource (service account) and the fields being modified, distinguishing it from sibling tools like create_service_account, delete_service_account, or update_project_user_role.

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 Args section provides clear context by referencing how to obtain required IDs: 'see openai_list_projects' and 'see openai_list_service_accounts.' This implies the user should first call those list tools to get valid IDs. However, it does not explicitly state when to use this tool over alternatives or mention any exclusions, such as not for updating user roles.

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

openai_update_user_roleA

Change a member's role in the organization.

    Args:
        user_id: The member's user ID (see openai_list_users).
        role: New organization role — `owner` or `reader`.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

Annotations are absent, so the description bears the full burden of behavioral disclosure. It only states the action and allowed role values, without mentioning side effects, permissions required, reversibility, or impact on the user's access. This is a significant gap for a mutating role-change operation.

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 concise, with a single-purpose first sentence and a structured Args list for the parameters. Every sentence earns its place, and there is no redundant information. The format is easily parseable.

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 an output schema exists and the tool is simple, the description covers the basic functionality and parameters. However, it lacks context about important operational constraints, such as whether a user can be demoted to reader if they are the last owner, or any prerequisite like the user being an active member. This leaves gaps for an agent selecting the tool.

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% description coverage, and the description compensates by explaining both parameters: user_id as the member's user ID with a pointer to openai_list_users, and role as either 'owner' or 'reader'. It adds meaning beyond the schema, though it could include more detail like case sensitivity or validation rules.

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 'Change' and the resource 'a member's role in the organization', making it distinct from sibling tools like openai_update_project_user_role. It specifies the organizational scope, which disambiguates it from project-level role changes.

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: to change a user's organization role. It references openai_list_users for obtaining the correct user_id, which is helpful. However, it does not explicitly mention when not to use this tool or alternatives like openai_update_project_user_role, so it stops short of full usage guidance.

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. Dates show when Glama detected each change.

  1. 31 tool updatesv0.1.0
    • First observedopenai_add_project_user
    • First observedopenai_archive_project
    • First observedopenai_create_project
    • First observedopenai_create_service_account
    • First observedopenai_delete_invite
    • First observedopenai_delete_project_api_key
    • First observedopenai_delete_service_account
    • First observedopenai_get_costs
    • First observedopenai_get_invite
    • First observedopenai_get_project
    • First observedopenai_get_project_api_key
    • First observedopenai_get_project_user
    • First observedopenai_get_service_account
    • First observedopenai_get_usage
    • First observedopenai_get_user
    • First observedopenai_invite_user
    • First observedopenai_list_audit_logs
    • First observedopenai_list_invites
    • First observedopenai_list_project_api_keys
    • First observedopenai_list_project_users
    • First observedopenai_list_projects
    • First observedopenai_list_rate_limits
    • First observedopenai_list_service_accounts
    • First observedopenai_list_users
    • First observedopenai_remove_project_user
    • First observedopenai_remove_user
    • First observedopenai_update_project
    • First observedopenai_update_project_user_role
    • First observedopenai_update_rate_limit
    • First observedopenai_update_service_account
    • First observedopenai_update_user_role

TDQS

A3.8/5.0
Disambiguation4/5

Each tool targets a distinct resource/action pair, and the descriptions are clear. A few similarly named tools (e.g., update_project_user_role vs update_user_role, add_project_user vs invite_user) could cause misselection, but their scopes are still distinguishable.

Naming Consistency4/5

The openai_ prefix and a general verb_noun pattern are consistently used. Minor deviations like mixing 'remove' and 'delete' for destructive actions, and 'invite_user' instead of 'create_invite', prevent a perfect score.

Tool Count2/5

At 31 tools, the set exceeds the 'too many' threshold of 25. While the broad domain explains the number, the granularity feels heavy and could have been consolidated (e.g., fewer separate get/list operations).

Completeness4/5

The surface nearly covers all management workflows for projects, users, invites, service accounts, API keys, rate limits, audit logs, usage, and costs. Notable gaps are a standalone API key creation tool and unarchiving projects, but these are edge cases rather than major holes.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MSPbotsAI/openai-workspace-mcp-'

If you have feedback or need assistance with the MCP directory API, please join our Discord server