Red Hat Lightspeed MCP
OfficialThe Red Hat Lightspeed MCP server connects LLM-based agents to Red Hat Lightspeed services, enabling AI-powered management and monitoring of RHEL systems and infrastructure.
System Inventory
List, filter, and search hosts by name or ID
Retrieve host system profiles (CPU, memory, disk, network, installed packages), tags, and metadata
Vulnerability Management
List CVEs affecting your account with filtering by severity, CVSS score, and exploit status
Get detailed CVE information, find affected systems, and list CVEs affecting a specific system
Explain why CVEs are affecting your environment with package-level detail
Advisor / Recommendations
Get active recommendations identifying availability, stability, performance, and security issues
Search by text, Knowledge Base article ID, or rule ID
Find systems affected by a recommendation and view statistics across risk categories
Planning & Lifecycle
View RHEL lifecycle dates (major/minor versions, EUS/E4S/ELS support windows)
List upcoming package changes, deprecations, additions, and enhancements
Get Application Streams lifecycle data relevant to your inventory with upgrade/successor suggestions
Image Builder
List and manage image blueprints and view image build (compose) history and status
Get detailed build information including logs and download URLs
List available distributions and retrieve organization ID for image registration
Subscription & Access
List and retrieve RHEL activation keys for system registration
Query RBAC access permissions across Red Hat Insights applications
List and filter content source repositories
Server Utilities
Get the MCP server version
Retrieve OpenAPI specs for image-builder and vulnerability services
Provides tools for querying and managing Red Hat Lightspeed services including Advisor, Inventory, Vulnerability, Remediations, Planning, and Hosted Image Builder.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Red Hat Lightspeed MCPshow me my top 5 advisor recommendations"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Red Hat Lightspeed MCP
(formerly known as Insights MCP)
Red Hat Lightspeed Model Context Protocol (MCP) server is a lightweight, self-hosted solution that connects LLM-based agents - such as Claude Desktop and other MCP-compatible tools - to Red Hat Lightspeed services.
Features
Supports read-only operations: The server runs in read-only mode by default. Use
--all-toolsto enable write tools (e.g. create blueprints, run composes). RBAC permissions can also restrict access.Provides natural language prompts: provides an ability to use natural language for querying Red Hat Lightspeed services
Related MCP server: AAP MCP Server
Supported Lightspeed Services
Setup and usage
Authentication
Note: Authentication is only required for accessing Red Hat Lightspeed APIs. The MCP server itself does not require authentication.
There are two ways to authenticate:
Service Account (client_id + client_secret) — create a service account and provide the credentials via environment variables or HTTP headers.
JWT Bearer Token — provide a pre-existing JWT token via the
Authorization: Bearer <token>HTTP header (SSE/HTTP transports only).
Service Account Setup
Go to https://console.redhat.com → Click Settings (⚙️ Gear Icon) → "Service Accounts"
Create a service account and remember
Client IDandClient secretfor later. See below in the integration instructions, there they are respectively referred to asLIGHTSPEED_CLIENT_IDandLIGHTSPEED_CLIENT_SECRET.
Required Permissions by Toolset
Different toolsets require specific roles for your service account:
Advisor tools:
RHEL Advisor viewerInventory tools:
Inventory Hosts viewerVulnerability tools:
Vulnerability viewer,Inventory Hosts viewerRemediation tools:
Remediations user
Granting Permissions to Service Accounts
By default, service accounts have no access. An organization administrator must assign permissions. The MCP server will only be able to perform tasks that it has permission to perform. For example, if the user wants to allow read-only operations and deny write operations, this can be accomplished via the permissions system.
For detailed step-by-step instructions, see this video tutorial: Service Account Permissions Setup
Log in as Organization Administrator with User Access administrator role
Navigate to User Access Settings: Click Settings (⚙️ Gear Icon) → "User Access" → "Groups"
Assign permissions (choose one option):
Option A - Create New Group:
Create new group (e.g.,
mcp-service-accounts)Add required roles (e.g., RHEL Advisor viewer, Inventory Hosts viewer, etc.)
Add your service account to this group
Option B - Use Existing Group:
Open existing group with necessary roles
Go to "Service accounts" tab
Add your service account to the group
Your service account will inherit all roles from the assigned group.
⚠️ Security Remarks ⚠️
If you start this MCP server locally (with podman or docker) make sure the container is not exposed to the internet. In this scenario it's probably fine to use LIGHTSPEED_CLIENT_ID and LIGHTSPEED_CLIENT_SECRET although your MCP Client (e.g. VSCode, Cursor, etc.) can get your LIGHTSPEED_CLIENT_ID and LIGHTSPEED_CLIENT_SECRET.
For a deployment where you connect to this MCP server from a different machine, you should consider that LIGHTSPEED_CLIENT_ID and LIGHTSPEED_CLIENT_SECRET (or your JWT Bearer token) are transferred to the MCP server and you are trusting the remote MCP server not to leak them.
In both cases if you are in doubt, please disable/remove the LIGHTSPEED_CLIENT_ID and LIGHTSPEED_CLIENT_SECRET from your account after you are done using the MCP server.
Security & Incident Response (Emergency Revocation)
To ensure safe AI operations and compliance with security standards, operators must be able to rapidly sever the connected LLM's access to Red Hat Lightspeed in the event of abnormal AI behavior, unexpected data exposure, or suspected token compromise.
Emergency "Kill Switch" Procedure:
If you need to immediately revoke AI access to the toolsets, execute the following steps:
Terminate the Server: Stop the MCP container or local process immediately (e.g., run
podman psto find the container, thenpodman stop <container_id>).Revoke Credentials: Invalidate the Red Hat Client ID used by the MCP server to authenticate with Red Hat services. Go to the "Service Accounts" page and
DeleteorResetthe credentials.
Additionally you can remove the MCP server entry (e.g., lightspeed-mcp in your client's mcp.json) from your local LLM client's configuration to prevent the client from attempting to restart or reconnect to the server.
If credential compromise or data exposure is suspected, assess breach notification obligations under applicable law (e.g., GDPR). For logging, debug mode, and compliance details, see HACKING.md - Logging and Compliance.
Technical Info
Toolsets
See toolsets.md for the toolsets available in the MCP server.
Integrations
Prerequisites
Make sure you have podman installed.
(Docker is fine too but the commands below have to be adapted accordingly)
You can install it with sudo dnf install podman on Fedora/RHEL/CentOS,
or on macOS follow the instructions of Podman Desktop or Podman.
⚠️ Note if you use Podman on macOS, you sometimes need to set the path to podman explicitly.
E.g. replace podman with the full path. Should be something like
/usr/local/bin/podman/opt/homebrew/bin/podman…
You can find the path by running which podman in your terminal.
Goose Desktop
First check the prerequisites section.
Option 1: One-click installation (easiest)
The badge uses an HTTPS redirect (goose-docs.ai/extension?...) that opens Goose Desktop's extension install flow.
(Note: this uses the quay.io container image and docker as the command — Goose deeplinks only support docker, not podman. Use the manual install below if you rely on Podman.)
After clicking, Goose prompts for LIGHTSPEED_CLIENT_ID and LIGHTSPEED_CLIENT_SECRET, then installs the extension. Start a new chat session to use it.
Option 2: Manual STDIO installation
Click the button in the top-left to open the sidebar.
Click the
Extensionsbutton on the sidebar.Under
Extensions, clickAdd custom extension.On the
Add custom extensionmodal, enter:Type:
Standard IOID:
red-hat-lightspeed-mcpName:
Red Hat Lightspeed MCPDescription:
Red Hat Lightspeed MCP server integrationCommand:
podman run --env LIGHTSPEED_CLIENT_ID --env LIGHTSPEED_CLIENT_SECRET --interactive --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latestEnvironment variables: click
Addfor each:LIGHTSPEED_CLIENT_ID— Red Hat Lightspeed Client IDLIGHTSPEED_CLIENT_SECRET— Red Hat Lightspeed Client Secret
Timeout: leave default (300s) unless needed
Click
Add.
Docker users can replace podman with docker in the command. On macOS, if Goose cannot find podman, use the full path from which podman (see prerequisites).
Cursor
First check the prerequisites section.
Option 1: One-click installation (easiest)
⚠️ Use Ctrl/Cmd-click to open in a new tab.
Otherwise the tab will close after installation and you won't see the documentation anymore.
(Note: this uses the
quay.io container image)
Option 2: Manual STDIO installation
Cursor doesn't seem to support inputs you need to add your credentials in the config file.
To start the integration create a file ~/.cursor/mcp.json with
{
"mcpServers": {
"lightspeed-mcp": {
"type": "stdio",
"command": "podman",
"args": [
"run",
"--env",
"LIGHTSPEED_CLIENT_ID",
"--env",
"LIGHTSPEED_CLIENT_SECRET",
"--interactive",
"--rm",
"ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest"
],
"env": {
"LIGHTSPEED_CLIENT_ID": "",
"LIGHTSPEED_CLIENT_SECRET": ""
}
}
}
}If you see the error Some tools have naming issues and may be filtered out., see Known Issues.
Option 3: Manual Streamable HTTP installation (advanced)
start the server:
podman run --net host --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest httpthen integrate using service account credentials:
{
"mcpServers": {
"lightspeed-mcp": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": {
"lightspeed-client-id": "",
"lightspeed-client-secret": ""
}
}
}
}or alternatively using a JWT Bearer token:
{
"mcpServers": {
"lightspeed-mcp": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer <YOUR_JWT_TOKEN>"
}
}
}
}VSCode
First check the prerequisites section.
Option 1: One-click installation (easiest)
(Note: this uses the
quay.io container image)
Option 2: Manual STDIO installation
For the usage in your project, create a file called .vscode/mcp.json with
the following content.
{
"inputs": [
{
"id": "lightspeed_client_id",
"type": "promptString",
"description": "Enter the Red Hat Lightspeed Client ID",
"default": "",
"password": true
},
{
"id": "lightspeed_client_secret",
"type": "promptString",
"description": "Enter the Red Hat Lightspeed Client Secret",
"default": "",
"password": true
}
],
"servers": {
"lightspeed-mcp": {
"type": "stdio",
"command": "podman",
"args": [
"run",
"--env",
"LIGHTSPEED_CLIENT_ID",
"--env",
"LIGHTSPEED_CLIENT_SECRET",
"--interactive",
"--rm",
"ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest"
],
"env": {
"LIGHTSPEED_CLIENT_ID": "${input:lightspeed_client_id}",
"LIGHTSPEED_CLIENT_SECRET": "${input:lightspeed_client_secret}"
}
}
}
}Gemini CLI
First check the prerequisites section.
Option 1: Manual STDIO installation
To start the integration create a file ~/.gemini/settings.json with the following command:
{
...
"mcpServers": {
"lightspeed-mcp": {
"type": "stdio",
"command": "podman",
"args": [
"run",
"--env",
"LIGHTSPEED_CLIENT_ID=<YOUR_CLIENT_ID>",
"--env",
"LIGHTSPEED_CLIENT_SECRET=<YOUR_CLIENT_SECRET>",
"--interactive",
"--rm",
"ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest"
]
}
}
}Option 2: Manual Streamable HTTP installation (advanced)
start the server:
podman run --net host --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest httpFor podman machine on a mac you will need to set the host explicitly and expose the port
podman run -p 8000:8000 --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest http --host 0.0.0.0then integrate using service account credentials:
{
...
"mcpServers": {
"lightspeed-mcp": {
"httpUrl": "http://localhost:8000/mcp",
"headers": {
"lightspeed-client-id": "<YOUR_CLIENT_ID>",
"lightspeed-client-secret": "<YOUR_CLIENT_SECRET>"
}
}
}
}or alternatively using a JWT Bearer token:
{
...
"mcpServers": {
"lightspeed-mcp": {
"httpUrl": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer <YOUR_JWT_TOKEN>"
}
}
}
}Claude Desktop
First check the prerequisites section.
For Claude Desktop there is an extension file in the release section of the project.
Just download the red-hat-lightspeed-mcp*.mcpb file (or red-hat-lightspeed-mcp*.dxt for legacy format) and add this in Claude Desktop with
Settings -> Extensions -> Advanced Extensions Settings -> Install Extension…
CLine with VSCode
First check the prerequisites section.
First off, start the SSE server with sse argument:
export LIGHTSPEED_CLIENT_ID=<YOUR_CLIENT_ID>
export LIGHTSPEED_CLIENT_SECRET=<YOUR_CLIENT_SECRET>
podman run --env LIGHTSPEED_CLIENT_ID --env LIGHTSPEED_CLIENT_SECRET --net host --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latest sseIn the CLine -> Manage MCP Servers interface, add a new server name and URL:
http://localhost:9000/sse. It shall create the following config:
{
"mcpServers": {
"lightspeed-mcp": {
"disabled": false,
"type": "sse",
"url": "http://localhost:9000/sse"
}
}
}Ensure the type is sse as CLine does not support HTTP transport yet.
Generic STDIO
First check the prerequisites section.
For generic integration into other tools via STDIO, you should set the environment variables
LIGHTSPEED_CLIENT_ID and LIGHTSPEED_CLIENT_SECRET and use this command for an
integration using podman:
export LIGHTSPEED_CLIENT_ID=<YOUR_CLIENT_ID>
export LIGHTSPEED_CLIENT_SECRET=<YOUR_CLIENT_SECRET>
podman run --env LIGHTSPEED_CLIENT_ID --env LIGHTSPEED_CLIENT_SECRET --interactive --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latestIt is the MCP API what is exposed through standard input, not a chat interface.
You need an MCP client with "agent capabilities" to connect to the red-hat-lightspeed-mcp server and really use it.
Claude Code
First check the prerequisites section.
Claude Code requires a slight change to the podman command, as the host environment is not
available when it runs. The credentials must be copied into the configuration instead, which
can be done with the following command after setting LIGHTSPEED_CLIENT_ID and
LIGHTSPEED_CLIENT_SECRET environment variables:
export LIGHTSPEED_CLIENT_ID=<YOUR_CLIENT_ID>
export LIGHTSPEED_CLIENT_SECRET=<YOUR_CLIENT_SECRET>
claude mcp add red-hat-lightspeed-mcp -- podman run --env LIGHTSPEED_CLIENT_ID=$LIGHTSPEED_CLIENT_ID --env LIGHTSPEED_CLIENT_SECRET=$LIGHTSPEED_CLIENT_SECRET --interactive --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latestor just set the variables in the command directly:
claude mcp add red-hat-lightspeed-mcp -- podman run --env LIGHTSPEED_CLIENT_ID=<YOUR_CLIENT_ID> --env LIGHTSPEED_CLIENT_SECRET=<YOUR_CLIENT_SECRET> --interactive --rm ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latestTo verify setup was successful, within the Claude terminal execute the command:
/mcpIf successful, you should see red-hat-lightspeed-mcp listed under Manage MCP servers with a green check mark connected status besides it.
URL overrides
If you are using a non-standard RH Lightspeed URL, set the environment variables
LIGHTSPEED_BASE_URLLIGHTSPEED_SSO_BASE_URLLIGHTSPEED_PROXY_URLaccordingly.
Agent Skills
This project includes Agent Skills — portable instructions that teach AI assistants how to set up and use Red Hat Lightspeed MCP. Skills are loaded automatically when you open the project in a supported assistant (Cursor, Claude Code, etc.).
Install with Lola
Lola is a universal AI Context Package Manager. Use it to install Lightspeed MCP skills into any supported AI assistant without cloning the full repo:
# Install Lola (one-time)
uv tool install lola-ai
# Add the Lightspeed marketplace (one-time)
lola market add rh-lightspeed https://raw.githubusercontent.com/RedHatInsights/insights-mcp/main/lola-marketplace.yml
# Install skills to your AI assistant
lola install rh-lightspeed-mcp-skills -a cursor
lola install rh-lightspeed-mcp-skills -a claude-code
lola install rh-lightspeed-mcp-skills -a gemini-cliAvailable skills are in the .agents/skills/ directory.
Examples
This blog post has a few examples on how to use the RH Lightspeed MCP server.
You can also ask LLM you just attached to the MCP server to. e.g.
Please explain red-hat-lightspeed-mcp and what I can do with it?For example questions specific to each toolset please have a look at the test files:
CLI
For some use cases it might be needed to use the MCP server directly from the command line. See usage.md for the usage of the MCP server.
Releases
There are two container images published for this MCP server.
ghcr.io/redhatinsights/red-hat-lightspeed-mcp:latestquay.io/redhat-services-prod/insights-management-tenant/insights-mcp/red-hat-lightspeed-mcp:latest
They are both based on main branch and you can use either of them.
Insights-branded images are deprecated but still available for a while but might be removed in the future.
ghcr.io/redhatinsights/insights-mcp:latestquay.io/redhat-services-prod/insights-management-tenant/insights-mcp/insights-mcp:latest
Known Issues
Cursor
When using Cursor with the MCP server, you might encounter the following error:
Some tools have naming issues and may be filtered out.
… exceeds 60 characters…Please rename your MCP server name in the MCP configuration file (mcp.json) to a shorter name.
{
"mcpServers": {
"red-hat-lightspeed-mcp-this-will-be-too-long": { # <--- rename this
…Disclaimer
This software is provided "as is" without warranty of any kind, either express or implied. Use at your own risk. The authors and contributors are not liable for any damages or issues that may arise from using this software.
Shared auth package
The OAuth/JWT auth provider used by this server for HTTP transport deployments is provided by
rh-fastmcp-server-commons, a PyPI package
shared across Red Hat FastMCP servers. See HACKING.md
for usage and environment variable reference.
Contributing
Please refer to the hacking guide to learn more.
Available Tools
39 toolsadvisor__get_active_rulesGet Active Advisor Recommendations for AccountARead-onlyIdempotent
Get active Advisor Recommendations for your account that help identify issues affecting system availability, stability, performance, or security.
Use filters to find recommendations by impact level, likelihood, systems affected, workspace, tags, and automatic remediation availability. Higher impact/likelihood values indicate more critical issues.
Call examples: Standard call: {"impacting": true, "offset": 0, "limit": 20} High risk only: {"impacting": true, "impact": "3,4", "likelihood": "3,4"} Pagination: {"offset": 20, "limit": 20} With automatic remediation: {"has_automatic_remediation": true} Security and Performance categories: {"category": "2,4"} Reboot required: {"reboot": true} Sorted by total risk: {"sort": "-total_risk"} For workspaces 'workspace1': {"impacting": true, "groups": "workspace1"} For systems tagged 'database-servers': { "impacting": true, "tags": ["insights-client/group=database-servers"] }
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field as comma-separated string. Example: '-total_risk,rule_id'. Available fields: category, description, impact, impacted_count, likelihood, playbook_count, publish_date, resolution_risk, rule_id, total_risk. Use '-' prefix for descending order. | -total_risk |
| tags | No | Filter based on system tags. Accepts a single tag or a comma-separated list.Used only when impacting=True. Tag format: 'namespace/key=value'. Example: 'satellite/group=database-servers,insights-client/security=strict' | |
| limit | No | Pagination: Maximum number of results per page. | |
| groups | No | Filter based on workspace names. Comma separated list of workspace names.Used only when impacting=True. Example: 'workspace1,workspace2' | |
| impact | No | Impact level filter as comma-separated string, Example: '1,2,3'. Accepted values: 1 (Low), 2 (Medium), 3 (High), 4 (Critical). Use only these exact values: 1, 2, 3, or 4. | |
| offset | No | Pagination offset to skip specified number of results. Used with limit. | |
| reboot | No | Filter recommendations that require a reboot to fix. | |
| category | No | Recommendation category filter as comma-separated string, Example: '1,2,3'. Accepted values: 1 (Availability), 2 (Security), 3 (Stability), 4 (Performance). | |
| incident | No | Only show recommendations that cause incidents. | |
| impacting | No | Only show recommendations currently impacting systems. | |
| likelihood | No | Likelihood level filter as comma-separated string, Example: '1,2,3'. Accepted values: 1 (Low), 2 (Medium), 3 (High), 4 (Very High). Use only these exact values: 1, 2, 3, or 4. | |
| has_automatic_remediation | No | Only show recommendations that have a playbook for automatic remediation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the annotations (readOnlyHint=true, etc.) by explaining that the tool retrieves active recommendations that help identify issues affecting system availability, stability, performance, or security, and that higher impact/likelihood values indicate more critical issues. It also demonstrates typical usage patterns via examples. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise, starting with a clear purpose sentence followed by a brief overview of filters and numerous call examples. The examples are well-organized but somewhat lengthy. The structure is effective, though the examples could be trimmed or moved into a separate documentation section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown but stated 'Has output schema: true'), the description does not need to explain return values. It covers the tool's purpose, filter capabilities, and provides usage examples covering pagination, common filters, and sorting. The examples imply pagination and case usage. Minor gaps include no explicit mention of default sorting or the list nature of the response, but the examples compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 12 parameters, each with explicit descriptions. The description adds some value by providing specific call examples that show parameter usage (e.g., 'impact': '3,4', 'tags': ['insights-client/group=database-servers']). However, it does not significantly deepen semantic understanding beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'active Advisor Recommendations for your account', and explains what these recommendations help identify (system availability, stability, performance, or security). It distinguishes from sibling tools like advisor__get_hosts_details_for_rule or advisor__get_recommendations_stats by focusing on active recommendations with user-controllable filtering, not host details or statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides numerous call examples that implicitly illustrate when to use various filters (e.g., for high risk, pagination, automatic remediation, security categories). However, it lacks explicit guidance on when to use this tool versus sibling tools, such as advisor__get_rule_details or advisor__get_rule_by_text_search. The verb 'Get' and the mention of filters imply retrieval, but no direct comparison to alternatives is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advisor__get_hosts_details_for_ruleGet Detailed System Information for Advisor RecommendationARead-onlyIdempotent
Get detailed information about RHEL systems affected by a specific Advisor Recommendation.
Returns paginated system details with comprehensive information about each affected system, including system identification, impact metrics, RHEL version, and last seen timestamps. Each system entry contains hit counts categorized by severity level and incident status.
Call examples: Standard call: {"rule_id": "xfs_with_md_raid_hang|XFS_WITH_MD_RAID_HANG_ISSUE_DEFAULT_KERNEL"} With pagination: {"rule_id": "rule_id", "limit": 20, "offset": 0} Filter by RHEL version: {"rule_id": "rule_id", "rhel_version": "9.4"} Combined filters: {"rule_id": "rule_id", "limit": 50, "offset": 20, "rhel_version": "8.9"}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Pagination: Maximum number of results per page. | |
| offset | No | Pagination offset to skip specified number of results. Used with limit. | |
| rule_id | Yes | Recommendation identifier in format: rule_name|ERROR_KEY. | |
| rhel_version | No | Filter systems by RHEL version. Accepts a comma-separated string or a list. Allowed values: 6.0-6.10, 7.0-7.10, 8.0-8.10, 9.0-9.8, 10.0-10.2. Example: '9.3,9.4,9.5' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and no destructive action. The description adds value by detailing pagination, returned fields (system identification, impact metrics, RHEL version, hit counts, incident status), and no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main verb and resource, followed by details and examples. It is structured but slightly wordy; could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers the return content and provides examples for common use cases, making it complete for the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With full schema coverage, baseline is 3. The description provides concrete call examples showing parameter combinations (pagination, filtering) and usage patterns, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets detailed information about RHEL systems affected by an Advisor Recommendation. It uses specific verbs and resource, but does not explicitly differentiate from the sibling tool advisor__get_hosts_hitting_a_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage examples and implies when to call this tool, but does not explicitly state when not to use it or name alternatives like the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advisor__get_hosts_hitting_a_ruleGet Systems Affected by Advisor RecommendationARead-onlyIdempotent
Get all RHEL systems affected by a specific Advisor Recommendation.
Shows which systems in your infrastructure have the issue identified by this recommendation. Use this to understand the scope of impact.
Call Examples: Standard call: {"rule_id": "xfs_with_md_raid_hang|XFS_WITH_MD_RAID_HANG_ISSUE_DEFAULT_KERNEL"}
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Recommendation identifier in format: rule_name|ERROR_KEY. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false. Description adds call example but no additional behavioral context like permissions or rate limits. Adequate given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: three sentences plus example. Front-loaded with main purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values not needed. For a simple read tool with one parameter, description is sufficient. Could mention if results are paginated or any limits, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the one parameter with description. Description adds a call example showing the format for rule_id, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states verb 'Get' and resource 'all RHEL systems affected by a specific Advisor Recommendation' clearly. Distinguishes from siblings like advisor__get_active_rules which lists rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Says 'Use this to understand the scope of impact' but does not explicitly exclude alternatives or state when not to use. Implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advisor__get_recommendations_statsGet Statistics of Recommendations Across Categories and RisksARead-onlyIdempotent
Show statistics of recommendations across categories and risks.
Call examples: Standard call showing all recommendations: {} Statistics for the workspace 'workspace1': {"groups": "workspace1"} Statistics for systems tagged 'insights-client/security=strict': {"tags": "insights-client/security=strict"}
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter based on system tags. Accepts a single tag or a comma-separated list.Used only when impacting=True. Tag format: 'namespace/key=value'. Example: 'satellite/group=database-servers,insights-client/security=strict' | |
| groups | No | Filter based on workspace names. Comma separated list of workspace names.Used only when impacting=True. Example: 'workspace1,workspace2' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the description's 'Show statistics' is consistent. The description adds no additional behavioral details beyond the annotation set, meeting the baseline for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence purpose followed by three illustrative call examples. Every sentence adds value, and the structure is front-loaded for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, return values are covered externally. The description explains the tool's purpose, parameters, and typical usage patterns (all vs. filtered). It is fully complete for its complexity level and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema descriptions already explain parameters. The call examples add practical usage context (e.g., 'Statistics for the workspace workspace1') which enhances understanding beyond the schema, justifying a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool shows statistics of recommendations across categories and risks, with a clear verb-resource combination. It distinguishes from sibling tools like advisor__get_rule_details or advisor__get_active_rules which focus on rules rather than aggregated statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Call examples demonstrate standard usage and filtering by groups or tags, giving clear context for parameter use. However, it does not explicitly state when not to use this tool or provide alternative suggestions, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advisor__get_rule_by_text_searchFind Advisor Recommendations by Text SearchARead-onlyIdempotent
Finds Advisor Recommendations that contain an exact text substring.
Call examples: Standard call: {"text": "xfs"}
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text substring to search for. Example: 'xfs' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description confirms exact text substring matching, which adds minimal behavioral detail beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: one sentence plus a usage example. No superfluous information, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. The description adequately covers the simple search functionality, though it omits details like case sensitivity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the single parameter with a description. The tool description adds a call example demonstrating the parameter usage, providing extra context beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds Advisor Recommendations by exact text substring search. It distinguishes itself from siblings by specifying the search mechanism, but does not explicitly differentiate from similar advisor tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like advisor__get_rule_details or advisor__get_recommendations_stats. The example shows usage but does not provide context for choosing this search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advisor__get_rule_detailsGet Detailed Advisor Recommendation InformationARead-onlyIdempotent
Get detailed information about a specific Advisor Recommendation, including impact level, likelihood, remediation steps, and related knowledge base articles.
Call Examples: Standard call: {"rule_id": "xfs_with_md_raid_hang|XFS_WITH_MD_RAID_HANG_ISSUE_DEFAULT_KERNEL"}
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Recommendation identifier in format: rule_name|ERROR_KEY. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. Description adds useful behavioral context by listing the types of information returned (impact, likelihood, remediation, articles), which goes beyond annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with two sentences plus an example, front-loaded with purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 adequately covers what the tool returns (impact, likelihood, etc.). It is contextually complete given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter rule_id, which already describes the format. Description adds an example call, providing some extra context, but baseline is 3 due to full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves detailed information about a specific Advisor Recommendation, including impact, likelihood, remediation, and articles. It distinguishes from sibling tools like advisor__get_active_rules (list) and advisor__get_rule_by_text_search (search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Sibling tools are listed but not contrasted, and no when-not-to-use scenarios are provided. Only a call example is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advisor__get_rule_from_node_idFind Advisor Recommendations using Knowledge Base solution ID or article IDARead-onlyIdempotent
Find Advisor Recommendations related to a specific Knowledge Base article or solution.
Use this when you have a Knowledge Base article or solution ID and want to find corresponding Advisor Recommendations that provide system-specific remediation steps.
Call examples: Standard call: {"node_id": 123456}
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | Node ID of the knowledge base article or solution. Example: 123456 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds that the tool provides 'system-specific remediation steps,' which enriches the behavioral understanding without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three short sentences: purpose, usage guideline, and an example call. Every sentence adds value, and it is front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with one parameter and an output schema, the description is complete. It explains the input (node_id) and the purpose (finding related Advisor Recommendations with remediation steps), which is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes node_id as 'Node ID of the knowledge base article or solution. Example: 123456'. The description repeats this with a call example but adds no new semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool finds Advisor Recommendations using a Knowledge Base article or solution ID. It specifies the resource and action, but does not explicitly differentiate from sibling tools like 'advisor__get_rule_by_text_search' or 'advisor__get_rule_details', leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you have a Knowledge Base article or solution ID,' providing clear context for when to use the tool. However, it does not mention when not to use it or suggest alternative tools among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content-sources__list_repositoriesList repositories with filtering and pagination options.ARead-only
List repositories with filtering and pagination options.
🟢 CALL IMMEDIATELY - No information gathering required.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Filter by repository URL (case-insensitive). | |
| arch | No | Filter by architecture (e.g., 'x86_64', 'aarch64'). | |
| name | No | Filter by repository name (case-insensitive). | |
| limit | No | Maximum number of repositories to return (default: 10, maximum: 100). **ALWAYS use the default value of 10 for the first call.** This default is carefully chosen for performance and context management. Only increase this value if the user explicitly asks to see more repositories at once. | |
| offset | No | Number of repositories to skip for pagination (default: 0). | |
| origin | No | Filter by origin (e.g., 'red_hat', 'external'). | |
| enabled | No | Filter by enabled status (True/False). | |
| version | No | Filter by version (e.g., '8', '9'). | |
| content_type | No | Filter by content type (e.g., 'rpm', 'ostree'). | |
| include_gpg_key | No | Include GPG key content in the response (default: False). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already cover the safety profile. The description adds a behavioral cue that no information gathering is needed, but it does not describe pagination behavior, response size, or any side effects. With annotations present, this is acceptable but not deeply transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loads the call-to-action. However, the first sentence only repeats the tool title/name, slightly wasting the opening line. Overall, it is efficient and avoids bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a rich input schema with 100% parameter coverage and an output schema exists, the description does not need to explain return values. It adequately introduces the tool's purpose and immediate-call guidance, but does not provide deeper context like common usage patterns or relationship to other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented with its meaning and default. The description adds only generic 'filtering and pagination' context beyond the schema, which is unnecessary but not harmful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List repositories with filtering and pagination options', identifying the specific verb, resource, and scope. It distinguishes itself from sibling tools, which target images, vulnerabilities, inventory, and RHSM, not content repositories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'CALL IMMEDIATELY - No information gathering required,' giving clear guidance that no prerequisites are needed. It does not name alternatives or when-not-to-use, but among the siblings there is no competing repository-listing tool, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcp_versionARead-only
Get the version of the Red Hat Insights MCP server. Always call this if the user asks for the version of the Red Hat Insights MCP server. or when there is an API or authentication issue. Present the comparison URL to the user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds that it returns a version and includes a comparison URL, but does not detail other behaviors (e.g., rate limits, auth). For a simple read-only tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the purpose and immediately provide usage context and output handling. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema, and readOnly annotation, the description covers when to use, what it returns, and what to do with the result. It is complete for a simple version retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The baseline is 4 per guidelines. The description correctly omits parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the version of the Red Hat Insights MCP server. It uses a specific verb ('Get') and resource ('version'), and no sibling tool serves a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to call this tool: when the user asks for the version, or during API/authentication issues. It also tells the agent to present a comparison URL, leaving no ambiguity about usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_blueprint_detailsGet blueprint details.BRead-only
Get blueprint details.
🟢 CALL IMMEDIATELY - No information gathering required.
Returns: Blueprint details
Raises: Exception: If the image-builder connection fails.
| Name | Required | Description | Default |
|---|---|---|---|
| blueprint_identifier | Yes | The UUID, name or reply_id to query |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'CALL IMMEDIATELY' adds minor context. It mentions raising an exception on connection failure, but lacks details on what happens if the blueprint does not exist or the identifier is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, but it includes some redundancy (repeats 'blueprint details' in the first line and under 'Returns'). The structure is functional, but could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. However, it omits information about required input validity (e.g., what happens if the blueprint identifier does not exist) and does not fully leverage the annotations to provide comprehensive context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with parameter 'blueprint_identifier' described as 'The UUID, name or reply_id to query.' The description does not add any further semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get blueprint details,' indicating retrieval of a single blueprint's details. However, it does not distinguish itself from sibling tools like image-builder__get_blueprints, which lists blueprints, or image-builder__get_compose_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes 'CALL IMMEDIATELY - No information gathering required,' suggesting it is safe to call, but it provides no explicit guidance on when to use this tool over alternatives such as other get_* tools in the image-builder domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_blueprintsShow user's image blueprints (saved image templates/configurations forARead-only
Show user's image blueprints (saved image templates/configurations for Linux distributions, packages, users).
🟢 CALL IMMEDIATELY - No information gathering required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return (use 7 as default) | |
| offset | No | Number of items to skip when paging (use 0 as default) | |
| search_string | No | Substring to search for in the name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and openWorldHint=true. The description adds value by stating 'CALL IMMEDIATELY' and clarifying that no prior gathering is needed, which aligns with the read-only nature. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences: first for purpose, second for usage hint. No redundant words; every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations that cover read-only and open-world hints, the description fully covers what the tool does and when to use it. No gaps remain for this straightforward list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 3 parameters with descriptions (100% coverage). The description does not add additional parameter semantics, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Show user's image blueprints' with a specific verb and resource, and elaborates on content (saved templates/configurations for Linux distributions, packages, users). It distinguishes from sibling tools like image-builder__get_blueprint_details which focuses on a single blueprint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes '🟢 CALL IMMEDIATELY - No information gathering required', providing explicit guidance on when to use. However, it does not specify when not to use or compare to alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_compose_detailsGet detailed information about a specific image build.ARead-only
Get detailed information about a specific image build.
⚠️ REQUIRES: You MUST have the compose UUID from get_composes() first. ⚠️ NEVER call this with generic terms like "latest", "recent", or "my build" 🟢 CALL IMMEDIATELY - No information gathering required.
Process:
User asks about build status → call get_composes()
Find the desired compose and copy its UUID
Call this function with that exact UUID
Returns: Detailed compose information including: - Full status and progress - Error messages if failed - Download URLs if completed - Build logs - Artifact details
| Name | Required | Description | Default |
|---|---|---|---|
| compose_identifier | Yes | The exact UUID string from get_composes() |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark as read only and open world. Description adds specific return details (status, progress, errors, download URLs, logs) and process context, but no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections for requirements, warnings, process, and returns. Every sentence adds value. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity, 100% schema coverage, output schema present, and annotations, the description fully covers prerequisites, process, and return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description adds crucial meaning: parameter must be exact UUID from get_composes(), not generic terms. This goes beyond schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description explicitly state it gets detailed info for a specific image build. It distinguishes from siblings like get_composes (list) and get_blueprint_details by requiring a UUID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit instructions: requires compose UUID from get_composes(), warns against generic terms, and outlines a clear process from user request to function call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_composesGet a list of all image builds (composes) with their UUIDs and basic status.ARead-only
Get a list of all image builds (composes) with their UUIDs and basic status.
ALWAYS USE THIS FIRST when checking image build status or finding builds. This returns the UUID needed for get_compose_details. 🟢 CALL IMMEDIATELY - No information gathering required.
Common uses:
Check status of recent builds → call this first
Find your latest build → call this first
Get any build information → call this first Ask the user if they want to get more composes and adapt "offset" accordingly.
You can also provide this link so the user can check directly in the UI: https://console.redhat.com/insights/image-builder
Returns: List of composes with: - uuid: The unique identifier (REQUIRED for get_compose_details) - name: Blueprint name used - status: Current build status - created_at: When the build started
Example response: [ { "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "my-rhel-image", "status": "RUNNING", "created_at": "2025-01-18T10:30:00Z" } ]
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return (use 7 as default) | |
| offset | No | Number of items to skip when paging (use 0 as default) | |
| search_string | No | Substring to search for in the name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, so the description does not need to reiterate that. The description adds context beyond annotations: it explains the return structure (UUID, name, status, created_at) and provides an example response. It also mentions a link to the UI. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loaded with the key instruction, and uses bullet points and an example response. Every sentence adds value, and it is concise without being terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (list with pagination and search), the description covers purpose, usage, parameters, return structure, and an example. It does not mention error conditions or empty responses, but these are minor omissions. The output schema is implied by the example response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds value by reiterating default values (limit 7, offset 0) and providing usage guidance for offset (asking user if they want more composes). It also explains the search_string as substring search.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get a list of all image builds (composes) with their UUIDs and basic status.' It uses a specific verb+resource and distinguishes from sibling tools like get_compose_details by stating that this returns the UUID needed for that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage guidance: 'ALWAYS USE THIS FIRST' when checking image build status or finding builds. It lists common use cases and instructs to ask the user about adapting offset for pagination. It does not explicitly state when not to use, but the context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_distributionsGet the list of distributions available to build images with.ARead-only
Get the list of distributions available to build images with.
🟢 CALL IMMEDIATELY - No information gathering required.
Emphasize that there is support only for Red Hat Enterprise Linux (RHEL) images and there only for the latest minor version of each major version. Emphasize that Fedora images are "similar" to the upstream but no official versions! Emphasize that CentOS Stream is not supported by Red Hat.
Returns: List of distributions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint. The description adds important behavioral context beyond annotations, such as the limited version support for RHEL and the unsupported status of CentOS Stream. This helps the agent understand the tool's behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, using sections, emoji, and bold for clarity. Every sentence adds value: immediate usage instruction, key distribution details, and return type. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an existing output schema, the description is complete. It explains what distributions are included/excluded and returns a list, providing sufficient context for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (schema coverage 100%). The description explains the return value ('List of distributions'), adding meaning beyond the schema. Since no parameters, it effectively covers what the tool outputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of distributions for image building. It specifies support for RHEL (only latest minor version), Fedora (similar but no official versions), and explicitly mentions CentOS Stream is not supported, distinguishing it from other image-builder tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes '🟢 CALL IMMEDIATELY - No information gathering required,' which provides explicit usage guidance. It also explains distribution specifics, helping the agent decide when to use this tool, though it does not directly compare to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_openapiGet OpenAPI spec. Use this to get details e.g for a new blueprintARead-only
Get OpenAPI spec. Use this to get details e.g for a new blueprint
🟢 CALL IMMEDIATELY - No information gathering required.
Optional parameters:
endpoints: Comma-separated endpoint specs (like
GET:/blueprints,POST:/blueprints). When provided, the returned OpenAPI is minimized to only the selected paths and their transitive component references. Use this only to prepare payloads forcreate_blueprintorupdate_blueprint.
Returns: OpenAPI specification JSON (possibly reduced when 'endpoints' is provided)
Raises: Exception: If the image-builder connection fails.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoints | No | Comma-separated list of endpoint specs to reduce the spec, e.g. 'GET:/blueprints,POST:/blueprints'. Only needed for create_blueprint/update_blueprint. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint, and the description adds context about returned JSON and potential exception. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose with emoji and optional parameter section, but purpose is front-loaded. Could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations are present, the description is complete enough, covering return value, parameter usage, and error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by explaining the purpose of the endpoints parameter (reducing spec to selected paths, transitive references) and linking to specific tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'OpenAPI spec', and distinguishes it from sibling tools that focus on other resources like blueprints or composes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains use cases (e.g., get details for a new blueprint) and when to use the optional endpoints parameter (for prepare payloads). It lacks explicit exclusions but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image-builder__get_org_idGet the organization ID for RHEL image registration/subscription.ARead-only
Get the organization ID for RHEL image registration/subscription.
Purpose: Fetch the organization ID for RHEL image registration.
When to Use: Always use this tool when enabling registration for Red Hat services in a blueprint.
CRITICAL NOTE: Never assume or use placeholder organization IDs. Always fetch the actual organization ID using this tool.
Returns: The organization ID
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is read-only and open-world. The description adds no additional behavioral details beyond stating what it returns. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a clear structure: purpose, when to use, a critical note, and return value. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers all necessary aspects: purpose, usage context, and return value. It is complete for the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100%, so the description does not need to add parameter details. The baseline for 0-param tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to fetch the organization ID for RHEL image registration. It uses a specific verb and resource, and the context distinguishes it from sibling tools (e.g., image-builder tools).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Always use this tool when enabling registration for Red Hat services in a blueprint.' It also warns against using placeholder IDs, reinforcing correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory__find_host_by_nameARead-only
Find a host by its hostname/display name.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | The hostname or display name to search for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so safety is clear. Description adds no behavioral details (e.g., case sensitivity, exact match, single result). With annotations covering the risk profile, this is acceptable but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence front-loaded with verb+resource+method. No wasted words; efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with an output schema, the description covers the essential purpose. Minor improvement could specify return granularity (single vs. list) but not necessary given output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'hostname' parameter well. The tool description adds no extra semantics or format guidance, earning the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Find', resource 'a host', and method 'by hostname/display name'. It effectively distinguishes from sibling tools like inventory__list_hosts which do broader listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use when you have a hostname. No explicit when-not-to-use or alternatives are given, leaving the agent to infer from context. This is minimally adequate but lacks guidance compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory__get_host_detailsARead-only
Get detailed information for specific hosts by their IDs.
Returns comprehensive host data including identifiers (insights_id, satellite_id, bios_uuid), display names, network info (IP/MAC addresses), cloud provider details, account/org metadata, timestamps (created, updated, stale_timestamp), reporter info, groups, facts, and basic system_profile data.
| Name | Required | Description | Default |
|---|---|---|---|
| host_ids | Yes | Comma-separated list of host IDs (UUIDs) to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description is consistent (get operation). Description adds specific return fields, enhancing transparency. No mention of limits or errors, but the simple nature of the tool (1 param, output schema) makes this acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (2-3 sentences) with a clear purpose statement followed by a bullet-like list of return data categories. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, an output schema exists, and annotations declare readonly, the description covers all necessary context: what it does, what it returns, and how to call it. The agent has sufficient information to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter (host_ids) is described in the schema as 'Comma-separated list of host IDs (UUIDs) to retrieve.' The description adds context by listing the expected fields in the response, which helps the agent understand the value of using this tool. With 100% schema coverage, baseline is 3; additional context raises to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get detailed information for specific hosts by their IDs' and lists the types of data returned (identifiers, network info, cloud provider, etc.). This distinguishes it from sibling tools like inventory__find_host_by_name (search by name) and inventory__list_hosts (list with filters).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implicitly tells when to use (when you have host IDs and need comprehensive details). It does not explicitly mention when not to use or compare to alternatives, but the sibling names provide context. A clear usage scenario is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory__get_host_system_profileARead-only
Get detailed system profile information for specific hosts.
Returns comprehensive hardware and software configuration data including CPU details (model, count, cores per socket), memory info (system_memory_bytes), infrastructure details (type, vendor), network interfaces, disk devices, BIOS information, and various system state data. For RHEL hosts, also includes software information such as enabled repositories, installed packages, and enabled services. This provides the most detailed technical specifications for each host.
| Name | Required | Description | Default |
|---|---|---|---|
| host_ids | No | Comma-separated list of host IDs (UUIDs) to get system profiles for. ALWAYS supply one or two UUIDs at a time! Expect really large responses which will overload your context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context by warning about large response sizes and recommending input limits. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, with a clear first sentence followed by a bullet-like list of data included. It is front-loaded with the core purpose, though the list could be slightly tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description is fairly complete: it explains what data is returned, warns about response size, and provides input recommendations. It covers the essential context for a read-only data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'host_ids', and its description already includes the key usage guidance. The tool description adds no additional parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets 'detailed system profile information for specific hosts' and enumerates specific data categories (CPU, memory, network, etc.), which precisely defines its scope and distinguishes it from simpler sibling tools like inventory__get_host_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The input schema description provides a crucial usage guideline: 'ALWAYS supply one or two UUIDs at a time! Expect really large responses which will overload your context.' However, the main description lacks explicit guidance on when to use this tool versus alternatives or 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.
inventory__get_host_tagsBRead-only
Get tags for specific hosts.
| Name | Required | Description | Default |
|---|---|---|---|
| host_ids | Yes | Comma-separated list of host IDs (UUIDs) to get tags for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description is consistent but adds no additional behavioral context (e.g., permissions, error handling, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise single sentence that immediately conveys the tool's purpose. No wasted words, but could be slightly expanded for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema. The description is minimally adequate but does not explain the structure of returned tags or any non-obvious behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description. The tool description does not add any parameter-level detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'tags for specific hosts'. It is clear but does not differentiate from sibling tools like inventory__get_host_details or inventory__list_hosts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, nor any context about prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory__list_hostsARead-only
List hosts with filtering and sorting options. CRITICAL: For the 'per_page' parameter, you MUST use a value of 10 on the first call to avoid performance degradation and context overflow. Only use a larger value if the user explicitly requests to see more systems at once.
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | Filter by FQDN (case-insensitive). | |
| page | No | Page number to return. | |
| tags | No | Filter by tags (e.g., 'ns1/key1=val1,ns2/key2=val2'). | |
| order_by | No | Field to sort by ('display_name', 'updated', 'created'). | |
| per_page | No | Number of hosts to return per page **ALWAYS use the default value of 10 for the first call.** This default is carefully chosen for performance and context management. Only increase this value if the user explicitly asks to see more systems at once | |
| order_how | No | Sort direction ('ASC' or 'DESC'). | ASC |
| staleness | No | Filter by staleness status (one of 'fresh', 'stale', 'stale_warning', 'unknown'). | |
| updated_end | No | Filter hosts updated before this timestamp (RFC3339). | |
| display_name | No | Filter by display name (case-insensitive). | |
| provider_type | No | Filter by provider type (e.g., 'aws', 'azure', 'gcp'). | |
| updated_start | No | Filter hosts updated after this timestamp (RFC3339). | |
| hostname_or_id | No | Filter by display_name, fqdn, or id (case-insensitive). | |
| registered_with | No | Filter by reporter that registered the host. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a critical behavioral trait: using per_page=10 to avoid performance degradation and context overflow. This is beyond the readOnlyHint annotation, providing actionable context about side effects and best practices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences with a clear critical section. No extra words, front-loaded with purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters, full schema coverage, and an output schema, the description adequately covers usage with a critical note. It lacks details on pagination beyond per_page, but that is likely covered by the output schema. Overall, sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters. The description adds significant value for the per_page parameter by emphasizing the default and warning against increasing it unless explicitly requested. Other parameters are described only in schema, but the added guidance is substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'List hosts with filtering and sorting options', which is a specific verb and resource. It clearly distinguishes from sibling tools like inventory__find_host_by_name and inventory__get_host_details by indicating a listing operation with filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit critical guidance on using per_page=10 first and only increasing if user explicitly asks. This is a clear usage instruction. However, it does not explicitly mention when not to use this tool versus alternatives, though siblings suggest different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory__load_inventory_dashboardARead-only
Show, list, or display fleet inventory in an interactive dashboard.
PREFER this tool over list_hosts whenever the user wants to see, show, list, or display hosts or fleet inventory. Use list_hosts only when you need the raw data for analysis or processing. The dashboard fetches data directly from the server. All filter parameters are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | Filter by FQDN. | |
| page | No | Page number. | |
| tags | No | Filter by tags. | |
| order_by | No | Sort field (display_name, updated, created). | |
| per_page | No | Number of hosts per page. | |
| order_how | No | Sort direction (ASC or DESC). | ASC |
| staleness | No | Filter by staleness status. | |
| display_name | No | Filter by display name. | |
| provider_type | No | Filter by provider type (aws, azure, gcp). | |
| hostname_or_id | No | Filter by display_name, fqdn, or id. | |
| registered_with | No | Filter by reporter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds that the dashboard 'fetches data directly from the server,' implying no side effects. The description does not contradict annotations and provides reasonable context, though it could detail resolution or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three sentences covering purpose, usage preference, and data source. Every sentence is meaningful and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no output schema, the description covers purpose and usage but fails to describe the return format or result structure. It mentions 'interactive dashboard' but does not clarify what the tool returns, which is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description only reiterates that 'all filter parameters are optional,' which adds minimal meaning beyond the schema's own descriptions. No additional parameter guidance is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool 'Show, list, or display fleet inventory in an interactive dashboard,' providing a clear verb and resource. It also distinguishes itself from the sibling tool list_hosts by specifying when to prefer this tool (visual display) vs. raw data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description directly advises to 'PREFER this tool over list_hosts whenever the user wants to see, show, list, or display hosts or fleet inventory' and reserves list_hosts for raw data processing. This offers explicit context for 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.
planning__get_appstreams_lifecycleGet Application Streams lifecycle information.ARead-onlyIdempotent
Get Application Streams lifecycle information.
🟢 CALL IMMEDIATELY - No information gathering required.
Use this tool when the user asks about Application Streams lifecycle (modules or packages) or wants to understand what streams exist for specific RHEL versions.
Guidance:
For detailed lifecycle of modules/packages on a specific RHEL major, use mode="raw" and set 'major'.
For an overview across RHEL generations (e.g. "what nginx streams exist in 8/9/10"), use mode="streams".
When the user mentions a human-friendly stream name like ".NET 7", use 'application_stream_name'.
When the user mentions the technical module/package name, use 'name'.
Only use 'kind' when the user explicitly distinguishes between module and package implementations.
Returns: str: A JSON-encoded response object containing: - meta: Metadata including: - count (int): Number of records returned in this page. - total (int): Total number of matching records. - data: A list of Application Stream lifecycle records. Each record typically contains: - name (str): Technical package or module name (e.g. 'aspnetcore-runtime-8.0'). - display_name (str): Human-friendly display name (e.g. '.NET 8'). - application_stream_name (str): Application Stream name (e.g. '.NET 8', 'PostgreSQL 16', 'container-tools'). - application_stream_type (str | null): Stream type label (e.g. 'Application Stream', 'Full Life Application Stream', 'Rolling Application Stream'). - stream (str): Stream identifier or version (e.g. '8.0.13', '1.24', '1.14.0'). - start_date (str | null): Planned start date for the stream, in ISO format (YYYY-MM-DD). - end_date (str | null): Planned end-of-life date for the stream, in ISO format (YYYY-MM-DD). - impl (str): Implementation kind (e.g. 'package' or 'dnf_module'). - initial_product_version (str | null): First RHEL product version where this stream is available (e.g. '9.4', '10.0'). - support_status (str): Calculated support status (e.g. 'Supported', 'Near retirement', 'Retired'). - os_major (int | null): RHEL major version (e.g. 8, 9, 10). - os_minor (int | null): RHEL minor version where the stream first appears (e.g. 0, 4). - lifecycle (dict | null): Reserved for additional lifecycle metadata (may be null). - rolling (bool): Indicates whether this is a rolling Application Stream (True) or a fixed-lifecycle stream (False).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Backend kind filter, e.g. "dnf_module" or "package". | |
| mode | No | Mode for Application Streams lifecycle: 'raw' (per-major) or 'streams' (cross-major overview). | raw |
| name | No | Module or package technical name filter (e.g. 'aspnetcore-runtime-7.0', 'postgresql'). | |
| major | No | RHEL major version (e.g. '8', '9', '10'). Required when mode='raw'. | |
| application_stream_name | No | Human-friendly stream name (e.g. '.NET 7', 'PostgreSQL 16', '1.24'). | |
| application_stream_type | No | Application stream type (e.g. "module" or "package"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds substantial context: explains the return format, modes, and parameter roles. It also includes a 'CALL IMMEDIATELY' note, reinforcing the safe, non-destructive nature. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections and bullet points, making it easy to scan. However, it is somewhat lengthy; some details could be condensed while retaining clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, multiple modes), the description is thorough. It covers usage context, parameter selection, and return structure comprehensively. The presence of an output schema does not undermine the description's completeness as it still adds interpretive value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description goes beyond by providing usage rules for each parameter (e.g., using 'application_stream_name' for human-friendly names, 'name' for technical names). This adds significant practical meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state it retrieves Application Streams lifecycle information. It specifies the resource (Application Streams) and action (get lifecycle), but does not explicitly differentiate from sibling tools like planning__get_relevant_appstreams, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Use this tool when the user asks about Application Streams lifecycle') and parameter selection advice. However, it lacks explicit when-not-to-use context or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planning__get_relevant_appstreamsGet Application Streams relevant to the requester's inventory (includes lifecycle/support dates).ARead-onlyIdempotent
Get Application Streams relevant to the requester's inventory (includes lifecycle/support dates).
🟢 CALL IMMEDIATELY - No information gathering required.
Use this tool when the user asks about Application Streams in their environment (inventory, hosts, systems...), such as: "Which app streams are we running on RHEL 9?" "What successor app streams could we move to from our current streams?"
Use this tool over get_appstreams_lifecycle when the user asks about their inventory, hosts, systems...
If the question is scoped to a specific RHEL major or minor, set major (and optionally minor) so that relevance is computed only from systems on that version.
If the user wants only streams currently running (what is installed/in use in inventory), set include_related=false. If the user asks whether newer versions exist, wants upgrade recommendations, or wants successor streams to consider, set include_related=true and review entries where related=true as potential candidates.
If the user needs an exhaustive catalog view of all streams available for a given component (e.g., "list all Node.js streams across RHEL 8/9/10"), use get_appstreams_lifecycle.
The backend computes relevance based on actual host data in the user's inventory. This tool does not perform any client-side filtering; all evaluation is performed by the backend.
Returns: str: A JSON-encoded response object containing: - meta: Metadata including: - count (int): Number of records returned. - total (int): Total number of matching records. - data: A list of Application Stream records relevant to the user's inventory. Each record contains: - name (str): Technical package or module name. - display_name (str): Human-friendly display name. - application_stream_name (str): Application Stream name. - stream (str): Stream identifier or version. - start_date (str | null): Planned start date (ISO format). - end_date (str | null): Planned end-of-life date (ISO format). - support_status (str): Support status (e.g. 'Supported', 'Retired'). - os_major (int | null): RHEL major version. - os_minor (int | null): RHEL minor version. - related (bool): Indicates if this is a related/successor stream (true) or currently in use (false).
| Name | Required | Description | Default |
|---|---|---|---|
| major | No | Restricts relevance evaluation to systems running this RHEL major version. | |
| minor | No | Used together with major to further restrict relevance evaluation to a specific minor version. Requires major to be specified. | |
| include_related | No | If true, returns streams currently used plus related/successor streams. If false, returns only streams currently used in inventory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: explains that relevance is computed backend based on actual host data, no client-side filtering. This aligns with readOnlyHint and idempotentHint. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded: starts with 'CALL IMMEDIATELY,' then usage scenarios, parameter instructions, and output schema. Every section serves a purpose; no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (inventory-based relevance, lifecycle dates, sibling tool), the description fully covers purpose, usage, parameters, and output schema. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description enriches parameter meaning: major/minor restrict relevance to specific RHEL versions, include_related distinguishes current usage vs. upgrade recommendations. Provides concrete guidance that the schema alone doesn't capture.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves relevant Application Streams from the user's inventory, including lifecycle/support dates. It distinguishes itself from the sibling tool `get_appstreams_lifecycle` by specifying it focuses on inventory relevance vs. an exhaustive catalog view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'CALL IMMEDIATELY - No information gathering required,' example queries, when to use vs. lifecycle tool, and how to set parameters for scoping (major/minor) and include_related. Also explains when not to use (exhaustive catalog).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planning__get_relevant_rhel_lifecycleReturns RHEL lifecycle information for systems in the requester's inventory.ARead-onlyIdempotent
Returns RHEL lifecycle information for systems in the requester's inventory.
🟢 CALL IMMEDIATELY - No information gathering required.
Use this tool when the user asks about RHEL lifecycle in their own environment, for example:
Which RHEL versions are we currently running, and when do they go out of support?
What future RHEL 8 minor versions could we upgrade to that are still supported?
When the question is scoped to a specific RHEL major (or major/minor), set major (and optionally minor) so relevance is calculated only from systems on that version.
If the user wants only what is currently running, set include_related=False (default, not needed to be specified).
If the user wants upgrade options or newer streams related to what they run today, set include_related=True and look at items where related=true as potential targets.
Response guidance:
Summarize support status and end dates in plain language.
If a version is retired or near end-of-support, call out the impact (loss of updates, risk).
Provide recommended actions (e.g., plan upgrade, evaluate supported minor versions).
Returns: str: A JSON-encoded response object containing: - meta: Metadata including: - count (int): Number of records returned. - total (int): Total number of matching records. - data: A list of RHEL lifecycle records relevant to the user's inventory. Each record contains: - name (str): RHEL version name. - display_name (str): Human-friendly display name. - os_major (int | null): RHEL major version. - os_minor (int | null): RHEL minor version. - start_date (str | null): Planned start date (ISO format). - end_date (str | null): Planned end-of-life date (ISO format). - support_status (str): Support status (e.g. 'Supported', 'Retired'). - count (int): Number of systems running this RHEL version. - lifecycle_type (str): Type of RHEL version (e.g. 'mainline', 'extended update support (EUS)', 'extended life-cycle support (ELS)', 'update services for SAP solutions (E4S)'). - related (bool): True when include_related=true and the version is a suggested upgrade target.
| Name | Required | Description | Default |
|---|---|---|---|
| major | No | Restricts relevance evaluation to systems running this RHEL major version. | |
| minor | No | Used together with major to further restrict relevance evaluation to a specific minor version. Requires major to be specified. | |
| include_related | No | When true, returns both RHEL versions observed in inventory and additional higher-minor or future versions of the same major that are still supported but not yet deployed (marked as related=true). When false, returns only RHEL versions actually observed in the requester's inventory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds value by explaining the return schema, parameter behaviors (e.g., related=true for include_related), and response guidance. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose, call indicator, examples, parameter guidance, response guidance, and return schema. Every section adds value. Slightly long but justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential aspects: purpose, when to use, parameter semantics, response structure, and response guidance. No significant gaps. Sibling differentiation is clear from the title and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters at 100%, but the description enhances with practical usage guidance: how to scope with major/minor and the meaning of include_related with the related flag. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns RHEL lifecycle information for systems in the requester's inventory. It uses specific verbs and resources, and distinguishes from sibling planning__get_rhel_lifecycle by focusing on inventory relevance. Examples further clarify the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases with example questions and parameter guidance (e.g., setting major/minor, include_related). It does not explicitly name the alternative tool for general lifecycle questions, but the presence of sibling planning__get_rhel_lifecycle implies the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planning__get_relevant_upcomingList relevant upcoming package changes, deprecations, additions and enhancements to user's systems.ARead-onlyIdempotent
List relevant upcoming package changes, deprecations, additions and enhancements to user's systems.
🟢 CALL IMMEDIATELY - No information gathering required.
Use this tool to answer questions about upcoming package changes, deprecations, additions, or enhancements in the roadmap filtered by relevance to the user's systems. Also to plan for future upgrades and mitigate risk. Use this tool over get_upcoming_changes when the user asks about upcoming changes for their systems.
Returns: dict: A response object containing: - meta: Metadata including 'count' and 'total'. A count of 0 means no packages matches for the user's systems. - data: A list of package records. Each record contains: - name (str): The package name. - type (str): The change type (e.g., 'addition'). - release (str): The target release version. - details (dict): Detailed info including 'summary' and 'dateAdded'. - potentiallyAffectedSystemsDetail (list): Systems that might be affected by this change, including system IDs, display names, and OS versions.
| Name | Required | Description | Default |
|---|---|---|---|
| major | No | Restricts relevance evaluation to systems running this RHEL major version. | |
| minor | No | Used together with major to further restrict relevance evaluation to a specific minor version. Requires major to be specified. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and open-world hints. The description adds value by detailing the return structure (meta and data fields) and explaining what a count of 0 means. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a short summary, a call-to-action, usage guidance, and a detailed output description. Every sentence adds value, and it is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations and detailed output schema in the description, the description is complete. It covers purpose, usage, behavior, and return format without missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both parameters have descriptions). The description does not add any additional meaning to the parameters beyond what the schema already provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List relevant upcoming package changes, deprecations, additions and enhancements to user's systems.' It specifies the verb 'List' and the resource, and distinguishes from the sibling tool 'get_upcoming_changes' by indicating when to use this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit instructions are provided: 'Use this tool to answer questions about upcoming package changes...' and 'Use this tool over get_upcoming_changes when the user asks about upcoming changes for their systems.' It also includes a 'CALL IMMEDIATELY' directive. However, it doesn't cover when not to use the tool explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planning__get_rhel_lifecycleReturns life cycle dates for all RHEL majors and minors.ARead-onlyIdempotent
Returns life cycle dates for all RHEL majors and minors.
🟢 CALL IMMEDIATELY - No information gathering required.
Use this tool when the user asks for RHEL versions and lifecycle timelines, including major versions, minor versions, or extended support types (EUS/E4S/ELS).
For "major-only" versions and timelines (for example, "RHEL 8 lifecycle overview"), call this tool and then focus on rows where minor is null. Filtering is performed by you, not the MCP tool.
For a specific minor (for example, "RHEL 9.2 EUS lifecycle"), call this tool and then focus on entries matching the requested major and minor. Interpretation of date windows or version selection is done by you.
When the user mentions dates or "expiring within N days", call this tool and interpret the start_date / end_date values to identify relevant versions. Interpretation of date windows or version selection is done by you.
Returns: dict: A response object containing: - data: A list of RHEL lifecycle records - name (str): System name - start_date (str): Start date of support - end_date (str): End date of standard support - support_status (str): Status of support, e.g. retired, upcoming_release, supported - display_name (str): How the system should be presented to the customer - major (int): Major system version - minor (int): Minor system version - end_date_e4s (str | null): End date of Update Services for SAP Solutions support - end_date_els (str | null): End date of Extended Life-cycle Support - end_date_eus (str | null): End date of Extended Update Support
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and openWorldHint, which cover safety and idempotency. The description reinforces this with 'CALL IMMEDIATELY - No information gathering required' and details the return structure, adding context beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but well-structured with headings, bullet points, and emojis. It front-loads the core purpose and call-to-action. Some redundancy exists, but overall it is easy to scan and interpret.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and comprehensive annotations, the description covers all necessary context: what the tool returns, how to interpret results for different use cases, and that it is a safe read operation. The return structure is detailed in the description, making it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters in the input schema, and schema coverage is 100%. The description does not need to add parameter semantics. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns life cycle dates for all RHEL majors and minors, using a specific verb and resource. It distinguishes from sibling tools like planning__get_appstreams_lifecycle by focusing on RHEL, and the extensive usage guidance reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool (e.g., user asks for RHEL versions and lifecycle timelines) and provides step-by-step instructions for different query types (major-only, specific minor, date windows). It also says to call immediately with no information gathering, which is excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planning__get_upcoming_changesList upcoming package changes, deprecations, additions and enhancements.ARead-onlyIdempotent
List upcoming package changes, deprecations, additions and enhancements.
🟢 CALL IMMEDIATELY - No information gathering required.
Use this tool to answer questions about upcoming package changes, deprecations, additions, or enhancements in the roadmap when a full list of upcoming items is acceptable. When the user asks about a specific RHEL version (for example, "What is coming in RHEL 9.4?"), call this tool without parameters and then filter and summarize the entries relevant to that version in your response.
Returns: dict: A response object containing: - meta: Metadata including 'count' and 'total'. - data: A list of package records. Each record contains: - name (str): The package name. - type (str): The change type (e.g., 'addition'). - release (str): The target release version. - details (dict): Detailed info including 'summary' and 'dateAdded'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint, idempotentHint, and openWorldHint. The description adds behavioral guidance like 'CALL IMMEDIATELY' and post-filtering instructions. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an emoji for emphasis, a clear instruction line, usage note, and return format. Slightly lengthy due to return details, but still concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, full annotations, and an output schema, the description is complete. It covers purpose, usage, and behavior. Minor missing detail on what 'upcoming' means, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100%. The description does not need to add parameter details. Baseline for no parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists upcoming package changes, deprecations, additions, and enhancements. It uses specific verbs and resources, and distinguishes from siblings by emphasizing that it provides a full list, with filtering instructions for specific versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'CALL IMMEDIATELY - No information gathering required' and instructs when to use it for full lists or specific RHEL versions. It does not explicitly mention when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rbac__get_all_accessA
Get access information for all Red Hat insights applications.
This endpoint returns access information across all Red Hat insights applications. The API returns gzipped responses for this endpoint, which are handled by the client. Use this when you need to see access permissions across all applications.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of access records to return (default: 20). | |
| offset | No | Number of access records to skip for pagination (default: 0). | |
| username | No | Optional username to filter access for specific user. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses gzipped response handling, which is beyond schema. No annotations exist, so description carries full burden. It does not mention authentication, rate limits, or the structure of the response (though output schema exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is brief with three sentences. Some repetition between first and second sentences, but overall concise and front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description doesn't need to detail return values. It covers the core purpose and gzip behavior. Lacks mention of pagination despite limit/offset parameters, but not critical given schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description does not add additional meaning beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gets access information for all Red Hat insights applications. The verb 'Get' and resource 'access information for all Red Hat insights applications' are specific, and no sibling tool competes directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use this when you need to see access permissions across all applications.' However, it does not mention when not to use it or alternatives, but given no sibling rbac tools, it's adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rhsm__get_activation_keyARead-only
Get a specific activation key by name.
🟢 CALL IMMEDIATELY - No information gathering required.
This endpoint returns details for a specific activation key including its name, description, service level, role, usage, release version, and additional repositories.
Returns: Activation key details including configuration and subscription information.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the activation key to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description's behavioral claim is consistent. It adds no new behavioral traits (e.g., rate limits, auth) beyond the expected read operation, but 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly concise but contains slight redundancy (the 'Returns' section summarizes information already in the preceding sentence). The emoji and call-to-action are helpful but add token count.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which documents return values), the description sufficiently covers what the tool does and what details are returned. It is complete for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the 'name' parameter with a clear description ('The name of the activation key to retrieve'). With 100% schema coverage, the description adds no new meaning, placing it at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a specific activation key by name, using a strong verb ('Get') and specifying the resource. It differentiates from the sibling 'rhsm__get_activation_keys' which lists all keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes 'CALL IMMEDIATELY - No information gathering required,' indicating no prerequisites. It implies usage when you have a key name, but does not explicitly mention the alternative list endpoint when the name is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rhsm__get_activation_keysARead-only
Get the list of activation keys available to the authenticated user.
🟢 CALL IMMEDIATELY - No information gathering required.
This endpoint returns activation keys that can be used for RHEL system registration. Activation keys contain subscription and configuration information needed to register systems with Red Hat Subscription Management.
If the user has more questions about the activation keys, ask the user to go to https://console.redhat.com/insights/connector/activation-keys
Returns: List of activation keys with their details including names, descriptions, and associated subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of activation keys to return (default: 20). | |
| offset | No | Number of activation keys to skip for pagination (default: 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value with the 'CALL IMMEDIATELY' behavioral cue. It explains the purpose of activation keys for RHEL registration, which supplements the annotation without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise with a clear opening, a call-to-action flag, and a brief explanation. It could be slightly more concise, but overall well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, full schema coverage, presence of annotations, and existence of an output schema, the description provides all necessary context: what the tool does, when to call, and what it returns (list of activation keys with details).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters (limit, offset) with defaults and descriptions. The description does not add any additional parameter semantics beyond what is already in the schema, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get the list of activation keys available to the authenticated user,' which clearly specifies the action (get) and resource (activation keys). It distinguishes from sibling tools like 'rhsm__get_activation_key' (singular) by indicating it returns a list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes a 'CALL IMMEDIATELY - No information gathering required' flag, guiding the agent to invoke without prior steps. However, it does not explicitly mention alternative tools for getting a single key or when not 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.
vulnerability__explain_cvesARead-only
Explain why CVEs are affecting my environment.
This endpoint returns a detailed explanation of why CVEs are affecting my environment. It uses VMAAS to explain the CVEs, what packages are affected and why. Alongside with the information how this CVE can be fixed. To get the explanation, we need to get the system UUID from the inventory and list of CVEs. 'affected_packages' in 'vmaas' response is a list of packages that are affected by the CVE.
To update affected packages, suggest to use Ansible Remediation Playbook via Remediations MCP tool.
| Name | Required | Description | Default |
|---|---|---|---|
| cves | Yes | CVE identifiers. Example: CVE-2016-0800,CVE-2016-0801 | |
| system_uuid | Yes | System UUID. Example: 123e4567-e89b-12d3-a456-426614174000 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds context about using VMAAS and explains the meaning of 'affected_packages', enhancing transparency beyond the annotation's simple read hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat repetitive ('Explain why CVEs...' appears twice) and could be more concise. However, it is front-loaded with the main purpose and structured coherently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description sufficiently covers what the tool does, required inputs, and even suggests a next step (Remediations). It provides complete context for a tool explaining CVEs per system.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with examples for both parameters. The description adds context about needing system UUID from inventory and CVEs, but this doesn't significantly augment the semantic meaning already provided by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool explains why CVEs affect the environment, detailing affected packages and fix info. It uses specific verbs like 'explain' and references VMAAS, distinguishing it from sibling tools that list CVEs or systems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions prerequisites (system UUID and CVEs) and suggests using the Remediations tool for updates. However, it does not explicitly specify when to use this tool versus alternatives like vulnerability__get_cve_systems or vulnerability__get_cves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability__get_cveARead-only
Get details about specific CVE.
This endpoint returns the CVE identification number, description, scores and other metadata. The metadata includes the description, CVSS 2/3 Score, CVSS 2/3 attack vector, severity, public date, modified date, business risk, status, a URL to Red Hat web pages, a list of advisories remediating the CVE, and information regarding known exploits for the CVE. For more info refer to OpenAPI spec
| Name | Required | Description | Default |
|---|---|---|---|
| cve | Yes | CVE identifier. Example : CVE-2016-0800 | |
| advisory_available | No | String of booleans (array of booleans), where true shows CVE-system pairs with available advisory, false shows CVE-system pairs without available advisory. | true |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds useful context beyond annotations by listing the specific metadata returned (CVSS scores, severity, advisories, known exploits, etc.), which helps the agent understand the tool's behavior without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loaded with the main purpose. It clearly lists the metadata items but has some redundancy (e.g., 'description' mentioned twice). Overall efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (as per context signals) and comprehensive annotations, the description covers the tool's purpose, key parameters, and returned data fields adequately. It references the OpenAPI spec for more details. No major gaps for a read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% and both parameters are well-described in the schema (cve with example, advisory_available with boolean string interpretation). The description does not add any new semantic meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get details about specific CVE.' It lists the specific metadata returned, distinguishing it from sibling tools like vulnerability__get_cves which likely lists CVEs. The verb 'Get' combined with 'details' precisely defines the action and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing detailed CVE information, but does not explicitly state when to use this tool versus alternatives like vulnerability__get_cves or vulnerability__get_cve_systems. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability__get_cvesBRead-only
Get list of CVEs affecting the account.
This provides an overview of vulnerabilities across your entire system inventory. Use this endpoint to get an overview of which CVEs are affecting your account, including some CVE metadata, how many systems are affected by each CVE, and more. For more info refer to OpenAPI spec
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Attribute sorting. Use `-` prefix to sort in descending order. | -public_date |
| limit | No | Pagination - Maximum number of records per page. | |
| impact | No | Comma separated list of CVE Impact IDs. Example : 5,7. impact mapping: (0, 'NotSet'), (1, 'None'), (2, 'Low'), (3, 'Medium'), (4, 'Moderate'), (5, 'Important'), (6, 'High'), (7, 'Critical') | 1,2,4,5,7 |
| offset | No | Pagination - Offset of first record of paginated response. | |
| cvss_to | No | Filter based on cvss score, up to the value. | |
| filter_ | No | ||
| cvss_from | No | Filter based on cvss score, starting from the value. | |
| known_exploit | No | String of booleans (array of booleans), where true shows CVEs with known exploits, false shows CVEs without known exploits. | true,false |
| rule_presence | No | Comma seprated string with bools. If true shows only CVEs with security rule associated, if false shows CVEs without rules. true, false shows all. | true,false |
| advisory_available | No | String of booleans (array of booleans), where true shows CVE-system pairs with available advisory, false shows CVE-system pairs without available advisory. | true |
| affecting_host_type | No | Comma separated string of values. Controls, whenever CVE has 1 or more affecting systems. Value "edge" returns CVEs with one or more vulnerable immutable systems, value "rpmdnf" returns CVEs with one or more vulnerable conventional systems. Value "none" returns CVEs not affecting systems of any kind. Allowed values: "edge", "rpmdnf", "none". | rpmdnf |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the description's disclosure of returning 'CVE metadata, how many systems are affected by each CVE, and more' adds some output context but no significant new behavioral traits (e.g., pagination limits, authorization). The description does not contradict annotations, and the disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, which is moderately concise. The second sentence ('This provides an overview...') largely restates the first sentence, adding redundancy. The third sentence refers to an OpenAPI spec, which is a weak crutch. It could be condensed to one or two sentences without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 11 optional parameters with many filters, the description is quite generic. It states it's an overview but doesn't hint at the extensive filtering, sorting, or pagination capabilities (though schema descriptions exist). An agent might underestimate the tool's flexibility. The description is minimally complete for a basic understanding but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (91%), so the baseline is 3. The description adds no parameter-level details beyond what the schema provides. It mentions 'CVE metadata' and 'systems affected' but does not explain how to use filters like cvss_from, impact, or known_exploit. The description does not compensate for the one undocumented parameter (filter_).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get list of CVEs affecting the account' with a specific verb and resource. It indicates an overview of vulnerabilities across the entire system inventory, which distinguishes it from sibling tools like vulnerability__get_cve (single CVE details) and vulnerability__get_cve_systems (systems per CVE). However, it does not explicitly differentiate from siblings, so it's not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this endpoint to get an overview' but provides no guidance on when not to use it or alternatives. Given siblings like vulnerability__get_cve and vulnerability__get_cve_systems, the lack of explicit exclusions or comparisons leaves an agent without clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability__get_cve_systemsARead-only
Get list of systems affected by a given CVE.
This is a report of affected systems for a given CVE. Use this tool to obtain list of all affected systems for a given CVE. For more info refer to OpenAPI spec
| Name | Required | Description | Default |
|---|---|---|---|
| cve | Yes | CVE identifier. Example : CVE-2016-0800 (Required) | |
| sort | No | Attribute sorting. Use `-` prefix to sort in descending order. | -updated |
| limit | No | Pagination - Maximum number of records per page. | |
| offset | No | Pagination - Offset of first record of paginated response. | |
| filter_ | No | Full text filter for the display name of system. | |
| system_uuid | No | Filter based on Systems Inventory UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds minimal behavioral context (it's a 'report'), but does not disclose pagination behavior or output format beyond what annotations and schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (three lines) but has slight redundancy between the first two sentences. It conveys the core purpose efficiently without unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, an output schema exists, and parameters are fully described in the schema, the description is sufficient. It does not explain return values, but the output schema fills that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description does not add additional meaning beyond stating the overall purpose, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), the resource ('list of systems'), and the constraint ('affected by a given CVE'). This distinguishes it from sibling tools like vulnerability__get_systems which lists all systems without a CVE filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this tool to obtain list of all affected systems for a given CVE.' This provides clear context for when to use the tool, though it does not explicitly mention alternatives or 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.
vulnerability__get_openapiARead-only
Get Red Hat Insights Vulnerability OpenAPI specification in JSON format.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates a safe read operation. The description adds no extra behavioral details such as rate limits, authentication, or response size. It confirms JSON format but goes no further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words with no fluff. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, an output schema exists (though not provided), and the tool is a simple OpenAPI spec retrieval, the description is complete enough. It tells the user exactly what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description need not add parameter meaning. The schema coverage is 100% trivially. The baseline for 0 parameters is 4, and the description meets it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'Red Hat Insights Vulnerability OpenAPI specification', and the format 'JSON'. It distinguishes the tool from sibling tools like image-builder__get_openapi by specifying the service.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or when not to use it. For a simple tool, some context could be added.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability__get_system_cvesARead-only
Get list of CVEs affecting a given system.
IMPORTANT: Prefer get_cves as get_cves can filter for CVEs with available advisories.
This is a report of CVEs affecting a given system. Use this tool to obtain list of all CVEs affecting a given system. For more info refer to OpenAPI spec
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Attribute sorting. Use `-` prefix to sort in descending order. | -public_date |
| limit | No | Pagination - Maximum number of records per page. | |
| offset | No | Pagination - Offset of first record of paginated response. | |
| filter_ | No | Full text filter for the CVE name. | |
| system_uuid | Yes | Systems Inventory UUID. Example : 123e4567-e89b-12d3-a456-426614174000 (Required) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare `readOnlyHint: true`, so the tool is known to be read-only. The description adds no new behavioral traits (e.g., no mention of pagination details, performance, or side effects) but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with 6 sentences, but includes some redundancy (e.g., 'This is a report...' restates the first sentence) and a mention to refer to the OpenAPI spec, which is of limited value. Still, it is front-loaded with the key guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description covers the tool's purpose, usage, and distinguishing guidance. No critical gaps are present for a read-only list endpoint with well-documented parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described in the input schema. The description does not add meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get list of CVEs affecting a given system', which clearly identifies the verb and resource. It differentiates from siblings by noting that `get_cves` is preferred for filtered results, but the core 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'IMPORTANT: Prefer `get_cves` as `get_cves` can filter for CVEs with available advisories.' This provides clear when-to-use and when-not-to-use guidance, naming an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability__get_systemsBRead-only
Get list of systems in Red Hat Insights Vulnerability inventory.
List all systems registered in Red Hat Insights Vulnerability service, including information about their last check-in, system name, workspace name, RHEL version, and number of CVEs affecting them. This tool shows both affected and not affected systems. For more info refer to OpenAPI spec
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Attribute sorting. Use `-` prefix to sort in descending order. | -updated |
| limit | No | Pagination - Maximum number of records per page. | |
| offset | No | Pagination - Offset of first record of paginated response. | |
| filter_ | No | Full text filter for the display name of system. | |
| group_names | No | Filter based on workspace names. Comma separated list of workspace names. | |
| rhel_versions | No | Filter based on RHEL versions. Comma separated list of RHEL versions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=true, so the description doesn't need to restate. It adds that both affected and not affected systems are returned, and lists returned fields. However, it does not disclose pagination behavior, rate limits, or sorting default beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a note about the OpenAPI spec. It is front-loaded with the core purpose and conveys key information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 parameters (all optional with descriptions), an existing output schema, and no nested objects, the description sufficiently covers the tool's behavior. It mentions the returned fields and the scope (both affected and not affected), providing a complete picture for a list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description does not add meaning beyond the schema; it mentions response fields (last check-in, etc.) but not input parameters. No additional value for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves a list of systems from the Vulnerability inventory, including specific fields like last check-in, system name, workspace name, RHEL version, and CVE count. It distinguishes from siblings like vulnerability__get_cve_systems by noting it returns both affected and not affected systems, but could be more explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives (e.g., vulnerability__get_cve_systems, vulnerability__get_system_cves). The description only states what it does, not the context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability__load_cve_dashboardARead-only
Show, list, or display CVEs — account-level or for a specific system — in an interactive dashboard.
PREFER this tool over get_cves and get_system_cves whenever the user wants to see, show, list, or display CVEs, whether for the entire account or for a specific system. Use get_cves or get_system_cves only when you need the raw data for analysis or processing. The dashboard fetches data directly from the server. If system_uuid is provided, it fetches system-level CVEs. Otherwise, it fetches account-level CVEs. All filter parameters are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field. Use '-' prefix for descending. | -cvss_score |
| limit | No | Maximum number of CVEs to fetch. | |
| impact | No | Comma-separated impact IDs (7=Critical, 6=High, 5=Important, 4=Moderate). | 7,6,5,4 |
| offset | No | Offset for pagination. | |
| cvss_to | No | Maximum CVSS score filter. | |
| filter_ | No | Full text filter for CVE name or description. | |
| cvss_from | No | Minimum CVSS score filter. | |
| system_uuid | No | System UUID. If provided, fetches CVEs for this system. If empty, fetches account-level CVEs. | |
| known_exploit | No | Filter by known exploit (true, false, or true,false). | true,false |
| advisory_available | No | Filter by advisory availability (true, false, or true,false). | true,false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by specifying it is an interactive dashboard that fetches data directly from the server, with no write behavior implied. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a clear purpose statement, usage guidelines, and technical details. It is slightly redundant with schema but overall concise and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately explains input and behavior but does not mention return format or output details, which would be helpful given no output schema. The dashboard concept implies a list of CVEs but is not explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. The description adds no new semantic information beyond restating system_uuid behavior, which is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows, lists, or displays CVEs in an interactive dashboard, at account or system level. It explicitly distinguishes from sibling tools get_cves and get_system_cves by indicating this tool is for display and those are for raw data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to prefer this tool over get_cves and get_system_cves for displaying CVEs, and to use those only when raw data is needed. It also explains behavior based on system_uuid parameter.
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 tool update
v0.0.10- Changed
content-sources__list_repositories2 fields changed- added
Input schema / properties / include_gpg_keyAdded value: +{ + "default": false, + "description": "Include GPG key content in the response (default: False).", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of repositories to return (default: 10)."New value: +"Maximum number of repositories to return (default: 10, maximum: 100). **ALWAYS use the default value of 10 for the first call.** This default is carefully chosen for performance and context management. Only increase this value if the user explicitly asks to see more repositories at once."
2 tool updates
v0.0.9- Added
inventory__load_inventory_dashboard - Added
vulnerability__load_cve_dashboard
37 tool updates
v0.0.0- First observed
advisor__get_active_rules - First observed
advisor__get_hosts_details_for_rule - First observed
advisor__get_hosts_hitting_a_rule - First observed
advisor__get_recommendations_stats - First observed
advisor__get_rule_by_text_search - First observed
advisor__get_rule_details - First observed
advisor__get_rule_from_node_id - First observed
content-sources__list_repositories - First observed
get_mcp_version - First observed
image-builder__get_blueprint_details - First observed
image-builder__get_blueprints - First observed
image-builder__get_compose_details - First observed
image-builder__get_composes - First observed
image-builder__get_distributions - First observed
image-builder__get_openapi - First observed
image-builder__get_org_id - First observed
inventory__find_host_by_name - First observed
inventory__get_host_details - First observed
inventory__get_host_system_profile - First observed
inventory__get_host_tags - First observed
inventory__list_hosts - First observed
planning__get_appstreams_lifecycle - First observed
planning__get_relevant_appstreams - First observed
planning__get_relevant_rhel_lifecycle - First observed
planning__get_relevant_upcoming - First observed
planning__get_rhel_lifecycle - First observed
planning__get_upcoming_changes - First observed
rbac__get_all_access - First observed
rhsm__get_activation_key - First observed
rhsm__get_activation_keys - First observed
vulnerability__explain_cves - First observed
vulnerability__get_cve - First observed
vulnerability__get_cve_systems - First observed
vulnerability__get_cves - First observed
vulnerability__get_openapi - First observed
vulnerability__get_system_cves - First observed
vulnerability__get_systems
TDQS
Tools are clearly grouped by domain prefixes (advisor__, inventory__, etc.) and each tool's description precisely defines its unique purpose. Overlaps between similar tools (e.g., get_hosts_details_for_rule vs get_hosts_hitting_a_rule) are well clarified by context and parameters.
Most tools follow a consistent domain__verb_noun pattern. However, some domains use hyphens (content-sources__, image-builder__) while others use underscores (advisor__, inventory__), and the standalone get_mcp_version lacks a prefix. Overall pattern is predictable.
With 37 tools, the server is over-scoped. Many tools are simple get/list operations that could be consolidated. The count exceeds the recommended upper bound for a well-scoped MCP server, making it feel heavy and potentially overwhelming.
The server covers a broad set of Red Hat services but is heavily read-only. Notable gaps include missing create/update/delete operations for image builder and vulnerability management. The basic query workflows are present, but actionable lifecycle operations are absent.
Maintenance
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
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for OSIDB (Red Hat Product Security's vulnerability management system). Enables read-only querying of flaws, affects, trackers, and status via natural language from MCP clients like Cursor or Claude Desktop.2MIT
- AlicenseBqualityDmaintenanceEnterprise-grade MCP server exposing Ansible Automation Platform 2.x as a complete AI interface for LLMs, enabling natural language management of automation resources.861Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server suite for Red Hat's automation ecosystem, enabling AI assistants to interact with Ansible Automation Platform, Event-Driven Ansible, ansible-lint, and official Red Hat documentation with secure domain validation.33MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to interact with any REST API that has an OpenAPI specification by providing a lightweight MCP server that translates between natural language and API calls.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/RedHatInsights/insights-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server