Panther MCP Server
OfficialThe Panther MCP Server enables interactive security log analysis and alert management through natural language queries and IDE integrations. It provides the following capabilities:
Alerts Management: Add comments, retrieve details and events, list alerts with filtering, update assignees and statuses, and list alert comments.
Data Querying: Execute SQL queries against the data lake, retrieve query results, explore sample log events, view table schemas, list available databases and tables, and analyze alert event patterns.
Rule Management: Create, disable, update, and retrieve details for Panther rules (standard, scheduled, simple), policies, and global helpers.
Schema Management: Create, update, and retrieve detailed schema information for Panther log types.
Metrics Analysis: Get metrics on alerts grouped by rules or severity, and retrieve data ingestion metrics showing bytes processed per log type and source.
User Management: List Panther users and retrieve user permissions.
Supports running the MCP server in a Docker container for a secure, sandboxed environment with minimal blast radius.
Provides access to GitHub functionality through global helpers for handling GitHub events.
Provides Python-based functionality for rule creation, data querying, and alert management through PyPI package distribution.
Integrates with the Ruff linter for Python code quality checking, as indicated by the badge in the README.
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., "@Panther MCP Servershow me all high severity alerts from the last 24 hours"
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.
Panther MCP Server
Panther's Model Context Protocol (MCP) server provides functionality to:
Write and tune detections from your IDE
Interactively query security logs using natural language
Triage, comment, and resolve one or many alerts
Available Tools
Tool Name | Description | Sample Prompt |
| Add a comment to a Panther alert | "Add comment 'Looks pretty bad' to alert abc123" |
| Start an AI-powered triage analysis for a Panther alert with intelligent insights and recommendations | "Start AI triage for alert abc123" / "Generate a detailed AI analysis of alert def456" |
| Retrieve the latest AI triage summary previously generated for a specific alert | "Get the AI triage summary for alert abc123" / "Show me the AI analysis for alert def456" |
| Get detailed information about a specific alert | "What's the status of alert 8def456?" |
| Get a small sampling of events for a given alert | "Show me events associated with alert 8def456" |
| List alerts with comprehensive filtering options (date range, severity, status, etc.) | "Show me all high severity alerts from the last 24 hours" |
| Bulk update multiple alerts with status, assignee, and/or comment changes | "Update alerts abc123, def456, and ghi789 to resolved status and add comment 'Fixed'" |
| Update the assignee of one or more alerts | "Assign alerts abc123 and def456 to John" |
| Update the status of one or more alerts | "Mark alerts abc123 and def456 as resolved" |
| List all comments for a specific alert | "Show me all comments for alert abc123" |
Tool Name | Description | Sample Prompt |
| Execute SQL queries against Panther's data lake with synchronous results | "Query AWS CloudTrail logs for failed login attempts in the last day" |
| Get schema information for a specific table | "Show me the schema for the AWS_CLOUDTRAIL table" |
| List all available data lake databases in Panther | "List all available databases" |
| List all available tables for a specific database in Panther's data lake | "What tables are in the panther_logs database" |
| Analyze patterns and relationships across multiple alerts by aggregating their event data into time-based statistics | "Show me patterns in events from alerts abc123 and def456" |
Tool Name | Description | Sample Prompt |
| List all scheduled queries with pagination support | "Show me all scheduled queries" / "List the first 25 scheduled queries" |
| Get detailed information about a specific scheduled query by ID | "Get details for scheduled query 'weekly-security-report'" |
Tool Name | Description | Sample Prompt |
| List log sources with optional filters (health status, log types, integration type) | "Show me all healthy S3 log sources" |
| Get detailed information about a specific HTTP log source by ID | "Show me the configuration for HTTP source 'webhook-collector-123'" |
Tool Name | Description | Sample Prompt |
| List detections from Panther with comprehensive filtering support. Supports multiple detection types and filtering by name, state, severity, tags, log types, resource types, output IDs (destinations), and more. Returns outputIDs for each detection showing configured alert destinations | "Show me all enabled HIGH severity rules with tag 'AWS'" / "List disabled policies for S3 resources" / "Find all rules with outputID 'prod-slack'" / "Show me detections that alert to production destinations" |
| Get detailed information about a specific detection including the detection body and tests. Accepts a list with one detection type: ["rules"], ["scheduled_rules"], ["simple_rules"], or ["policies"] | "Get details for rule ID abc123" / "Get details for policy ID AWS.S3.Bucket.PublicReadACP" |
| Disable a detection by setting enabled to false. Supports rules, scheduled_rules, simple_rules, and policies | "Disable rule abc123" / "Disable policy AWS.S3.Bucket.PublicReadACP" |
Tool Name | Description | Sample Prompt |
| List global helper functions with comprehensive filtering options (name search, creator, modifier) | "Show me global helpers containing 'aws' in the name" |
| Get detailed information and complete Python code for a specific global helper | "Get the complete code for global helper 'AWSUtilities'" |
Tool Name | Description | Sample Prompt |
| List data models that control UDM mappings in rules | "Show me all data models for log parsing" |
| Get detailed information about a specific data model | "Get the complete details for the 'AWS_CloudTrail' data model" |
Tool Name | Description | Sample Prompt |
| List available log type schemas with optional filters | "Show me all AWS-related schemas" |
| Get detailed information for specific log type schemas | "Get full details for AWS.CloudTrail schema" |
Tool Name | Description | Sample Prompt |
| Get metrics about alerts grouped by rule | "Show top 10 rules by alert count" |
| Get metrics about alerts grouped by severity | "Show alert counts by severity for the last week" |
| Get data ingestion metrics by log type and source | "Show me data ingestion volume by log type" |
Tool Name | Description | Sample Prompt |
| List all Panther user accounts with pagination support | "Show me all active Panther users" / "List the first 25 users" |
| Get detailed information about a specific user | "Get details for user ID 'john.doe@company.com'" |
| Get the current user's permissions | "What permissions do I have?" |
| List all roles with filtering options (name search, role IDs, sort direction) | "Show me all roles containing 'Admin' in the name" |
| Get detailed information about a specific role including permissions | "Get complete details for the 'Admin' role" |
Related MCP server: stepsecurity-mcp
Panther Configuration
Follow these steps to configure your API credentials and environment.
Create an API token in Panther:
Navigate to Settings (gear icon) → API Tokens
Create a new token with the following permissions (recommended read-only approach to start):

Store the generated token securely (e.g., 1Password)
Copy the Panther instance URL from your browser (e.g.,
https://YOUR-PANTHER-INSTANCE.domain)Note: This must include
https://
MCP Server Installation
Choose one of the following installation methods:
Docker (Recommended)
The easiest way to get started is using our pre-built Docker image:
{
"mcpServers": {
"mcp-panther": {
"command": "docker",
"args": [
"run",
"-i",
"-e", "PANTHER_INSTANCE_URL",
"-e", "PANTHER_API_TOKEN",
"--rm",
"ghcr.io/panther-labs/mcp-panther"
],
"env": {
"PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
"PANTHER_API_TOKEN": "YOUR-API-KEY"
}
}
}
}Version Pinning: For production stability, pin to a specific version tag:
"ghcr.io/panther-labs/mcp-panther:v2.2.0"Available tags can be found on the GitHub Container Registry.
UVX
For Python users, you can run directly from PyPI using uvx:
Configure your MCP client:
{
"mcpServers": {
"mcp-panther": {
"command": "uvx",
"args": ["mcp-panther"],
"env": {
"PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
"PANTHER_API_TOKEN": "YOUR-PANTHER-API-TOKEN"
}
}
}
}Version Pinning: For production stability, pin to a specific version:
"args": ["mcp-panther==2.2.0"]Available versions can be found on PyPI.
MCP Client Setup
Cursor
Follow the instructions here to configure your project or global MCP configuration. It's VERY IMPORTANT that you do not check this file into version control.
Once configured, navigate to Cursor Settings > MCP to view the running server:
Tips:
Be specific about where you want to generate new rules by using the
@symbol and then typing a specific directory.For more reliability during tool use, try selecting a specific model, like Claude 3.7 Sonnet.
If your MCP Client is failing to find any tools from the Panther MCP Server, try restarting the Client and ensuring the MCP server is running. In Cursor, refresh the MCP Server and start a new chat.
Claude Code
Claude Code is Anthropic's official CLI tool. Add the Panther MCP server using Docker:
claude mcp add-json panther '{
"command": "docker",
"args": [
"run",
"-i",
"-e", "PANTHER_INSTANCE_URL",
"-e", "PANTHER_API_TOKEN",
"--rm",
"ghcr.io/panther-labs/mcp-panther"
],
"env": {
"PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
"PANTHER_API_TOKEN": "YOUR-API-TOKEN"
}
}'Alternatively, using UVX:
claude mcp add-json panther '{
"command": "uvx",
"args": ["mcp-panther"],
"env": {
"PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
"PANTHER_API_TOKEN": "YOUR-API-TOKEN"
}
}'After adding, verify the server is configured:
claude mcp listClaude Desktop
To use with Claude Desktop, manually configure your claude_desktop_config.json:
Open the Claude Desktop settings and navigate to the Developer tab
Click "Edit Config" to open the configuration file
Add the following configuration:
{
"mcpServers": {
"mcp-panther": {
"command": "uvx",
"args": ["mcp-panther"],
"env": {
"PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
"PANTHER_API_TOKEN": "YOUR-PANTHER-API-TOKEN"
}
}
}
}Save the file and restart Claude Desktop
If you run into any issues, try the troubleshooting steps here.
Goose CLI
Use with Goose CLI, Block's open-source AI agent:
# Start Goose with the MCP server
goose session --with-extension "uvx mcp-panther"Goose Desktop
Use with Goose Desktop, Block's open-source AI agent:
From 'Extensions' -> 'Add custom extension' provide your configuration information.
Running the Server
The MCP Panther server supports multiple transport protocols:
STDIO (Default)
For local development and MCP client integration:
uv run python -m mcp_panther.serverStreamable HTTP
For running as a persistent web service, use the HTTP transport. This is ideal for:
Long-running server deployments
Multiple clients connecting to the same server
Testing and debugging with continuous log monitoring
Using Docker Run (Detached)
docker run -d \
--name panther-mcp-server \
-p 8000:8000 \
-e PANTHER_INSTANCE_URL=https://YOUR-PANTHER-INSTANCE.domain \
-e PANTHER_API_TOKEN=YOUR-API-TOKEN \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8000 \
-e LOG_LEVEL=INFO \
--restart unless-stopped \
ghcr.io/panther-labs/mcp-panther:latestUsing Docker Compose (Recommended)
Create a docker-compose.yml file:
services:
panther-mcp:
image: ghcr.io/panther-labs/mcp-panther:latest
container_name: panther-mcp-server
ports:
- "8000:8000"
environment:
- PANTHER_INSTANCE_URL=https://YOUR-PANTHER-INSTANCE.domain
- PANTHER_API_TOKEN=YOUR-API-TOKEN
- MCP_TRANSPORT=streamable-http
- MCP_HOST=0.0.0.0
- MCP_PORT=8000
- LOG_LEVEL=INFO
restart: unless-stoppedStart the server:
# Start in detached mode
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the server
docker-compose downConnecting Claude Code to HTTP Server
Important: The server runs on HTTP (not HTTPS). Configure Claude Code with the http:// URL:
# Add the HTTP endpoint (note: http:// not https://)
claude mcp add-json panther-http '{
"url": "http://localhost:8000/mcp"
}'
# Verify configuration
claude mcp listTesting the Connection
# Test the HTTP endpoint
curl http://localhost:8000/mcp
# View server logs
docker logs -f panther-mcp-server
# Or with docker-compose:
docker-compose logs -fYou can also test using the FastMCP client:
import asyncio
from fastmcp import Client
async def test_connection():
async with Client("http://localhost:8000/mcp") as client:
tools = await client.list_tools()
print(f"Available tools: {len(tools)}")
asyncio.run(test_connection())Troubleshooting Streamable HTTP
Port Already in Use
If you see Bind for 0.0.0.0:8000 failed: port is already allocated:
# Check what's using the port
lsof -i :8000
# Stop conflicting containers
docker ps | grep panther
docker stop <container-id>
# Or use a different port via MCP_PORT environment variable:
-e MCP_PORT=8080
# Then connect to: http://localhost:8080/mcpInvalid HTTP Request Warnings
If you see WARNING: Invalid HTTP request received in the logs, this usually means:
Claude Code is trying to connect via HTTPS instead of HTTP
Check your configuration uses
http://nothttps://Verify with:
claude mcp list
Environment Variables
MCP_TRANSPORT: Set transport type (stdioorstreamable-http)MCP_PORT: Port for HTTP transport (default: 3000)MCP_HOST: Host for HTTP transport (default: 127.0.0.1)MCP_LOG_FILE: Log file path (optional)
Security Best Practices
We highly recommends the following MCP security best practices:
Apply strict least-privilege to Panther API tokens. Scope tokens to the minimal permissions required and bind them to an IP allow-list or CIDR range so they're useless if exfiltrated. Rotate credentials on a preferred interval (e.g., every 30d).
Host the MCP server in a locked-down sandbox (e.g., Docker) with read-only mounts. This confines any compromise to a minimal blast radius.
Monitor credential access to Panther and monitor for anomalies. Write a Panther rule!
Run only trusted, officially signed MCP servers. Verify digital signatures or checksums before running, audit the tool code, and avoid community tools from unofficial publishers.
Troubleshooting
Check the server logs for detailed error messages: tail -n 20 -F ~/Library/Logs/Claude/mcp*.log. Common issues and solutions are listed below.
Running tools
If you get a
{"success": false, "message": "Failed to [action]: Request failed (HTTP 403): {\"error\": \"forbidden\"}"}error, it likely means your API token lacks the particular permission needed by the tool.Ensure your Panther Instance URL is correctly set. You can view this in the
config://pantherresource from your MCP Client.
Contributing
We welcome contributions to improve MCP-Panther! Here's how you can help:
Report Issues: Open an issue for any bugs or feature requests
Submit Pull Requests: Fork the repository and submit PRs for bug fixes or new features
Improve Documentation: Help us make the documentation clearer and more comprehensive
Share Use Cases: Let us know how you're using MCP-Panther and what could make it better
Please ensure your contributions follow our coding standards and include appropriate tests and documentation.
Contributors
This project exists thanks to all the people who contribute. Special thanks to Tomasz Tchorz and Glenn Edwards from Block, who played a core role in launching MCP-Panther as a joint open-source effort with Panther.
See our CONTRIBUTORS.md for a complete list of contributors.
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Available Tools
36 toolsadd_alert_commentADestructive
Add a comment to a Panther alert. Comments support Markdown formatting.
Returns: Dict containing: - success: Boolean indicating if the comment was added successfully - comment: Created comment information if successful - message: Error message if unsuccessful
Permissions:{'all_of': ['Manage Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The ID of the alert to comment on | |
| comment | Yes | The comment text to add |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the destructiveHint annotation. It discloses that comments support Markdown formatting, specifies required permissions ('Manage Alerts'), and outlines the return structure (success boolean, comment info, error message). This compensates well for the annotation's limited information, though it doesn't mention rate limits 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 front-loaded with the core purpose, followed by formatting details, return values, and permissions. It's efficiently structured in three clear sections, though the return format listing could be slightly more concise. Overall, it's well-organized 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 (implied by the return format description), 100% parameter schema coverage, and annotations, the description is complete. It covers the tool's purpose, behavioral traits (formatting, permissions, returns), and usage context adequately for this mutation 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?
With 100% schema description coverage, the input schema already fully documents the two parameters (alert_id and comment). The description doesn't add any parameter-specific details beyond what's in the schema, so it meets the baseline of 3 without providing extra semantic value.
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 verb 'Add' and the resource 'comment to a Panther alert', clearly distinguishing it from sibling tools like list_alert_comments (which lists comments) and update_alert_assignee/status (which modify other alert properties). It specifies the action and target precisely.
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 usage when needing to comment on an alert, but doesn't explicitly state when to use this versus alternatives like list_alert_comments for viewing comments. It mentions Markdown formatting as a feature, which provides some context, but lacks explicit guidance on prerequisites or exclusions beyond the permissions note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_update_alertsADestructiveIdempotent
Bulk update multiple alerts with status, assignee, and/or comment changes.
This tool allows you to efficiently update multiple alerts at once by setting their status, assignee, and adding a comment. At least one of status, assignee_id, or comment must be provided.
Returns: Dict containing: - success: Boolean indicating overall success - results: Dict with operation results: - status_updates: List of alert IDs successfully updated with new status - assignee_updates: List of alert IDs successfully updated with new assignee - comments_added: List of alert IDs that successfully received comments - failed_operations: List of failed operations with error details - summary: Dict with counts of successful and failed operations - message: Error message if unsuccessful
Permissions:{'all_of': ['Manage Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_ids | Yes | List of alert IDs to update (maximum 25) | |
| status | No | Optional new status for the alerts | |
| assignee_id | No | Optional ID of the user to assign the alerts to | |
| comment | No | Optional comment to add to all alerts |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=true, which the description aligns with by describing updates. The description adds valuable context beyond annotations: it specifies the maximum alert count (25), details the return structure, and mentions required permissions ('Manage Alerts'), enhancing behavioral understanding 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 well-structured and front-loaded with the core purpose, followed by usage details and return values. It is appropriately sized with no redundant sentences, though the return value section is detailed but necessary 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?
Given the tool's complexity (bulk updates with destructive potential), the description is complete: it covers purpose, usage constraints, permissions, return structure, and parameter requirements. With annotations and an output schema present, it provides all necessary context for effective tool 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?
With 100% schema description coverage, the schema fully documents all parameters. The description adds minimal semantic value beyond the schema, such as noting that at least one update field is required, but does not provide additional syntax or format details. This meets the baseline for high 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?
The description clearly states the specific action ('bulk update multiple alerts') and resources ('alerts'), distinguishing it from siblings like 'update_alert_assignee' or 'update_alert_status' by emphasizing bulk operations. It explicitly lists the fields that can be updated (status, assignee, comment).
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 clear context for when to use this tool ('efficiently update multiple alerts at once') and specifies that at least one update field must be provided. However, it does not explicitly mention when to use alternatives like individual update tools or exclusions, though the bulk nature implies it's for batch operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_detectionADestructiveIdempotent
Disable a Panther detection by setting enabled to false.
Permissions:{'any_of': ['Manage Rules', 'Manage Policies']}
| Name | Required | Description | Default |
|---|---|---|---|
| detection_id | Yes | The ID of the detection to disable | |
| detection_type | No | Type of detection to disable. Valid options: rules, scheduled_rules, simple_rules, or policies. | rules |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=true, which the description does not contradict. The description adds value by specifying the permission requirements, which are not covered by annotations. It could provide more behavioral context (e.g., effects on alerts, rate limits), but with annotations present, the bar is lower, and the permission info is useful.
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, front-loaded with the main action and followed by permission details. Every sentence provides essential information without redundancy, making it efficient and well-structured.
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 (destructive mutation with permissions), annotations cover idempotency and destructiveness, and an output schema exists, the description is mostly complete. It includes permission requirements but could benefit from more context on outcomes or error handling. However, with output schema handling return values, it's sufficient.
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 clear descriptions for both parameters (detection_id and detection_type). The description does not add any additional semantic information beyond what the schema provides, such as explaining parameter interactions or edge cases. Baseline is 3 when schema coverage is high.
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 specific action ('Disable a Panther detection') and the mechanism ('by setting enabled to false'), making the purpose explicit. It distinguishes this tool from sibling tools like 'get_detection' or 'list_detections' by focusing on modification rather than retrieval.
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 permission requirements ('Permissions:{"any_of": ["Manage Rules", "Manage Policies"]}'), providing clear context for when to use this tool based on user access. However, it does not explicitly mention when not to use it or name alternatives (e.g., compared to other update tools), which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_alert_triage_summaryARead-only
Retrieve the latest AI triage summary for a specific Panther alert.
This tool retrieves the most recently generated AI triage analysis for an alert. It fetches the list of AI inference stream IDs associated with the alert, then retrieves the response text for the latest stream.
Returns: Dict containing: - success: Boolean indicating if retrieval was successful - summary: The latest AI triage summary containing: - stream_id: The unique stream identifier - response_text: The AI-generated triage summary - finished: Whether the triage generation completed - error: Any error message if present - message: Error message if unsuccessful
Permissions:{'all_of': ['Run Panther AI']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The ID of the alert to retrieve the latest AI triage summary for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it explains the internal process (fetches stream IDs, retrieves latest response text), discloses permission requirements ('Run Panther AI'), and details the return structure. This enriches understanding 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 appropriately sized and front-loaded, with the core purpose stated first. However, the 'Returns:' section is somewhat redundant given the output schema, and the permission note could be integrated more smoothly, slightly reducing efficiency.
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 (involves multi-step retrieval), rich annotations (readOnlyHint), and the presence of an output schema, the description is complete. It covers the purpose, process, permissions, and return values, providing sufficient context for an agent to use it effectively without over-explaining structured data.
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 the parameter 'alert_id' well-documented in the schema. The description adds no additional parameter semantics beyond what the schema provides (e.g., format examples or constraints), so it meets the baseline of 3 for high schema coverage without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('retrieve'), resource ('latest AI triage summary'), and scope ('for a specific Panther alert'). It distinguishes this tool from siblings like 'get_alert' (which retrieves general alert details) and 'start_ai_alert_triage' (which initiates triage generation), making the purpose unambiguous and well-differentiated.
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 usage context by specifying it retrieves 'the most recently generated AI triage analysis for an alert,' suggesting it should be used after triage has been initiated. However, it doesn't explicitly state when NOT to use it (e.g., if no triage exists) or name alternatives like 'start_ai_alert_triage' for generating triage, leaving some guidance gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alertARead-only
Get detailed information about a specific Panther alert by ID
Permissions:{'all_of': ['Read Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The ID of the alert to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds value by specifying required permissions ('Read Alerts'), which is not covered by annotations, enhancing transparency about access needs. It doesn't describe rate limits or return format, but with annotations and an output schema, this is 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?
The description is front-loaded with the core purpose in the first sentence, followed by essential permission details. Both sentences earn their place by providing critical information without redundancy, making it efficient and well-structured.
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 (1 parameter, read-only operation), annotations cover safety, schema fully documents inputs, and an output schema exists for return values. The description adds permissions context, making it complete enough for an agent to understand and invoke the tool correctly without gaps.
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 the parameter 'alert_id' fully documented in the schema. The description adds no additional parameter details beyond what the schema provides, such as format examples or constraints. Baseline 3 is appropriate since the schema handles the heavy lifting.
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 detailed information') and resource ('about a specific Panther alert by ID'), making the purpose explicit. It distinguishes from siblings like 'list_alerts' (which lists multiple alerts) and 'get_alert_events' (which fetches events for an alert), establishing a specific scope for retrieving a single alert's 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 implies usage context by specifying 'by ID' and mentioning permissions, which helps identify when to use this tool (e.g., for a known alert ID). However, it lacks explicit guidance on when to choose this over alternatives like 'list_alerts' for browsing or 'get_alert_events' for event data, leaving some ambiguity in sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alert_eventsARead-only
Get events for a specific Panther alert. Order of events is not guaranteed. This tool does not support pagination to prevent long-running, expensive queries.
Returns: Dict containing: - success: Boolean indicating if the request was successful - events: List of most recent events if successful - message: Error message if unsuccessful
Permissions:{'all_of': ['Read Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The ID of the alert to get events for | |
| limit | No | Maximum number of events to return |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, but the description adds valuable behavioral context beyond this: it notes that event order is not guaranteed and that pagination is unsupported to prevent expensive queries. This enhances transparency about limitations and performance considerations, though it could mention rate limits or authentication needs.
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 and front-loaded, starting with the core purpose, followed by important behavioral notes and return value details. Each sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.
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 (a read operation with two parameters), the presence of annotations (readOnlyHint) and an output schema (implied by the Returns section), the description is complete. It covers purpose, behavioral traits, and return values, providing sufficient context for effective tool selection and 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?
The input schema has 100% description coverage, clearly documenting both parameters (alert_id and limit). The description does not add any additional meaning or semantics beyond what the schema provides, such as explaining parameter interactions or constraints. With high schema coverage, 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 with a specific verb ('Get') and resource ('events for a specific Panther alert'), distinguishing it from siblings like 'get_alert' (which retrieves alert metadata) and 'get_alert_event_stats' (which provides statistics). It precisely defines what the tool does without being vague or tautological.
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 clear context for when to use this tool (to retrieve events for a specific alert) and implicitly distinguishes it from alternatives by specifying its scope. However, it does not explicitly state when not to use it or name specific sibling tools as alternatives, such as 'list_alerts' for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alert_event_statsARead-only
Analyze patterns and relationships across multiple alerts by aggregating their event data into time-based groups.
For each time window (configurable from 1-60 minutes), the tool collects unique entities (IPs, emails, usernames, trace IDs) and alert metadata (IDs, rules, severities) to help identify related activities.
Results are ordered chronologically with the most recent first, helping analysts identify temporal patterns, common entities, and potential incident scope.
Returns: Dict containing: - success: Boolean indicating if the query was successful - status: Status of the query (e.g., "succeeded", "failed", "cancelled") - message: Error message if unsuccessful - results: List of query result rows - column_info: Dict containing column names and types - stats: Dict containing stats about the query - has_next_page: Boolean indicating if there are more results available - next_cursor: Cursor for fetching the next page of results, or null if no more pages
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_ids | Yes | List of alert IDs to analyze | |
| time_window | No | The time window in minutes to group distinct events by | |
| start_date | No | Optional start date in ISO-8601 format. Defaults to start of today UTC. | |
| end_date | No | Optional end date in ISO-8601 format. Defaults to end of today UTC. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable behavioral context beyond this: it specifies the tool aggregates data into time windows, collects unique entities and metadata, orders results chronologically with most recent first, and returns paginated results (has_next_page, next_cursor). It also mentions permissions requirements ('Query Data Lake'), which isn't covered by annotations. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear paragraphs: purpose, parameter context, result ordering, and return format. It's appropriately sized for a complex analytical tool. However, the detailed return format section (8 bullet points) is somewhat lengthy and could be streamlined, as some of this information might be better covered by an output schema (which exists).
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 analytical complexity, the description is complete: it explains the purpose, behavioral traits (aggregation, ordering, pagination), and permissions. With annotations covering safety (readOnlyHint) and an output schema existing (implied by context signals), the description doesn't need to detail return values extensively. It provides sufficient context for an agent to understand when and how to use this tool effectively.
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 fully documents all parameters (alert_ids, time_window, start_date, end_date). The description adds minimal parameter semantics beyond the schema: it mentions time windows are 'configurable from 1-60 minutes' (implied by time_window) and that results help identify patterns. However, it doesn't provide additional context about parameter interactions or usage examples beyond what's in the schema descriptions.
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 as analyzing patterns across multiple alerts by aggregating event data into time-based groups. It specifies the verb 'analyze' and resource 'alert event stats', distinguishing it from sibling tools like get_alert (single alert) or get_alert_events (raw events). The description provides specific details about what gets aggregated (entities, metadata) and the goal (identify related activities).
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 usage context by stating it helps 'identify related activities' and 'identify temporal patterns', suggesting it's for pattern analysis across alerts. However, it doesn't explicitly state when to use this tool versus alternatives like get_alert_events (which might return raw events) or query_data_lake (which might allow more flexible queries). The guidance is clear but lacks explicit sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bytes_processed_metricsBRead-only
Retrieves data ingestion metrics showing total bytes processed per log type and source, helping analyze data volume patterns.
Returns: Dict: - success: Boolean indicating if the query was successful - bytes_processed: List of series with breakdown by log type and source - total_bytes: Total bytes processed in the period - start_date: Start date of the period - end_date: End date of the period - interval_in_minutes: Grouping interval for the metrics
Permissions:{'all_of': ['Read Panther Metrics']}
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Optional start date in ISO-8601 format. If provided, defaults to the start of the current day UTC. | |
| end_date | No | Optional end date in ISO-8601 format. If provided, defaults to the end of the current day UTC. | |
| interval_in_minutes | No | How data points are aggregated over time, with smaller intervals providing more granular detail of when events occurred, while larger intervals show broader trends but obscure the precise timing of incidents. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating this is a safe read operation. The description adds value by specifying the return structure (e.g., success flag, breakdowns, totals) and permissions ('Read Panther Metrics'), which aren't covered by annotations. However, it doesn't disclose other behavioral traits like rate limits, caching, or error handling. With annotations handling the safety profile, the description offers moderate additional context, aligning with a baseline score.
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 appropriately sized and front-loaded, starting with the core purpose. The 'Returns' section is detailed but necessary for clarity, and the permissions note is concise. However, the structure could be slightly improved by integrating the permissions into the main flow or using bullet points for better readability, but overall, it's 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 tool's complexity (3 parameters, 100% schema coverage, annotations, and an output schema implied by the return description), the description is fairly complete. It explains what the tool does, the return format, and permissions. The output schema details in the description compensate for the lack of a formal output schema field. However, it could benefit from more usage context or examples to fully guide the agent, keeping it from a perfect score.
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 each parameter (start_date, end_date, interval_in_minutes) well-documented in the schema. The description doesn't add any parameter-specific details beyond what's in the schema, such as explaining how the interval affects the 'bytes_processed' list. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description provides no extra 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?
The description clearly states the tool's purpose: 'Retrieves data ingestion metrics showing total bytes processed per log type and source, helping analyze data volume patterns.' It specifies the verb ('Retrieves'), resource ('data ingestion metrics'), and scope ('per log type and source'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_rule_alert_metrics' or 'get_severity_alert_metrics', which also retrieve metrics but for different aspects, so it doesn't reach the highest score.
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 mentions analyzing 'data volume patterns,' but doesn't specify scenarios, prerequisites, or exclusions. For example, it doesn't clarify if this is for real-time monitoring, historical analysis, or how it compares to other metrics tools in the sibling list. This lack of context leaves the agent without clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_modelBRead-only
Get detailed information about a Panther data model, including the mappings and body
Returns complete data model information including Python body code and UDM mappings.
Permissions:{'all_of': ['View Rules']}
| Name | Required | Description | Default |
|---|---|---|---|
| data_model_id | Yes | The ID of the data model to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds useful context: it specifies the permissions required ('View Rules'), which isn't covered by annotations. However, it doesn't disclose other behavioral traits like rate limits, error conditions, or what 'complete' information entails beyond the schema. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three sentences that are front-loaded: the first states the purpose, the second elaborates on returns, and the third adds permissions. There's minor redundancy between the first two sentences, but overall it's efficient with zero 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 tool's complexity (simple read operation), annotations cover safety, schema covers parameters fully, and an output schema exists (so return values are documented), the description is mostly complete. It adds permissions context, which is valuable. However, it lacks guidance on usage versus siblings, which is a minor gap in this 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 the parameter 'data_model_id' fully documented in the schema. The description adds no additional meaning about parameters beyond what the schema provides (e.g., no examples or usage notes). With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to.
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 detailed information about a Panther data model, including the mappings and body' and 'Returns complete data model information including Python body code and UDM mappings.' This specifies the verb ('Get'), resource ('Panther data model'), and scope of information returned. However, it doesn't explicitly differentiate from sibling tools like 'list_data_models' or 'get_detection' beyond the data model focus.
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 mentions permissions ('View Rules'), but this doesn't help choose between this and sibling tools like 'list_data_models' (for listing) or 'get_detection' (for other resources). There's no explicit when/when-not context or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_detectionBRead-only
Get detailed information about a Panther detection, including the detection body and tests.
Permissions:{'all_of': ['View Rules', 'View Policies']}
| Name | Required | Description | Default |
|---|---|---|---|
| detection_id | Yes | The ID of the detection to fetch | |
| detection_type | No | One or more detection types - rules, scheduled_rules, simple_rules, or policies. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which the description doesn't contradict. The description adds value by specifying required permissions ('View Rules', 'View Policies'), which aren't covered by annotations. However, it lacks other behavioral details like rate limits, error handling, or output format, keeping it at a baseline level with some added context.
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 front-loaded, with two sentences that directly state the purpose and permissions. There's no wasted text, though it could be slightly more structured (e.g., separating purpose from permissions).
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 moderate complexity (read operation with permissions), 100% schema coverage, annotations, and an output schema, the description is reasonably complete. It covers purpose and permissions, though it lacks usage guidelines. The output schema handles return values, so the description doesn't need to explain them.
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 fully documents both parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain 'detection body and tests' in relation to parameters). This meets the baseline for high 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?
The description clearly states the tool's purpose: 'Get detailed information about a Panther detection, including the detection body and tests.' It specifies the verb ('Get detailed information') and resource ('Panther detection'), making the function clear. However, it doesn't explicitly differentiate from siblings like 'list_detections' or 'get_alert', which would require 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 provides no guidance on when to use this tool versus alternatives. It mentions permissions but doesn't specify use cases, prerequisites, or exclusions compared to sibling tools like 'list_detections' or 'get_alert'. This leaves the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_helperARead-only
Get detailed information about a Panther global helper by ID
Returns complete global helper information including Python body code and usage details.
Permissions:{'all_of': ['View Rules']}
| Name | Required | Description | Default |
|---|---|---|---|
| helper_id | Yes | The ID of the global helper to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description doesn't contradict this. It adds valuable context beyond annotations: it specifies the return content ('complete global helper information including Python body code and usage details') and includes permissions requirements ('Permissions:{'all_of': ['View Rules']}'), which are not covered by annotations. However, it doesn't mention rate limits or other behavioral traits.
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 appropriately sized with three sentences: purpose, return details, and permissions. It's front-loaded with the core purpose, and each sentence adds value (return specifics and permissions). Minor improvement could be merging sentences for tighter flow, but it's efficient with zero 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 tool's simplicity (1 parameter, 100% schema coverage, read-only operation, and an output schema exists), the description is complete. It covers purpose, return content, and permissions, which are sufficient for an AI agent to understand and invoke the tool correctly without needing to explain return values (handled by 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%, with the helper_id parameter well-documented in the schema. The description adds no additional parameter semantics beyond what the schema provides (e.g., no format details or examples beyond the schema's examples). Baseline 3 is appropriate since the schema does the heavy lifting.
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 specific action ('Get detailed information') and resource ('Panther global helper by ID'), distinguishing it from sibling tools like list_global_helpers (which lists helpers) and other get_* tools that fetch different resources. The verb+resource combination is precise and 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 implies usage when detailed information about a specific global helper is needed, but it doesn't explicitly state when to use this tool versus alternatives like list_global_helpers (for browsing) or other get_* tools. No exclusions or prerequisites are mentioned beyond the permissions requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_http_log_sourceARead-only
Get detailed information about a specific HTTP log source by ID.
HTTP log sources are used to collect logs via HTTP endpoints/webhooks. This tool provides detailed configuration information for troubleshooting and monitoring HTTP log source integrations.
Args: source_id: The ID of the HTTP log source to retrieve
Returns: Dict containing: - success: Boolean indicating if the query was successful - source: HTTP log source information if successful, containing: - integrationId: The source ID - integrationLabel: The source name/label - logTypes: List of log types this source handles - logStreamType: Stream type (Auto, JSON, JsonArray, etc.) - logStreamTypeOptions: Additional stream type configuration - authMethod: Authentication method (None, Bearer, Basic, etc.) - authBearerToken: Bearer token if using Bearer auth - authUsername: Username if using Basic auth - authPassword: Password if using Basic auth - authHeaderKey: Header key for HMAC/SharedSecret auth - authSecretValue: Secret value for HMAC/SharedSecret auth - authHmacAlg: HMAC algorithm if using HMAC auth - message: Error message if unsuccessful
Permissions:{'all_of': ['View Log Sources']}
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | The ID of the HTTP log source to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 valuable behavioral context beyond this by explaining that HTTP log sources are for 'collecting logs via HTTP endpoints/webhooks' and that the tool provides 'detailed configuration information for troubleshooting and monitoring.' It also includes permissions information ('View Log Sources'), which is crucial for access control. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, context about HTTP log sources, and detailed return value documentation. It's appropriately sized for a tool with complex output, though the extensive Returns section could be streamlined since an output schema exists. Most sentences earn their place, but there's some redundancy in parameter documentation.
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 (single parameter but detailed output), the description is highly complete. It explains the purpose, provides context about HTTP log sources, documents the parameter, and details the return structure comprehensively. With annotations covering read-only behavior and an output schema likely available, the description adds all necessary contextual information without gaps.
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, with the parameter 'source_id' well-documented in the schema. The description adds minimal value by restating 'The ID of the HTTP log source to retrieve' in the Args section, which is redundant with the schema. However, it doesn't provide additional semantic context beyond what the schema already offers, so it meets the baseline for high 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?
The description clearly states the tool's purpose: 'Get detailed information about a specific HTTP log source by ID.' It specifies the verb ('Get'), resource ('HTTP log source'), and scope ('by ID'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'list_log_sources' beyond the 'by ID' detail, which is why it doesn't reach a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage context by stating that HTTP log sources 'are used to collect logs via HTTP endpoints/webhooks' and that this tool is for 'troubleshooting and monitoring HTTP log source integrations.' However, it lacks explicit guidance on when to use this tool versus alternatives like 'list_log_sources' or other sibling tools, leaving the agent to infer based on the 'by ID' requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_log_type_schema_detailsARead-only
Get detailed information for specific log type schemas, including their full specifications. Limited to 5 schemas at a time to prevent response size issues.
Returns: Dict containing: - success: Boolean indicating if the query was successful - schemas: List of schemas, each containing: - name: Schema name (Log Type) - description: Schema description - spec: Schema specification in YAML/JSON format - version: Schema version number - revision: Schema revision number - isArchived: Whether the schema is archived - isManaged: Whether the schema is managed by a pack - isFieldDiscoveryEnabled: Whether automatic field discovery is enabled - referenceURL: Optional documentation URL - discoveredSpec: The schema discovered spec - createdAt: Creation timestamp - updatedAt: Last update timestamp - message: Error message if unsuccessful
Permissions:{'all_of': ['View Rules']}
| Name | Required | Description | Default |
|---|---|---|---|
| schema_names | Yes | List of schema names to get details for (max 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=true, and the description adds valuable behavioral context beyond this: it discloses the response size limitation ('Limited to 5 schemas at a time'), includes permissions requirements ('Permissions:{'all_of': ['View Rules']}'), and details the return structure. This enriches the agent's understanding 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 well-structured and appropriately sized, with the purpose and key constraints stated upfront, followed by a detailed return format. Every sentence adds value, though the return details are extensive; it could be slightly more concise by summarizing the return structure rather than listing all fields.
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 (detailed schema retrieval with permissions), the description is complete: it covers purpose, usage constraints, behavioral traits, and a comprehensive return format. With annotations covering read-only nature and an output schema implied by the detailed return description, no significant gaps remain for agent understanding.
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, clearly documenting the 'schema_names' parameter with its description, examples, and constraints. The description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate as the schema does the heavy lifting.
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 specific action ('Get detailed information') and resource ('specific log type schemas'), including the scope ('full specifications'). It distinguishes from sibling tools like 'list_log_type_schemas' by focusing on detailed retrieval rather than 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?
The description provides clear context by specifying the limitation ('Limited to 5 schemas at a time') and implicitly suggests usage when detailed schema information is needed. However, it does not explicitly state when to use this tool versus alternatives like 'get_table_schema' or 'list_log_type_schemas', missing explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_permissionsARead-only
Get the current user's permissions. Use this to diagnose permission errors and determine if a new API token is needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds useful context about the diagnostic purpose (permission errors, API token needs) which goes beyond the annotations. However, it doesn't disclose other behavioral traits like rate limits, authentication requirements beyond the implied token context, or response format details that aren't covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two clear sentences that each serve distinct purposes: the first states what the tool does, the second explains when to use it. There's zero wasted language, and the most important information (the tool's function) comes first.
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 read-only tool with 0 parameters, annotations covering safety, and an output schema, the description provides adequate context. It explains the purpose and practical use cases well. The main gap is that it doesn't explicitly mention what information the permissions include or the format of the response, but the output schema should cover that.
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 0 parameters and 100% schema description coverage, the schema fully documents the lack of inputs. The description doesn't need to explain parameters, and it appropriately focuses on the tool's purpose and usage instead. A baseline of 4 is appropriate for zero-parameter tools where the description adds value elsewhere.
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 'current user's permissions', making the purpose explicit. However, it doesn't distinguish this tool from potential sibling permission-related tools (none are listed in siblings, but the agent might assume others exist). The diagnostic use case adds specificity but doesn't fully differentiate from hypothetical alternatives.
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 clear context for when to use this tool: 'to diagnose permission errors and determine if a new API token is needed'. This gives practical guidance on appropriate scenarios. However, it doesn't explicitly state when NOT to use it or mention alternatives (though no obvious permission-related siblings exist in the provided list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_roleARead-only
Get detailed information about a Panther role by ID
Returns complete role information including all permissions and settings.
Permissions:{'all_of': ['Read User Info']}
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | The ID of the role to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which the description does not contradict. The description adds value by specifying the return content ('complete role information including all permissions and settings') and permission requirements ('Permissions: {"all_of": ["Read User Info"]}'), which are not covered by annotations. It provides useful behavioral context 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?
The description is front-loaded with the core purpose, followed by return details and permissions. Every sentence adds value without redundancy, and it is appropriately sized for a simple tool with one parameter and clear annotations. No wasted words or unnecessary elaboration.
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 low complexity (1 parameter, 100% schema coverage), presence of annotations (readOnlyHint), and an output schema, the description is complete. It covers purpose, return content, and permissions, which are sufficient for an AI agent to understand and invoke the tool correctly without needing to explain return values (handled by 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%, with the parameter 'role_id' fully documented in the schema. The description does not add any additional meaning or details about the parameter beyond what the schema provides, such as format constraints or examples. Baseline score of 3 is appropriate as the schema handles parameter documentation adequately.
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 specific action ('Get detailed information') and resource ('Panther role by ID'), distinguishing it from sibling tools like 'list_roles' (which lists roles) and 'get_user' (which fetches user info). It precisely defines the tool's function without being vague or tautological.
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 usage when detailed role info is needed (vs. 'list_roles' for listing), but does not explicitly state when to use this tool over alternatives or any exclusions. It provides clear context but lacks explicit guidance on when-not scenarios or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rule_alert_metricsARead-only
Gets alert metrics grouped by detection rule for ALL alert types, including alerts, detection errors, and system errors within a given time period. Use this tool to identify hot spots in alerts and use list_alerts for specific alert details.
Returns: Dict: - alerts_per_rule: List of series with entityId, label, and value - total_alerts: Total number of alerts in the period - start_date: Start date of the period - end_date: End date of the period - interval_in_minutes: Grouping interval for the metrics - rule_ids: List of rule IDs if provided
Permissions:{'all_of': ['Read Panther Metrics']}
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Optional start date in ISO-8601 format. If provided, defaults to the start of the current day UTC. | |
| end_date | No | Optional end date in ISO-8601 format. If provided, defaults to the end of the current day UTC. | |
| interval_in_minutes | No | Intervals for aggregating data points. Smaller intervals provide more granular detail of when events occurred, while larger intervals show broader trends but obscure the precise timing of incidents. | |
| rule_ids | No | A valid JSON list of Panther rule IDs to get metrics for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, indicating this is a safe read operation. The description adds valuable context beyond annotations by specifying the scope ('for ALL alert types'), mentioning the permission requirement ('Permissions:{"all_of": ["Read Panther Metrics"]}'), and describing the grouping behavior ('grouped by detection rule'). It doesn't contradict annotations and provides useful operational context.
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 purpose first, usage guidance second, and return format third. The permission information is appended but relevant. While efficient, the return format section could be more concise since an output schema exists, making some of that detail redundant.
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 (aggregated metrics with time grouping), the description provides complete context. It covers purpose, differentiation from siblings, permission requirements, and behavioral scope. With both annotations (readOnlyHint) and an output schema present, the description appropriately focuses on operational context rather than repeating structured 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?
With 100% schema description coverage, the input schema already fully documents all 4 parameters with clear descriptions and examples. The description doesn't add any parameter-specific information beyond what's in the schema, but it does provide context about the time period grouping. This meets the baseline expectation when schema coverage is complete.
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 with specific verbs ('Gets alert metrics grouped by detection rule') and resources ('for ALL alert types, including alerts, detection errors, and system errors within a given time period'). It explicitly distinguishes from the sibling tool 'list_alerts' by specifying this is for aggregated metrics rather than specific alert 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 provides explicit guidance on when to use this tool ('Use this tool to identify hot spots in alerts') versus alternatives ('use list_alerts for specific alert details'). It clearly differentiates this aggregated metrics tool from the detailed listing sibling tool, giving the agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduled_queryARead-only
Get detailed information about a specific scheduled query by ID.
Returns complete scheduled query information including SQL, schedule configuration, and metadata.
Returns: Dict containing: - success: Boolean indicating if the query was successful - query: Scheduled query information if successful, containing: - id: Query ID - name: Query name - description: Query description - sql: The SQL query text - schedule: Schedule configuration (cron, rate, timeout) - managed: Whether the query is managed by Panther - createdAt: Creation timestamp - updatedAt: Last update timestamp - message: Error message if unsuccessful
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | The ID of the scheduled query to fetch (must be a UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable context beyond this by detailing the return structure, including success status and error handling, and specifying required permissions ('Query Data Lake'), which enhances transparency about access requirements and response 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 well-structured and front-loaded with the core purpose, followed by details on returns and permissions. It is appropriately sized with no redundant information, though the permissions note could be integrated more smoothly into the flow.
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 (single parameter, read-only operation), the description is complete. It includes purpose, detailed return values, and permissions, and with an output schema present, it does not need to explain return values further. The annotations cover safety, and the schema handles parameters fully.
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, fully documenting the single parameter 'query_id' with its UUID format and examples. The description does not add any additional semantic details about the parameter beyond what the schema provides, so it meets the baseline score of 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 the tool's purpose with a specific verb ('Get detailed information') and resource ('about a specific scheduled query by ID'), distinguishing it from sibling tools like 'list_scheduled_queries' which returns a list rather than detailed information for a single query.
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 usage context by specifying that it fetches information for a specific scheduled query by ID, but does not explicitly state when to use this tool versus alternatives like 'list_scheduled_queries' or provide exclusions. The permissions requirement is noted, but no explicit guidance on tool selection is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_severity_alert_metricsARead-only
Gets alert metrics grouped by severity for rule and policy alert types within a given time period. Use this tool to identify hot spots in your alerts, and use the list_alerts tool for specific details. Keep in mind that these metrics combine errors and alerts, so there may be inconsistencies from what list_alerts returns.
Returns: Dict: - alerts_per_severity: List of series with breakdown by severity - total_alerts: Total number of alerts in the period - start_date: Start date of the period - end_date: End date of the period - interval_in_minutes: Grouping interval for the metrics
Permissions:{'all_of': ['Read Panther Metrics']}
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Optional start date in ISO-8601 format. If provided, defaults to the start of the current day UTC. | |
| end_date | No | Optional end date in ISO-8601 format. If provided, defaults to the end of the current day UTC. | |
| alert_types | No | The specific Panther alert types to get metrics for. | |
| severities | No | The specific Panther alert severities to get metrics for. | |
| interval_in_minutes | No | How data points are aggregated over time, with smaller intervals providing more granular detail of when events occurred, while larger intervals show broader trends but obscure the precise timing of incidents. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true, the description adds valuable behavioral context about data inconsistencies ('these metrics combine errors and alerts, so there may be inconsistencies from what list_alerts returns') and includes permission requirements. It doesn't contradict annotations and provides useful operational insights beyond the structured data.
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 and appropriately sized, with purpose, usage guidance, behavioral notes, and return format clearly separated. While efficient, the inclusion of detailed return value documentation could be considered slightly redundant given the presence of an output schema.
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, the description provides excellent context with purpose, usage guidelines, behavioral notes, and return format. With both comprehensive annotations (readOnlyHint) and an output schema available, the description focuses appropriately on the value-added information needed for effective tool selection and use.
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 100% schema description coverage, the input schema already comprehensively documents all 5 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline expectation without providing additional semantic value.
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 with specific verbs ('Gets alert metrics grouped by severity') and resources ('for rule and policy alert types within a given time period'). It explicitly distinguishes from the sibling 'list_alerts' tool, making the differentiation clear and specific.
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 guidance on when to use this tool ('to identify hot spots in your alerts') versus alternatives ('use the list_alerts tool for specific details'). It also includes important context about data inconsistencies between tools, offering clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_schemaARead-only
Get column details for a specific data lake table.
IMPORTANT: This returns the table structure in Snowflake. For writing optimal queries, ALSO call get_panther_log_type_schema() to understand:
Nested object structures (only shown as 'object' type here)
Which fields map to p_any_* indicator columns
Array element structures
Example workflow:
get_panther_log_type_schema(["AWS.CloudTrail"]) - understand structure
get_table_schema("panther_logs.public", "aws_cloudtrail") - get column names/types
Write query using both: nested paths from log schema, column names from table schema
Returns: Dict containing: - success: Boolean indicating if the query was successful - name: Table name - display_name: Table display name - description: Table description - log_type: Log type - columns: List of columns, each containing: - name: Column name - type: Column data type - description: Column description - message: Error message if unsuccessful
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
| database_name | Yes | The name of the database where the table is located | |
| table_name | Yes | The name of the table to get columns for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, but the description adds valuable context beyond this: it specifies the return format in detail (including success flag, table metadata, columns list with name/type/description), mentions permissions requirement ('Permissions:{'all_of': ['Query Data Lake']}'), and explains limitations (e.g., nested structures only shown as 'object' type). 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 clear sections (purpose, important notes, workflow example, return format, permissions). While slightly longer due to the detailed example, every sentence adds value—no wasted words. It could be slightly more concise but remains highly 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 the tool's complexity (metadata retrieval with permissions), rich annotations (readOnlyHint), and detailed output schema (implied by the return format description), the description is complete. It covers purpose, usage guidelines, behavioral context, permissions, and integration with other tools, leaving no gaps for agent understanding.
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%, providing clear documentation for both parameters. The description doesn't add additional parameter semantics beyond what's in the schema, but it contextually explains how parameters fit into the workflow (e.g., using 'panther_logs.public' and 'aws_cloudtrail' in the example). Baseline 3 is appropriate given high 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?
The description clearly states the specific action ('Get column details') and resource ('for a specific data lake table'), distinguishing it from sibling tools like 'list_database_tables' (which lists tables) or 'get_log_type_schema_details' (which provides log structure details). It precisely defines the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool ('to get column names/types') and when to use an alternative ('For writing optimal queries, ALSO call get_panther_log_type_schema()'), including a detailed example workflow. It clearly differentiates this tool's role from complementary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userARead-only
Get detailed information about a Panther user by ID
Returns complete user information including email, names, role, authentication status, and timestamps.
Permissions:{'all_of': ['Read User Info']}
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The ID of the user to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds valuable context beyond this: it specifies the permission requirement ('Permissions:{'all_of': ['Read User Info']}') and details what information is returned (email, names, role, etc.). This enhances understanding of behavioral traits 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 appropriately sized and front-loaded with the core purpose, followed by return details and permissions. It avoids redundancy, but the formatting with extra spaces slightly affects structure. Overall, it's 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 tool's low complexity, high schema coverage, presence of annotations, and an output schema, the description is complete enough. It covers purpose, return values, and permissions, addressing key contextual needs without unnecessary elaboration.
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 the parameter 'user_id' well-documented in the schema. The description does not add significant meaning beyond the schema, as it only mentions 'by ID' without further details. Baseline 3 is appropriate given high 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?
The description clearly states the specific action ('Get detailed information') and resource ('a Panther user by ID'), distinguishing it from sibling tools like 'list_users' which returns multiple users. It precisely defines what the tool does without being vague or tautological.
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 usage by specifying 'by ID' and listing returned fields, but does not explicitly state when to use this tool versus alternatives like 'list_users' or other user-related tools. No explicit guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alert_commentsARead-only
Get all comments for a specific Panther alert.
Returns: Dict containing: - success: Boolean indicating if the request was successful - comments: List of comments if successful, each containing: - id: The comment ID - body: The comment text - createdAt: Timestamp when the comment was created - createdBy: Information about the user who created the comment - format: The format of the comment (HTML or PLAIN_TEXT or JSON_SCHEMA) - message: Error message if unsuccessful
Permissions:{'all_of': ['Read Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The ID of the alert to get comments for | |
| limit | No | Maximum number of comments to return |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable context beyond this: it discloses required permissions ('Read Alerts'), describes the return structure (including success flag, comments list with fields, and error message), and mentions pagination behavior via the 'limit' parameter. This enriches the agent's understanding 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 well-structured and front-loaded with the core purpose, followed by return details and permissions. It avoids redundancy, but the return value documentation is somewhat verbose; a more concise format (e.g., bullet points) could improve readability without losing 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 moderate complexity (2 parameters, read-only operation), the description is complete: it covers purpose, return structure, and permissions. With annotations indicating safety and an output schema implied by the detailed return documentation, no critical gaps exist for agent usage. It effectively supplements structured fields without unnecessary repetition.
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 clear descriptions for 'alert_id' and 'limit' parameters. The description does not add semantic details beyond the schema (e.g., it doesn't explain comment ordering or default behaviors). Given the high schema coverage, a baseline score of 3 is appropriate, as the description relies on the schema for parameter 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 description clearly states the specific action ('Get all comments') and resource ('for a specific Panther alert'), distinguishing it from siblings like 'add_alert_comment' (which creates comments) and 'get_alert' (which retrieves alert details). It precisely defines the tool's scope without 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 implies usage by specifying the target resource ('Panther alert'), but lacks explicit guidance on when to use this tool versus alternatives like 'get_alert' (which might include comments) or 'add_alert_comment' (for creating comments). No exclusions or prerequisites are mentioned, leaving usage context partially inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alertsARead-only
List alerts from Panther with comprehensive filtering options
Args: start_date: Optional start date in ISO 8601 format (e.g. "2024-03-20T00:00:00Z") end_date: Optional end date in ISO 8601 format (e.g. "2024-03-21T00:00:00Z") severities: Optional list of severities to filter by (e.g. ["CRITICAL", "HIGH", "MEDIUM", "LOW", "INFO"]) statuses: Optional list of statuses to filter by (e.g. ["OPEN", "TRIAGED", "RESOLVED", "CLOSED"]) cursor: Optional cursor for pagination from a previous query detection_id: Optional detection ID to filter alerts by. If not provided, default date range (7days) is applied. event_count_max: Optional maximum number of events that returned alerts must have event_count_min: Optional minimum number of events that returned alerts must have log_sources: Optional list of log source IDs to filter alerts by log_types: Optional list of log type names to filter alerts by name_contains: Optional string to search for in alert titles page_size: Number of results per page (default: 25, maximum: 50) resource_types: Optional list of AWS resource type names to filter alerts by subtypes: Optional list of alert subtypes. Valid values depend on alert_type: - When alert_type="ALERT": ["POLICY", "RULE", "SCHEDULED_RULE"] - When alert_type="DETECTION_ERROR": ["RULE_ERROR", "SCHEDULED_RULE_ERROR"] - When alert_type="SYSTEM_ERROR": subtypes are not allowed alert_type: Type of alerts to return (default: "ALERT"). One of: - "ALERT": Regular detection alerts - "DETECTION_ERROR": Alerts from detection errors - "SYSTEM_ERROR": System error alerts
Permissions:{'all_of': ['Read Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Optional start date in ISO-8601 format. If provided, defaults to the start of the current day UTC. | |
| end_date | No | Optional end date in ISO-8601 format. If provided, defaults to the end of the current day UTC. | |
| severities | No | Optional list of severities to filter by | |
| statuses | No | Optional list of statuses to filter by | |
| cursor | No | Optional cursor for pagination returned from a previous call | |
| detection_id | No | Optional detection ID to filter alerts by; if not provided, default date range (7days) is applied | |
| event_count_max | No | Optional maximum number of events an alert may contain | |
| event_count_min | No | Optional minimum number of events an alert must contain | |
| log_sources | No | Optional list of log‑source IDs to filter alerts by | |
| log_types | No | Optional list of log‑type names to filter alerts by | |
| name_contains | No | Optional substring to match within alert titles | |
| page_size | No | Number of results per page (max 50, default 25) | |
| resource_types | No | Optional list of AWS resource‑type names to filter alerts by | |
| subtypes | No | Optional list of alert subtypes (valid values depend on alert_type) | |
| alert_type | No | Type of alerts to return | ALERT |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the readOnlyHint annotation. It explains the default date range behavior when detection_id isn't provided, clarifies the relationship between alert_type and subtypes with specific valid combinations, and mentions pagination behavior with cursor/page_size. The permissions requirement ('Read Alerts') is also explicitly stated, which is crucial for authorization.
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 overly verbose and poorly structured. It front-loads the purpose but then includes a lengthy parameter documentation section that duplicates schema information. The permissions statement is tacked on at the end without integration. Many sentences (like the detailed parameter explanations) don't earn their place since this information is already in the structured schema.
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 (15 parameters, read-only operation, comprehensive filtering), the description is complete. It covers the purpose, key behavioral aspects (defaults, dependencies, pagination), and permissions. With both annotations (readOnlyHint) and an output schema (implied by context signals), the description doesn't need to explain safety or return values, and it provides adequate context for agent usage.
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 100% schema description coverage, the input schema already documents all 15 parameters thoroughly. The description repeats much of this information (e.g., format examples, default behaviors, valid values) without adding significant new semantic meaning. It does provide slightly more context about subtype dependencies on alert_type, but this is largely redundant with schema examples.
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 with a specific verb ('List') and resource ('alerts from Panther'), distinguishing it from siblings like 'get_alert' (single alert) and 'list_alert_comments' (comments). It also mentions 'comprehensive filtering options' which sets expectations for a rich query interface.
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 clear context for when to use this tool (listing alerts with filtering) and implicitly distinguishes it from siblings through its comprehensive filtering focus. However, it doesn't explicitly state when NOT to use it or name specific alternatives like 'get_alert' for single alerts or 'list_detections' for detection listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesARead-only
List all available datalake databases in Panther.
Returns: Dict containing: - success: Boolean indicating if the query was successful - databases: List of databases, each containing: - name: Database name - description: Database description - message: Error message if unsuccessful
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=true, indicating a safe read operation. The description adds value by specifying the return structure (Dict with success, databases, message) and permissions requirement ('Query Data Lake'), which are not covered by annotations. It doesn't mention rate limits or side effects, but with annotations covering safety, this is sufficient for good 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 well-structured and front-loaded, starting with the core purpose, followed by return details and permissions. Every sentence adds value: the first defines the action, the second explains the output format, and the third specifies permissions. There is no wasted text or 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's simplicity (0 parameters, read-only, with output schema provided), the description is complete. It covers the purpose, output structure, and permissions, which are essential for an agent to use it correctly. The presence of an output schema means the description doesn't need to detail return values, and it adequately addresses the tool's 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on output and permissions. This meets the baseline of 4 for zero-parameter tools, as it avoids unnecessary repetition.
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 ('List') and resource ('all available datalake databases in Panther'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_database_tables' or 'list_data_models', which would require mentioning what this tool does NOT do (e.g., list tables within databases).
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. While it mentions permissions ('Query Data Lake'), it doesn't specify use cases, prerequisites, or comparisons with related tools like 'list_database_tables' for table-level listing or 'query_data_lake' for querying data. This leaves the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_database_tablesARead-only
List all available tables in a Panther Database.
Required: Only use valid database names obtained from list_databases
Returns: Dict containing: - success: Boolean indicating if the query was successful - tables: List of tables, each containing: - name: Table name - description: Table description - log_type: Log type - database: Database name - message: Error message if unsuccessful
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes | The name of the database to list tables for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, indicating this is a safe read operation. The description adds valuable context beyond annotations by specifying required permissions ('Permissions:{'all_of': ['Query Data Lake']}') and detailing the exact return structure, which provides important behavioral information about authorization needs and output format.
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 and appropriately sized, with clear sections for purpose, requirements, and return values. While slightly longer than minimal, every sentence adds value and the information is front-loaded with the core purpose first.
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 moderate complexity, the description provides complete context: clear purpose, usage prerequisites, detailed return structure, and required permissions. With annotations covering safety and an output schema presumably documenting the return format, the description fills all necessary gaps for effective tool use.
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 100% schema description coverage, the input schema already fully documents the single 'database' parameter. The description doesn't add any additional parameter semantics beyond what's in the schema, but the schema itself provides complete coverage, meeting the baseline expectation.
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 specific action ('List all available tables') and target resource ('in a Panther Database'), distinguishing it from sibling tools like list_databases (which lists databases) and get_table_schema (which gets schema details). It provides a complete picture of what the tool does.
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 when to use this tool ('Only use valid database names obtained from list_databases'), providing clear prerequisites and linking to a specific sibling tool. This gives the agent precise guidance on proper usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_data_modelsARead-only
List all data models from your Panther instance. Data models are used only in Panther's Python rules to map log type schema fields to a unified data model. They may also contain custom mappings for fields that are not part of the log type schema.
Returns paginated list of data models with metadata including mappings and log types.
Permissions:{'all_of': ['View Rules']}
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Optional cursor for pagination from a previous query | |
| limit | No | Maximum number of results to return (1-1000) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, which the description doesn't contradict. The description adds valuable behavioral context beyond annotations: it discloses pagination behavior ('Returns paginated list'), specifies what metadata is included ('mappings and log types'), and mentions the permission requirement ('Permissions: {"all_of": ["View Rules"]}'). This provides useful operational context that annotations alone don't cover.
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 appropriately sized with three focused paragraphs: purpose statement, additional context about data models, and behavioral details. Each sentence adds value without redundancy. The structure is logical with purpose first, though the permissions information might be better integrated rather than appended.
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 relative simplicity (list operation with 2 optional parameters), 100% schema coverage, readOnlyHint annotation, and existence of an output schema, the description provides excellent contextual completeness. It covers purpose, behavioral traits (pagination, metadata, permissions), and context about what data models are, making it fully adequate for agent understanding.
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 both parameters (cursor, limit) well-documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, but doesn't need to since schema coverage is complete. The baseline score of 3 is appropriate when the schema carries the full parameter documentation burden.
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 specific action ('List all data models') and resource ('from your Panther instance'), with additional context about what data models are used for ('used only in Panther's Python rules to map log type schema fields to a unified data model'). It distinguishes from sibling tools like 'get_data_model' by specifying it lists all models rather than retrieving a single 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?
The description implies usage context by mentioning data models are used in Panther's Python rules, but doesn't explicitly state when to use this tool versus alternatives like 'get_data_model' or other list tools. It includes permissions information, which provides some guidance on prerequisites, but lacks explicit when/when-not instructions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_detectionsARead-only
List detections from your Panther instance with support for multiple detection types and filtering.
Note: The output_ids filter is applied client-side after fetching all results from the API, as the Panther REST API does not support server-side filtering by outputID. For more efficient API-level filtering, consider using the 'tag' parameter if your detections are tagged by environment.
Permissions:{'all_of': ['View Rules', 'View Policies']}
| Name | Required | Description | Default |
|---|---|---|---|
| detection_types | No | One or more detection types - rules, scheduled_rules, simple_rules, or policies. | |
| cursor | No | Optional cursor for pagination from a previous query (only supported for single detection type) | |
| limit | No | Maximum number of results to return per detection type | |
| name_contains | No | Substring search by name (case-insensitive) | |
| state | No | Filter by state - 'enabled' or 'disabled' | |
| severity | No | Filter by severity levels - INFO, LOW, MEDIUM, HIGH, or CRITICAL. | |
| tag | No | A case-insensitive list of tags to filter by. | |
| log_type | No | A list of log types to filter by (applies to rules and simple-rules only). | |
| resource_type | No | Filter by resource types (applies to policies only) - list of resource type names | |
| compliance_status | No | Filter by compliance status (applies to policies only) - 'PASS', 'FAIL', or 'ERROR' | |
| created_by | No | Filter by creator user ID or actor ID | |
| last_modified_by | No | Filter by last modifier user ID or actor ID | |
| output_ids | No | Client-side filter by destination output IDs. Filters results after fetching from API to include only detections with at least one matching outputID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the readOnlyHint annotation, such as the client-side filtering caveat for 'output_ids' and the efficiency tip for using 'tag'. It also includes permissions information ('View Rules', 'View Policies'), which is not covered by annotations. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by important notes and permissions. It avoids unnecessary repetition, but the permissions section could be integrated more smoothly, and the note about client-side filtering is slightly verbose.
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 (13 parameters), rich schema coverage (100%), annotations (readOnlyHint), and the presence of an output schema, the description is complete. It covers key behavioral aspects like filtering nuances and permissions, leaving no critical gaps for the agent to understand the tool's use.
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 100% schema description coverage, the input schema already fully documents all 13 parameters. The description does not add significant semantic details beyond what the schema provides, such as explaining interactions between parameters or edge cases, so it meets the baseline of 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 the tool's purpose: 'List detections from your Panther instance with support for multiple detection types and filtering.' It specifies the verb ('List'), resource ('detections'), and scope ('Panther instance'), but does not explicitly differentiate it from sibling tools like 'get_detection' or 'list_alerts', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by noting that 'output_ids' filtering is client-side and suggesting 'tag' for more efficient API-level filtering. However, it does not explicitly state when to use this tool versus alternatives like 'get_detection' or 'list_alerts', which would be needed for a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_global_helpersARead-only
List all global helpers from your Panther instance. Global helpers are shared Python functions that can be used across multiple rules, policies, and other detections.
Returns paginated list of global helpers with metadata including descriptions and code.
Permissions:{'all_of': ['View Rules']}
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Optional cursor for pagination from a previous query | |
| limit | No | Maximum number of results to return (1-1000) | |
| name_contains | No | Case-insensitive substring to search for in the global's name | |
| created_by | No | Filter by creator user ID or actor ID | |
| last_modified_by | No | Filter by last modifier user ID or actor ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, but the description adds valuable behavioral context: it specifies the return format ('paginated list of global helpers with metadata including descriptions and code') and includes permission requirements ('Permissions:{"all_of": ["View Rules"]}'). This goes beyond what annotations alone provide, though it doesn't mention rate limits or other constraints.
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 efficiently structured in three sentences: purpose statement, definition of global helpers, and return format with permissions. Every sentence adds value with zero wasted words, and key information is 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 tool has annotations (readOnlyHint), 100% schema coverage, and an output schema (implied by context signals), the description provides excellent completeness. It covers purpose, resource definition, return format, pagination behavior, and permissions - everything needed for an agent to use this tool effectively.
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 100% schema description coverage, the input schema already fully documents all 5 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3 where the schema does the heavy lifting.
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 ('List') and resource ('all global helpers from your Panther instance'), with a helpful definition of what global helpers are ('shared Python functions that can be used across multiple rules, policies, and other detections'). It distinguishes from the sibling tool 'get_global_helper' (singular) by indicating this lists all helpers rather than retrieving a specific 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?
The description provides clear context about when to use this tool ('List all global helpers') and implicitly distinguishes it from 'get_global_helper' (singular retrieval). However, it doesn't explicitly state when NOT to use it or mention alternative tools for similar purposes beyond the implicit sibling distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_log_sourcesARead-only
List log sources from Panther with optional filters.
Permissions:{'all_of': ['View Rules']}
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Optional cursor for pagination from a previous query | |
| log_types | No | Optional list of log types to filter by | |
| is_healthy | No | Optional boolean to filter by health status (default: True) | |
| integration_type | No | Optional integration type to filter by |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, indicating this is a safe read operation. The description adds the permissions requirement ('View Rules'), which provides useful context beyond annotations. However, it doesn't describe behavioral aspects like pagination behavior (implied by cursor parameter but not explained), rate limits, or what constitutes a 'log source' in Panther's context.
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 efficiently structured in two sentences: one stating the core purpose and scope, another providing critical permission information. There's no wasted text, though the permission format could be more natural. It's appropriately sized for a list operation with filters.
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 annotations (readOnlyHint), 100% schema coverage, and an output schema (implied by context signals), the description provides adequate context. It covers the core purpose, mentions filtering capability, and includes permission requirements. For a read-only list tool with good structured documentation, this is reasonably complete.
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 100% schema description coverage, all parameters are well-documented in the schema itself. The description adds no additional parameter information beyond mentioning 'optional filters' generically. This meets the baseline of 3 since the schema carries the full burden of parameter 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 description clearly states the verb ('List') and resource ('log sources from Panther'), making the purpose immediately understandable. It distinguishes itself from siblings like 'list_alerts' or 'list_detections' by specifying the resource type. However, it doesn't explicitly differentiate from potential similar tools like 'get_log_type_schema_details' beyond the resource name.
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 'optional filters' which implies usage when filtering is needed, but provides no explicit guidance on when to use this tool versus alternatives. There's no mention of prerequisites like the required permissions (though those are listed separately), nor comparison to sibling tools like 'get_http_log_source' for specific log source types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_log_type_schemasARead-only
List all available log type schemas in Panther. Schemas are transformation instructions that convert raw audit logs into structured data for the data lake and real-time Python rules.
Returns: Dict containing: - success: Boolean indicating if the query was successful - schemas: List of schemas, each containing: - name: Schema name (Log Type) - description: Schema description - revision: Schema revision number - isArchived: Whether the schema is archived - isManaged: Whether the schema is managed by a pack - referenceURL: Optional documentation URL - createdAt: Creation timestamp - updatedAt: Last update timestamp - message: Error message if unsuccessful
Permissions:{'all_of': ['View Log Sources']}
| Name | Required | Description | Default |
|---|---|---|---|
| contains | No | Optional filter by name or schema field name | |
| is_archived | No | Filter by archive status (default: False shows non-archived) | |
| is_in_use | No | Filter for used/active schemas (default: False shows all) | |
| is_managed | No | Filter for pack-managed schemas (default: False shows all) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds valuable context beyond this: it explains what schemas are (transformation instructions), mentions the return structure in detail, and includes permissions requirements. However, it doesn't cover rate limits 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 efficiently structured with clear sections: purpose explanation, return value details, and permissions. Every sentence adds value without redundancy, and the information is front-loaded with the core purpose stated first.
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 comprehensive annotations (readOnlyHint), 100% schema coverage, and a detailed output schema in the description, the description provides complete context. It explains the tool's purpose, return structure, and permissions, making it fully adequate for an agent to understand and use 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?
With 100% schema description coverage, the input schema fully documents all 4 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3 where the schema does the heavy lifting.
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 'List' and the resource 'all available log type schemas in Panther', specifying that schemas are transformation instructions for audit logs. It distinguishes from sibling tools like 'get_log_type_schema_details' by indicating this lists all schemas rather than getting details of a specific 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?
The description implies usage for retrieving schemas for data lake and Python rules, but does not explicitly state when to use this tool versus alternatives like 'get_log_type_schema_details' or other list tools. The permissions requirement provides some context but not explicit guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rolesARead-only
List all roles from your Panther instance.
Returns list of roles with metadata including permissions and settings.
Permissions:{'all_of': ['Read User Info']}
| Name | Required | Description | Default |
|---|---|---|---|
| name_contains | No | Case-insensitive substring to search for within the role name | |
| name | No | Exact match for a role's name. If provided, other parameters are ignored | |
| role_ids | No | List of specific role IDs to return | |
| sort_dir | No | Sort direction for the results | asc |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=true, indicating a safe read operation. The description adds valuable context beyond this: it specifies the return format ('list of roles with metadata including permissions and settings') and includes a permissions requirement ('Read User Info'), which is crucial for the agent to understand access needs. It doesn't mention rate limits or pagination, but with annotations covering safety, 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?
The description is appropriately sized with three sentences: purpose statement, return details, and permissions. It's front-loaded with the core functionality. The permissions section is slightly verbose but necessary. No wasted words, though it could be slightly more structured (e.g., bullet points for permissions).
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 context: annotations cover safety (readOnlyHint), schema coverage is 100% for parameters, and an output schema exists (implied by 'Returns list of roles'), the description is complete. It adds permissions context and clarifies the return format, which complements the structured data well. No significant gaps remain for this list operation.
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, with clear documentation for all four parameters (name_contains, name, role_ids, sort_dir). The description doesn't add any parameter-specific information beyond what's in the schema, such as explaining interactions between parameters (e.g., 'name' overriding others). This meets the baseline of 3 since the schema does the heavy lifting.
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: 'List all roles from your Panther instance.' It specifies the verb ('List') and resource ('roles'), and distinguishes it from the sibling tool 'get_role' which likely retrieves a single role. However, it doesn't explicitly differentiate from other list_* tools like 'list_users' or 'list_detections', which follow a similar pattern.
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 usage context through the permissions requirement ('Read User Info') and mentions returning metadata, but it doesn't provide explicit guidance on when to use this tool versus alternatives like 'get_role' (for a single role) or other list_* tools. No when-not-to-use scenarios or prerequisites beyond permissions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduled_queriesARead-only
List all scheduled queries from your Panther instance.
Scheduled queries are SQL queries that run automatically on a defined schedule for recurring analysis, reporting, and monitoring tasks.
Note: SQL content is excluded from list responses to prevent token limits. Use get_scheduled_query() to retrieve the full SQL for a specific query.
Returns: Dict containing: - success: Boolean indicating if the query was successful - queries: List of scheduled queries if successful, each containing: - id: Query ID - name: Query name - description: Query description - schedule: Schedule configuration (cron, rate, timeout) - managed: Whether the query is managed by Panther - createdAt: Creation timestamp - updatedAt: Last update timestamp - total_queries: Number of queries returned - has_next_page: Boolean indicating if more results are available - next_cursor: Cursor for fetching the next page of results - message: Error message if unsuccessful
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Optional cursor for pagination from a previous query | |
| limit | No | Maximum number of results to return (1-1000) | |
| name_contains | No | Optional substring to filter scheduled queries by name (case-insensitive) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=true, which the description doesn't contradict. The description adds valuable behavioral context beyond annotations by explaining that SQL content is excluded from responses to prevent token limits, describing the pagination mechanism (cursor-based), and detailing the return structure. However, it doesn't mention rate limits, authentication needs, or other operational constraints.
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 clear sections: purpose statement, explanation of scheduled queries, important note about SQL exclusion, usage alternative, and detailed return format. While comprehensive, some information in the 'Returns' section could be considered redundant since an output schema exists, making it slightly longer than strictly necessary.
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 (list operation with pagination and filtering), the description provides excellent contextual completeness. It explains what scheduled queries are, notes important behavioral constraints (SQL exclusion), provides clear usage guidance with alternatives, details the return structure, and includes permissions information. With both annotations and output schema available, the description adds substantial value without unnecessary repetition.
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 100% schema description coverage, the input schema already fully documents all three parameters (cursor, limit, name_contains). The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline expectation but doesn't provide additional semantic context about how parameters interact or affect results.
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 with a specific verb ('List') and resource ('all scheduled queries from your Panther instance'), and distinguishes it from the sibling tool get_scheduled_query by noting that SQL content is excluded from list responses. This provides clear differentiation from related 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 explicitly provides usage guidance by stating when to use this tool ('to list all scheduled queries') versus when to use an alternative ('Use get_scheduled_query() to retrieve the full SQL for a specific query'). It also includes important context about SQL content exclusion to prevent token limits, which helps the agent understand when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersARead-only
List all Panther user accounts.
Returns: Dict containing: - success: Boolean indicating if the query was successful - users: List of user accounts if successful - total_users: Number of users returned - has_next_page: Boolean indicating if more results are available - next_cursor: Cursor for fetching the next page of results - message: Error message if unsuccessful
Permissions:{'all_of': ['Read User Info']}
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Optional cursor for pagination from a previous query | |
| limit | No | Maximum number of results to return (1-60) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=true, and the description doesn't contradict this. The description adds valuable behavioral context beyond annotations: it specifies required permissions, describes the pagination mechanism (cursor-based), and details the exact return structure including success indicators and error handling. This goes well beyond what annotations alone 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 well-structured and appropriately sized. It starts with the core purpose, then provides detailed return format, and ends with permissions. While the return format section is somewhat lengthy, every sentence provides essential information that 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 the tool's complexity (pagination, permissions, structured returns) and the presence of both annotations and output schema information in the description, the description is complete. It covers purpose, behavior, return format, and permissions - everything needed for an agent to use this tool effectively.
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 100% schema description coverage, the input schema already fully documents both parameters (cursor for pagination, limit with range constraints). The description doesn't add any additional parameter semantics beyond what's in the schema, but the schema coverage is comprehensive 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 clearly states the tool's purpose with specific verb ('List') and resource ('all Panther user accounts'), making it immediately understandable. It distinguishes itself from sibling tools like 'get_user' (which presumably fetches a single user) by specifying it returns multiple users.
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 usage context through the permissions requirement ('Read User Info'), but doesn't explicitly state when to use this tool versus alternatives like 'get_user' or other list_* tools. No explicit guidance on when-not-to-use or comparisons with siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_data_lakeARead-only
Query Panther's security data lake using SQL for log analysis and threat hunting.
REQUIRED: Include time filter with p_event_time (required for performance and partitioning)
Panther Time Filter Macros (Recommended - optimized for performance):
p_occurs_since(timeOffset [, tableAlias[, column]]) Examples: p_occurs_since('1 d'), p_occurs_since('6 h'), p_occurs_since('2 weeks'), p_occurs_since(3600) Time formats: '30 s', '15 m', '6 h', '2 d', '1 w' OR '2 weeks', '1 day' OR numeric seconds
p_occurs_between(startTime, endTime [, tableAlias[, column]]) Examples: p_occurs_between('2024-01-01', '2024-01-02'), p_occurs_between('2024-03-20T00:00:00Z', '2024-03-20T23:59:59Z')
p_occurs_around(timestamp, timeOffset [, tableAlias[, column]]) Example: p_occurs_around('2024-01-15T10:30:00Z', '1 h') # ±1 hour around timestamp
p_occurs_after(timestamp [, tableAlias[, column]])
p_occurs_before(timestamp [, tableAlias[, column]])
Alternative (manual): WHERE p_event_time >= '2024-01-01' AND p_event_time < '2024-01-02'
Best Practices:
Always use time filters (macros preferred over manual p_event_time conditions)
Start with summary queries, then drill down to specific timeframes
Use p_any_* fields for faster correlation (p_any_ip_addresses, p_any_usernames, p_any_emails)
Query specific fields instead of SELECT * for better performance
Pagination:
First call: No cursor parameter - returns first page with max_rows results
Subsequent calls: Use next_cursor from previous response to get next page
Continue until has_next_page is False
Common Examples:
Recent failed logins: "SELECT * FROM panther_logs.public.aws_cloudtrail WHERE p_occurs_since('1 d') AND errorcode IS NOT NULL"
IP activity summary: "SELECT sourceippaddress, COUNT(*) FROM panther_logs.public.aws_cloudtrail WHERE p_occurs_since('6 h') GROUP BY sourceippaddress"
User correlation: "SELECT * FROM panther_logs.public.aws_cloudtrail WHERE p_occurs_since('2 h') AND ARRAY_CONTAINS('user@domain.com'::VARIANT, p_any_emails)"
Nested field access: "SELECT p_enrichment:ipinfo_privacy:"context.ip_address" FROM table WHERE p_occurs_since('1 h')"
Query Syntax (Snowflake SQL):
Access nested JSON: column:field.subfield
Quote special characters: column:"field name" or p_enrichment:"context.ip_address"
Array searches: ARRAY_CONTAINS('value'::VARIANT, array_column)
Returns: Dict with query results: - results: List of matching rows (paginated based on cursor parameter) - results_truncated: True if results were truncated (only for non-paginated requests) - total_rows_available: Total rows found (for non-paginated requests) - has_next_page: True if more results are available - next_cursor: Cursor for next page (use in subsequent call) - column_info: Column names and data types - stats: Query performance metrics (execution time, bytes scanned) - success/status/message: Query execution status
Permissions:{'all_of': ['Query Data Lake']}
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL query to execute. Must include a p_event_time filter condition after WHERE or AND. The query must be compatible with Snowflake SQL. | |
| database_name | No | panther_logs.public | |
| timeout | No | Timeout in seconds before the SQL query is cancelled. If the query fails due to timeout, the caller should consider a longer timeout. | |
| max_rows | No | Maximum number of result rows to return (prevents context overflow) | |
| cursor | No | Optional pagination cursor from previous query to fetch next page of results |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the readOnlyHint annotation. It explains performance requirements (time filter is 'REQUIRED'), provides detailed pagination behavior, describes query syntax (Snowflake SQL), and outlines return structure. While annotations already indicate it's read-only, the description enriches understanding with practical constraints and operational details that aren't captured in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but lengthy and could be more front-loaded. While all content is valuable (macros, best practices, examples, syntax, returns), it's presented as a dense block. The core purpose is clear in the first sentence, but subsequent sections could be better organized or summarized for quicker scanning by an AI agent.
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 (SQL querying with performance constraints, pagination, specific syntax) and the presence of both annotations and output schema, the description is remarkably complete. It covers purpose, usage guidelines, behavioral details, parameter context, examples, and return structure. The output schema means the description doesn't need to explain return values in detail, and it appropriately focuses on operational guidance.
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 80% schema description coverage, the baseline is 3, but the description adds substantial value. It provides extensive context about the 'sql' parameter (time filter requirements, Panther macros, best practices, examples, syntax), explains pagination behavior related to the 'cursor' parameter, and offers performance guidance relevant to 'timeout' and 'max_rows'. This goes well beyond what the schema descriptions provide.
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: 'Query Panther's security data lake using SQL for log analysis and threat hunting.' This specifies the verb ('query'), resource ('Panther's security data lake'), and context ('log analysis and threat hunting'), distinguishing it from all sibling tools which focus on alerts, detections, users, and other administrative functions rather than direct data lake querying.
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 guidance on when to use this tool: for SQL-based log analysis and threat hunting. It also includes detailed 'Best Practices' and 'Common Examples' sections that guide effective usage, such as starting with summary queries and using time filters. While it doesn't name specific alternatives, the context of sibling tools (which are all about managing alerts, detections, users, etc.) makes it clear this is the primary data querying tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_ai_alert_triageARead-only
Start an AI-powered triage analysis for a Panther alert with intelligent insights and recommendations.
This tool initiates Panther's embedded AI agent to triage an alert and provide an intelligent report about the events, risk level, potential impact, and recommended next steps for investigation.
The AI triage includes analysis of:
Alert metadata (severity, detection rule, timestamps)
Related events and logs (if available)
Comments from previous investigations
Contextual security analysis and recommendations
Returns: Dict containing: - success: Boolean indicating if triage was generated successfully - summary: The AI-generated triage summary text - stream_id: The stream ID used for this analysis - metadata: Information about the analysis request - message: Error message if unsuccessful
Permissions:{'all_of': ['Run Panther AI']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | The ID of the alert to start AI triage for | |
| prompt | No | Optional additional prompt to provide context for the AI triage | |
| timeout_seconds | No | Timeout in seconds to wait for AI triage completion |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating this is a safe operation. The description adds behavioral context beyond annotations by detailing what the AI triage includes (e.g., analysis of alert metadata, related events, comments) and specifying a timeout parameter with default/max values. However, it does not mention rate limits, authentication needs, or potential side effects like resource consumption, which would enhance transparency 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 well-structured and front-loaded with the core purpose, followed by details on analysis components and return values. It avoids unnecessary fluff, but the 'Returns' section could be more concise by referencing the output schema instead of listing fields. Overall, most sentences earn their place, though slight trimming is possible.
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 (AI triage initiation), the description is complete: it explains the purpose, analysis scope, return structure, and permissions. With annotations (readOnlyHint), a rich input schema (100% coverage), and an output schema (implied by the Returns section), no critical gaps remain. The description effectively complements the structured data without redundancy.
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 (alert_id, prompt, timeout_seconds) thoroughly. The description does not add significant meaning beyond the schema, such as explaining how the prompt influences AI behavior or typical timeout scenarios. With high schema coverage, the baseline score of 3 is appropriate as the description provides minimal extra parameter insight.
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: 'Start an AI-powered triage analysis for a Panther alert with intelligent insights and recommendations.' It specifies the action ('start'), resource ('Panther alert'), and scope ('AI-powered triage analysis'), distinguishing it from sibling tools like get_ai_alert_triage_summary (which retrieves results) or get_alert (which fetches basic alert 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 implies usage context by mentioning it initiates AI triage for alerts, but it does not explicitly state when to use this tool versus alternatives like get_ai_alert_triage_summary (which likely retrieves existing triage results). The permissions field ('Run Panther AI') provides some guidance on prerequisites, but no explicit when-not-to-use or alternative tool references are included.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_alert_assigneeADestructiveIdempotent
Update the assignee of one or more alerts through the assignee's ID.
Returns: Dict containing: - success: Boolean indicating if the update was successful - alerts: List of updated alert IDs if successful - message: Error message if unsuccessful
Permissions:{'all_of': ['Manage Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_ids | Yes | List of alert IDs to update | |
| assignee_id | Yes | The ID of the user to assign the alerts to |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint and destructiveHint, but the description adds valuable context: it specifies the required permission ('Manage Alerts'), clarifies that it works on one or more alerts (batch operation), and documents the exact return structure. This goes beyond what annotations convey about safety and idempotency.
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 efficiently structured with a clear purpose statement followed by return value documentation and permissions. Every sentence serves a distinct purpose, though the permissions formatting could be slightly cleaner.
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 destructive nature (annotations), batch operation capability, detailed return structure documentation, and explicit permission requirements, the description provides complete context for a mutation tool. The output schema existence means return values are adequately covered.
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 100% schema description coverage, the input schema already fully documents both parameters. The description doesn't add any additional meaning about parameter usage, constraints, or examples beyond what's in the schema properties, so it meets the baseline for high 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?
The description clearly states the specific action ('Update the assignee') and resource ('one or more alerts'), distinguishing it from siblings like 'update_alert_status' which modifies a different alert property. It precisely defines the scope through the assignee's ID.
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 usage for reassigning alerts but doesn't explicitly state when to use this versus alternatives like 'bulk_update_alerts' or 'update_alert_status'. It mentions permissions but doesn't provide contextual guidance on appropriate scenarios for assignee changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_alert_statusADestructiveIdempotent
Update the status of one or more Panther alerts.
Returns: Dict containing: - success: Boolean indicating if the update was successful - alerts: List of updated alert IDs if successful - message: Error message if unsuccessful
Permissions:{'all_of': ['Manage Alerts']}
| Name | Required | Description | Default |
|---|---|---|---|
| alert_ids | Yes | List of alert IDs to update | |
| status | Yes | New status for the alerts |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it specifies the required permissions ('Manage Alerts') and details the return structure. While annotations already indicate idempotent and destructive operations, the permission requirement and return format disclosure provide additional operational transparency that annotations alone don't cover.
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 efficiently structured with clear sections: purpose statement, return format, and permissions. Each sentence serves a distinct purpose without redundancy. The only minor improvement would be integrating the permissions more smoothly rather than as a separate tag-like statement.
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 moderate complexity, comprehensive annotations (idempotent, destructive), complete schema coverage, and explicit output description, the description provides sufficient context. It covers the essential operational aspects including permissions and return format, making it complete for agent understanding despite the lack of a formal 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?
With 100% schema description coverage, the schema already fully documents both parameters. The description doesn't add any parameter-specific semantics beyond what's in the schema, so it meets the baseline expectation without providing extra value. The examples in the schema for 'status' are particularly helpful.
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 'update' and the resource 'Panther alerts status', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'update_alert_assignee' or 'bulk_update_alerts', which would require more specific scope definition.
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 like 'bulk_update_alerts' or 'update_alert_assignee'. It mentions required permissions but doesn't explain use cases, prerequisites, or exclusion criteria, leaving the agent with insufficient context for tool selection.
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.
36 tool updates
v1.0.0- Changed
add_alert_comment2 fields changed- removed
Input schema / properties / alert_id / titleRemoved value: -"Alert Id" - removed
Input schema / properties / comment / titleRemoved value: -"Comment"
- Added
bulk_update_alerts - Changed
disable_detection2 fields changed- removed
Input schema / properties / detection_id / titleRemoved value: -"Detection Id" - removed
Input schema / properties / detection_type / titleRemoved value: -"Detection Type"
- Added
get_ai_alert_triage_summary - Changed
get_alert1 field changed- removed
Input schema / properties / alert_id / titleRemoved value: -"Alert Id"
- Added
get_alert_event_stats - Changed
get_alert_events2 fields changed- removed
Input schema / properties / alert_id / titleRemoved value: -"Alert Id" - removed
Input schema / properties / limit / titleRemoved value: -"Limit"
- Added
get_bytes_processed_metrics - Removed
get_bytes_processed_per_log_type_and_source - Changed
get_data_model1 field changed- removed
Input schema / properties / data_model_id / titleRemoved value: -"Data Model Id"
- Changed
get_detection2 fields changed- removed
Input schema / properties / detection_id / titleRemoved value: -"Detection Id" - removed
Input schema / properties / detection_type / titleRemoved value: -"Detection Type"
- Changed
get_global_helper1 field changed- removed
Input schema / properties / helper_id / titleRemoved value: -"Helper Id"
- Changed
get_http_log_source1 field changed- removed
Input schema / properties / source_id / titleRemoved value: -"Source Id"
- Changed
get_log_type_schema_details1 field changed- removed
Input schema / properties / schema_names / titleRemoved value: -"Schema Names"
- Changed
get_role1 field changed- removed
Input schema / properties / role_id / titleRemoved value: -"Role Id"
- Changed
get_rule_alert_metrics4 fields changed- removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - removed
Input schema / properties / interval_in_minutes / titleRemoved value: -"Interval In Minutes" - removed
Input schema / properties / rule_ids / titleRemoved value: -"Rule Ids" - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date"
- Changed
get_scheduled_query1 field changed- removed
Input schema / properties / query_id / titleRemoved value: -"Query Id"
- Changed
get_severity_alert_metrics6 fields changed- changed
Input schema / properties / alert_types / defaultPrevious value: -[ - "Rule" -]New value: +[ + "Rule", + "Policy" +] - removed
Input schema / properties / alert_types / titleRemoved value: -"Alert Types" - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - removed
Input schema / properties / interval_in_minutes / titleRemoved value: -"Interval In Minutes" - removed
Input schema / properties / severities / titleRemoved value: -"Severities" - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date"
- Changed
get_table_schema2 fields changed- removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
get_user1 field changed- removed
Input schema / properties / user_id / titleRemoved value: -"User Id"
- Changed
list_alert_comments2 fields changed- removed
Input schema / properties / alert_id / titleRemoved value: -"Alert Id" - removed
Input schema / properties / limit / titleRemoved value: -"Limit"
- Changed
list_alerts19 fields changed- removed
Input schema / properties / alert_type / titleRemoved value: -"Alert Type" - removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - changed
Input schema / properties / detection_id / descriptionPrevious value: -"Optional detection ID to filter alerts by; if provided, the date range is not required"New value: +"Optional detection ID to filter alerts by; if not provided, default date range (7days) is applied" - removed
Input schema / properties / detection_id / titleRemoved value: -"Detection Id" - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - removed
Input schema / properties / event_count_max / titleRemoved value: -"Event Count Max" - removed
Input schema / properties / event_count_min / titleRemoved value: -"Event Count Min" - removed
Input schema / properties / log_sources / titleRemoved value: -"Log Sources" - removed
Input schema / properties / log_types / titleRemoved value: -"Log Types" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains" - removed
Input schema / properties / page_size / titleRemoved value: -"Page Size" - removed
Input schema / properties / resource_types / titleRemoved value: -"Resource Types" - changed
Input schema / properties / severities / defaultPrevious value: -[ - "CRITICAL", - "HIGH", - "MEDIUM", - "LOW" -]New value: +[] - removed
Input schema / properties / severities / titleRemoved value: -"Severities" - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date" - changed
Input schema / properties / statuses / defaultPrevious value: -[ - "OPEN", - "TRIAGED", - "RESOLVED", - "CLOSED" -]New value: +[] - removed
Input schema / properties / statuses / titleRemoved value: -"Statuses" - changed
Input schema / properties / subtypes / defaultPrevious value: -[ - "RULE", - "SCHEDULED_RULE" -]New value: +[] - removed
Input schema / properties / subtypes / titleRemoved value: -"Subtypes"
- Changed
list_data_models2 fields changed- removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - removed
Input schema / properties / limit / titleRemoved value: -"Limit"
- Changed
list_database_tables1 field changed- removed
Input schema / properties / database / titleRemoved value: -"Database"
- Changed
list_detections15 fields changed- removed
Input schema / properties / compliance_status / titleRemoved value: -"Compliance Status" - removed
Input schema / properties / created_by / titleRemoved value: -"Created By" - removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - removed
Input schema / properties / detection_types / titleRemoved value: -"Detection Types" - removed
Input schema / properties / last_modified_by / titleRemoved value: -"Last Modified By" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / log_type / titleRemoved value: -"Log Type" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains" - added
Input schema / properties / output_idsAdded value: +{ + "default": [], + "description": "Client-side filter by destination output IDs. Filters results after fetching from API to include only detections with at least one matching outputID.", + "examples": [ + [ + "destination-id-123" + ], + [ + "prod-slack", + "prod-pagerduty" + ] + ], + "items": { + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / resource_type / titleRemoved value: -"Resource Type" - changed
Input schema / properties / severity / defaultPrevious value: -[ - "MEDIUM", - "HIGH", - "CRITICAL" -]New value: +[] - removed
Input schema / properties / severity / titleRemoved value: -"Severity" - changed
Input schema / properties / state / defaultPrevious value: -"enabled"New value: +"" - removed
Input schema / properties / state / titleRemoved value: -"State" - removed
Input schema / properties / tag / titleRemoved value: -"Tag"
- Changed
list_global_helpers5 fields changed- removed
Input schema / properties / created_by / titleRemoved value: -"Created By" - removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - removed
Input schema / properties / last_modified_by / titleRemoved value: -"Last Modified By" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains"
- Changed
list_log_sources4 fields changed- removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - removed
Input schema / properties / integration_type / titleRemoved value: -"Integration Type" - removed
Input schema / properties / is_healthy / titleRemoved value: -"Is Healthy" - removed
Input schema / properties / log_types / titleRemoved value: -"Log Types"
- Changed
list_log_type_schemas4 fields changed- removed
Input schema / properties / contains / titleRemoved value: -"Contains" - removed
Input schema / properties / is_archived / titleRemoved value: -"Is Archived" - removed
Input schema / properties / is_in_use / titleRemoved value: -"Is In Use" - removed
Input schema / properties / is_managed / titleRemoved value: -"Is Managed"
- Changed
list_roles4 fields changed- removed
Input schema / properties / name / titleRemoved value: -"Name" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains" - removed
Input schema / properties / role_ids / titleRemoved value: -"Role Ids" - removed
Input schema / properties / sort_dir / titleRemoved value: -"Sort Dir"
- Changed
list_scheduled_queries3 fields changed- removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains"
- Changed
list_users2 fields changed- removed
Input schema / properties / cursor / titleRemoved value: -"Cursor" - removed
Input schema / properties / limit / titleRemoved value: -"Limit"
- Changed
query_data_lake5 fields changed- added
Input schema / properties / cursorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional pagination cursor from previous query to fetch next page of results" +} - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / max_rowsAdded value: +{ + "default": 100, + "description": "Maximum number of result rows to return (prevents context overflow)", + "maximum": 999, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / sql / titleRemoved value: -"Sql" - removed
Input schema / properties / timeout / titleRemoved value: -"Timeout"
- Added
start_ai_alert_triage - Removed
summarize_alert_events - Changed
update_alert_assignee2 fields changed- removed
Input schema / properties / alert_ids / titleRemoved value: -"Alert Ids" - removed
Input schema / properties / assignee_id / titleRemoved value: -"Assignee Id"
- Changed
update_alert_status2 fields changed- removed
Input schema / properties / alert_ids / titleRemoved value: -"Alert Ids" - removed
Input schema / properties / status / titleRemoved value: -"Status"
33 tool updates
- First observed
add_alert_comment - First observed
disable_detection - First observed
get_alert - First observed
get_alert_events - First observed
get_bytes_processed_per_log_type_and_source - First observed
get_data_model - First observed
get_detection - First observed
get_global_helper - First observed
get_http_log_source - First observed
get_log_type_schema_details - First observed
get_permissions - First observed
get_role - First observed
get_rule_alert_metrics - First observed
get_scheduled_query - First observed
get_severity_alert_metrics - First observed
get_table_schema - First observed
get_user - First observed
list_alert_comments - First observed
list_alerts - First observed
list_data_models - First observed
list_database_tables - First observed
list_databases - First observed
list_detections - First observed
list_global_helpers - First observed
list_log_sources - First observed
list_log_type_schemas - First observed
list_roles - First observed
list_scheduled_queries - First observed
list_users - First observed
query_data_lake - First observed
summarize_alert_events - First observed
update_alert_assignee - First observed
update_alert_status
TDQS
Most tools have distinct purposes targeting specific resources (alerts, detections, schemas, queries, etc.), but there is some overlap between get_alert_events and get_alert_event_stats (both analyze alert events), and between various metric tools like get_rule_alert_metrics and get_severity_alert_metrics. Descriptions help clarify differences, but an agent might initially confuse these pairs.
Tool names follow a highly consistent verb_noun pattern throughout, with clear prefixes like get_, list_, add_, update_, bulk_update_, disable_, start_, and query_. All names use snake_case consistently, making them predictable and readable across the entire set.
With 36 tools, the count feels heavy for a single server, though Panther is a comprehensive security platform. The tools cover alerts, detections, data lake, schemas, users, roles, and AI triage, which justifies breadth, but it may overwhelm agents with too many options for common workflows.
The tool set provides complete CRUD/lifecycle coverage for Panther's domain: alert management (list, get, update, comment, bulk update, AI triage), detection handling (list, get, disable), data lake querying and schema inspection, user/role management, and metric retrieval. No obvious gaps exist; agents can perform end-to-end security operations.
Maintenance
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Official Miro MCP server - Supports context to code and creating diagrams, docs, and data tables.
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server for the Wazuh SIEM/XDR platform that enables users to query agents, security alerts, detection rules, and decoders through Claude or other MCP clients. It provides specialized tools and prompts for investigating security alerts, performing agent health checks, and generating environmental security overviews.28343MIT

stepsecurity-mcpofficial
AlicenseAqualityDmaintenanceMCP server for the StepSecurity platform that enables investigating supply-chain and CI/CD security issues through natural language.30294Apache 2.0- AlicenseAqualityCmaintenanceOfficial MCP server for the Perplexity API Platform, enabling AI assistants to perform real-time web search, reasoning, and deep research using Sonar models.427,122MIT
- AlicenseAqualityAmaintenanceOfficial MCP server for interacting with Saudi market data (Sahmk) via natural language queries, enabling stock quotes, company info, and market summaries inside AI agents like Cursor and Claude Desktop.1512MIT
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/panther-labs/mcp-panther'
If you have feedback or need assistance with the MCP directory API, please join our Discord server