Skip to main content
Glama

Ops Tools MCP Server

One chat window to talk to all your infrastructure — Airflow, EMR, S3, Confluence, and Azure DevOps.

No more jumping between 5 different UIs. Just ask what you want in plain English.


What Is This?

It's an MCP (Model Context Protocol) server that gives AI assistants (like Gemini CLI) access to 44 tools across your entire ops stack. You talk to it in natural language, and it calls the right APIs for you.

Example:

You: "Which DAGs failed today in prod?" AI: calls the Airflow API, gets all runs, filters failures, shows you a summary with diagnosis commands


Related MCP server: EKS Log Analyzer MCP Server

Quick Start

1. Install Dependencies

pip install -r requirements.txt

2. Set Up Your .env File

Copy the example and fill in your values:

cp .env.example .env

3. Run the Server

python -m mcp_server.main

The server runs on stdio — connect it to Gemini CLI, VS Code, or any MCP client.

4. Connect from Gemini CLI

Add this to your MCP config (server.json):

{
  "mcpServers": {
    "ops-tools": {
      "command": "python",
      "args": ["-m", "mcp_server.main"],
      "cwd": "D:\\MCP"
    }
  }
}

Environment Setup

This server works across 4 AWS accounts (dev, uat, test, prod). Each is a separate AWS account with its own credentials.

AWS Profiles (via gimme-aws-creds)

AWS_REGION=eu-west-2

AWS_PROFILE_DEV=consumersync-dev
AWS_PROFILE_UAT=consumersync-uat
AWS_PROFILE_TEST=consumersync-test
AWS_PROFILE_PROD=consumersync-prod

MWAA Environments (Airflow)

MWAA_ENV_DEV=eec-aws-uk-ms-dev-consumersyncenv-mwaa
MWAA_ENV_UAT=eec-aws-uk-ms-uat-consumersync-mwaa
MWAA_ENV_TEST=eec-aws-uk-ms-tst-consumersync-mwaa
MWAA_ENV_PROD=eec-aws-uk-ms-prod-consumersync-mwaa

EMR Log Buckets

EMR_LOG_BUCKET_DEV=eec-aws-uk-ms-consumersync-dev-logs-bucket
EMR_LOG_BUCKET_UAT=eec-aws-uk-ms-consumersync-uat-logs-bucket
EMR_LOG_BUCKET_TEST=eec-aws-uk-ms-consumersync-tst-logs-bucket
EMR_LOG_BUCKET_PROD=eec-aws-uk-ms-consumersync-prod-logs-bucket
EMR_LOG_PREFIX=spark-logs

Confluence

CONFLUENCE_BASE_URL=https://pages.experian.local
CONFLUENCE_PAT=your-personal-access-token
CONFLUENCE_SPACE_KEY=ACTIVATE

Azure DevOps (TFS)

AZDO_BASE_URL=https://ukfhpapcvt02.uk.experian.local/tfs/DefaultCollection
AZDO_PAT=your-personal-access-token
AZDO_PROJECT=Activate
AZDO_TEAM=Activate Team

Important: The AI will always ask you "Which environment?" before calling any AWS tool. It never defaults silently — this prevents accidental cross-account mistakes.


All 44 Tools

Airflow / MWAA (11 tools)

Everything you need to monitor, debug, and manage your DAGs.

Tool

What It Does

list_dags

Lists all DAGs with their schedule and pause status

list_dag_runs

Shows runs for today/yesterday/any date — numbered list so you can pick one

get_dag_run_details

Full task-level breakdown for a specific run — which tasks passed, which failed

get_task_log

Reads the Airflow log for a specific task attempt — the raw log output

trigger_dag

Manually kicks off a DAG run (with optional config)

pause_dag

Pauses a DAG so it won't run on schedule (already-running jobs finish)

unpause_dag

Unpauses a DAG so scheduled runs resume

clear_task_instance

Retries a failed task without re-running the entire DAG

get_dag_source

Shows the DAG's Python source code, tasks, operators, and dependencies

get_dags_status_dashboard

Full dashboard of ALL DAGs — states, schedules, failures, everything at a glance

dag_analytics

Analytics: success rate, duration trends, failure patterns, visual streaks

Common things you'd say:

  • "Show me all DAGs in dev"

  • "Which DAGs failed today in prod?"

  • "How has hem_processing been running lately?"

  • "Trigger ttdcustom_processing in uat"

  • "Pause digital_taxonomy in prod"

  • "Retry the initialise task on yesterday's failed run"


EMR Serverless (10 tools)

Manage Spark jobs, read driver logs, browse S3 log files, track costs.

Tool

What It Does

list_emr_applications

Lists all EMR Serverless apps (note: DAGs create temporary apps that get cleaned up)

list_job_runs

Shows job runs for an application — with state and duration

get_job_run_details

Deep dive into a job: Spark config, resource usage, S3 log paths

read_spark_driver_log

Reads stdout/stderr from the Spark driver — the actual Python output and errors

browse_s3_logs

Navigates the S3 log directory structure folder by folder

cancel_job_run

Cancels a running or stuck Spark job

stop_emr_application

Stops an EMR app — auto-cancels running jobs if needed

delete_emr_application

Permanently deletes an EMR app — force mode stops and deletes in one call

read_s3_file

Reads any file from S3 (CSV, TXT, JSON, Parquet) — 5 MB limit, auto-detects format

get_emr_cost_summary

Shows vCPU hours, memory, storage usage — broken down per app

Common things you'd say:

  • "Show me the Spark driver log for this job"

  • "What failed in the stdout log?"

  • "Cancel that stuck job"

  • "Stop that EMR application"

  • "Force-stop the app and cancel all running jobs"

  • "Delete that EMR application"

  • "How much has EMR cost us this week?"

  • "Read this S3 file: s3://bucket/path/to/file.csv"


S3 — General (4 tools)

Browse any S3 bucket in the account — not just EMR logs.

Tool

What It Does

list_s3_buckets

Lists all S3 buckets in the AWS account

browse_s3

Interactive folder/file browsing — like a file explorer for S3

list_s3_recursive

Recursively lists ALL files end-to-end with filters and size summary

get_s3_object_info

Shows file metadata (size, modified date, content type, encryption) without downloading

Common things you'd say:

  • "What S3 buckets do we have in dev?"

  • "Show me what's in the raw data bucket"

  • "List all CSV files in the raw bucket"

  • "How much data is in this S3 folder?"

  • "Read this parquet file from S3"

  • "How big is this file?"


Confluence (9 tools)

Search, read, and write documentation — without opening a browser.

Tool

What It Does

search_confluence

Full-text search across pages — ranked by relevance (same as the web UI)

get_page_content

Reads a page's full content — converted from HTML to clean text

get_child_pages

Lists all child pages under a parent page

get_space_pages

Lists all pages in a space (paginated)

get_page_attachments

Lists file attachments on a page (name, size, download URL)

get_page_labels

Shows tags/labels on a page

get_page_comments

Reads comments and discussions on a page

create_confluence_page

Creates a new page (plain text or HTML content)

update_confluence_page

Updates an existing page — replace or append content

Common things you'd say:

  • "Find documentation about Audience Engine"

  • "Read that runbook page"

  • "Create a new troubleshooting guide under the runbooks section"

  • "What are the child pages under the HEM documentation?"

Pro tip: When you say "docs", "documentation", "wiki", or "runbook", the AI knows to search Confluence automatically.


Azure DevOps / TFS (8 tools)

Sprint tracking, work items, source code — all from chat.

Tool

What It Does

list_repos

Lists all Git repositories in the project

browse_repo

Browse files and folders in a repo — one folder at a time

browse_repo_recursive

Full recursive file tree of a repo in one call — shows every file with correct paths

read_repo_file

Read the content of any file (with syntax highlighting)

get_current_sprint

Shows active sprint name, dates, and days remaining

get_sprint_work_items

All PBIs, Tasks, and Bugs in the sprint — who's doing what

get_work_item_details

Full details for a PBI/Task/Bug: description, acceptance criteria, links

get_backlog

Items not in the current sprint — what's coming next

Common things you'd say:

  • "What sprint are we in?"

  • "What's everyone working on?"

  • "Show me PBI 12345"

  • "What's in the backlog?"

  • "Show me all the files in the hem_processing repo"

  • "List all Python files in this repo"

  • "What's the folder structure of this repo?"


Orchestration (1 tool)

The power tool — chains multiple tools together for one-shot answers.

Tool

What It Does

diagnose_dag_failure

Complete failure diagnosis in one call — finds the failed run, reads task logs, extracts EMR IDs, reads Spark driver logs, returns root cause analysis

What you'd say:

  • "Diagnose the failure for hem_processing in prod"

  • "What went wrong with ttdcustom_processing yesterday?"

This one tool replaces 5-6 manual steps that used to take 20 minutes.


Utility (1 tool)

Tool

What It Does

server_health_check

Confirms the server is running and connected


How It Works

You (plain English) → AI (Gemini/Claude) → MCP Server → APIs (Airflow, EMR, S3, Confluence, TFS)
  1. You type a question in natural language

  2. The AI figures out which tool(s) to call

  3. The MCP server calls the actual APIs (MWAA, boto3, Confluence REST, Azure DevOps REST)

  4. Results come back formatted and readable

  5. The AI can chain tools together — e.g. find a failed run → read its logs → show root cause


Architecture

D:\MCP\
├── mcp_server/
│   ├── main.py              # Server entry point + tool registration
│   ├── config.py             # Environment config (4 AWS accounts)
│   └── tools/
│       ├── _aws_helpers.py   # Shared AWS helpers (S3 client, formatting)
│       ├── mwaa_tools.py     # 11 Airflow tools
│       ├── emr_tools.py      # 10 EMR Serverless tools
│       ├── s3_tools.py       # 4 general S3 tools
│       ├── confluence_tools.py # 9 Confluence tools
│       ├── azdo_tools.py     # 8 Azure DevOps tools
│       ├── orchestration_tools.py # 1 orchestration tool
│       └── utility_tools.py  # 1 utility tool
├── .env                      # Your local config (not committed)
├── .env.example              # Template for .env
├── server.json               # MCP client config
├── requirements.txt          # Python dependencies
├── DEMO_SCRIPT.md            # 15-minute demo walkthrough
└── README.md                 # This file

Key Design Decisions

  • Fresh credentials every call — No client caching for S3 or EMR. Every API call gets a fresh boto3 session so expired credentials never cause silent failures.

  • Environment-aware — All AWS tools require you to specify dev/uat/test/prod. The AI asks if you forget. Each env points to a different AWS account.

  • MWAA session cache — The Airflow login token is cached (it needs auth cookies), but the cache clears automatically on 401/403 errors and retries.

  • Clean log output — Spark driver logs are auto-decompressed from .gz, Confluence HTML is converted to clean markdown text.

  • Interactive responses — DAG runs are numbered so you can say "tell me about run #3". Work items show ready-to-use follow-up commands.


Troubleshooting

Problem

Fix

"Cannot connect to MWAA webserver"

Connect to VPN first

"Access denied" on S3

Run gimme-aws-creds to refresh your AWS credentials

"CONFLUENCE_PAT not set"

Add your Confluence Personal Access Token to .env

"AZDO_PAT not set"

Generate a PAT in Azure DevOps → User Settings → Personal Access Tokens

AI calls all environments at once

The server instructions should prevent this — if it happens, say "just dev"

Stale Airflow session

The server auto-retries on 401/403 — if it persists, restart the server


Requirements

  • Python 3.10+

  • VPN access (for MWAA, Confluence, Azure DevOps)

  • gimme-aws-creds configured for all 4 AWS accounts

  • Confluence PAT

  • Azure DevOps PAT

  • MCP-compatible client (Gemini CLI, VS Code, Claude Code, etc.)

Available Tools

44 tools
browse_repoA

Browse files and folders in a Git repository — like a directory listing.

USE THIS TOOL when the user wants to see what files are in a repo, explore folder structure, or find a specific file path.

Args: repo_name: Repository name (from list_repos). path: Folder path to browse (default '/' for root). Use forward slashes. branch: Branch name (default: repo's default branch). project: Project name (default from config).

Returns a directory listing with file/folder names and paths. Use read_repo_file(repo_name='...', path='...') to read a file's content.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
pathNo/
branchNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it returns a directory listing (not file contents), uses forward slashes for paths, and has default values for path, branch, and project. It doesn't mention error conditions, rate limits, or authentication requirements, but covers the core operational behavior well.

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

Conciseness5/5

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

The description is well-structured with clear sections (purpose, usage guidelines, parameters, returns) and every sentence earns its place. It's appropriately sized for a tool with 4 parameters and no annotations, with no redundant or unnecessary information.

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

Completeness5/5

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

Given the tool's moderate complexity (4 parameters, no annotations, but with output schema), the description is complete. It covers purpose, usage scenarios, parameter semantics, and return behavior. The presence of an output schema means the description doesn't need to detail return values, and it appropriately references related tools for context.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter information in the 'Args' section. It explains what each parameter represents, provides default values, format guidance (forward slashes), and references other tools ('list_repos' for repo_name). This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('browse files and folders') and resources ('Git repository'), explicitly distinguishing it from sibling tools like 'read_repo_file' (for reading file content) and 'list_repos' (for listing repositories). The phrase 'like a directory listing' provides a helpful analogy.

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

Usage Guidelines5/5

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

The description includes an explicit 'USE THIS TOOL when' section that lists three specific scenarios (see what files are in a repo, explore folder structure, find a specific file path) and names an alternative tool ('read_repo_file') for reading file content, providing clear guidance on when to use this tool versus alternatives.

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

browse_repo_recursiveA

List ALL files in a Git repository recursively — the full file tree.

USE THIS TOOL when the user asks 'what files are in this repo?', 'show me the whole repo structure', 'list all Python files', or needs to find correct file paths before reading. Much faster than calling browse_repo folder-by-folder.

Args: repo_name: Repository name (from list_repos). path: Starting folder path (default '/' for entire repo). branch: Branch name (default: repo's default branch). extension_filter: Filter by file extension, e.g. '.py', '.json', '.yaml'. Case-insensitive. Only files matching this extension are shown. project: Project name (default from config).

Returns a tree of ALL files and folders with full paths. Use read_repo_file(repo_name='...', path='...') to read any file.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
pathNo/
branchNo
extension_filterNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read-only operation (implied by 'List'), returns a tree structure ('Returns a tree of ALL files and folders with full paths'), and mentions performance characteristics ('Much faster'). However, it doesn't cover potential limitations like rate limits, authentication needs, or error conditions, which would be helpful for a tool with no annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, parameter details, and return information. Every sentence adds value: the first sentence defines the tool, the usage section provides practical guidance, the Args section explains parameters, and the final sentences describe output and related tools. No wasted words.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, 0% schema coverage, no annotations, but has output schema), the description is remarkably complete. It covers purpose, usage guidelines, parameter semantics, output format ('Returns a tree of ALL files and folders with full paths'), and even references a related tool ('Use read_repo_file... to read any file'). The presence of an output schema means the description doesn't need to detail return values, and it focuses appropriately on what's not covered elsewhere.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations in the 'Args:' section. It clarifies the purpose of each parameter (e.g., 'repo_name: Repository name (from list_repos)', 'extension_filter: Filter by file extension... Only files matching this extension are shown'), adds default values, and provides usage context beyond what the bare schema offers.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('List ALL files in a Git repository recursively') and distinguishes it from siblings by mentioning 'Much faster than calling browse_repo folder-by-folder.' It explicitly differentiates from the 'browse_repo' sibling tool, which appears to be a non-recursive alternative.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines with a dedicated 'USE THIS TOOL when' section that lists specific user queries ('what files are in this repo?', 'show me the whole repo structure', 'list all Python files') and explains when to use it ('needs to find correct file paths before reading'). It also contrasts with the sibling 'browse_repo' tool by stating it's 'Much faster than calling browse_repo folder-by-folder.'

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

browse_s3A

Browse folders and files in any S3 bucket interactively.

USE THIS TOOL when the user asks to see what's in an S3 bucket, list files in a folder, navigate S3, or explore any S3 path.

Start with no prefix to see top-level folders, then drill into subfolders using the hints in the output.

Args: bucket: S3 bucket name (required). prefix: S3 prefix/path to browse (default: root of bucket). Example: 'raw/hem_processing/' to see that folder. max_results: Max items to show (default 200). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a directory listing showing folders and files with sizes and last modified times.

ParametersJSON Schema
NameRequiredDescriptionDefault
bucketYes
prefixNo
max_resultsNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's interactive nature, output format ('directory listing showing folders and files with sizes and last modified times'), and includes an important behavioral constraint for the 'env' parameter ('IMPORTANT: Do NOT guess or default. Ask the user...'). However, it doesn't mention rate limits, authentication requirements, or error handling.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It begins with a clear purpose statement, follows with usage guidelines, provides detailed parameter explanations in a dedicated 'Args' section, and concludes with return value information. Every sentence adds value with no redundancy or fluff.

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

Completeness5/5

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

Given the tool's moderate complexity (4 parameters, 1 required), no annotations, 0% schema coverage, but with an output schema present, the description is complete. It covers purpose, usage, all parameter semantics, and output format. The output schema will handle return value details, so the description doesn't need to duplicate that information.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantic information for all parameters. It explains that 'bucket' is required, 'prefix' defaults to root with an example, 'max_results' defaults to 200, and 'env' has specific allowed values with critical usage guidance. This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('browse folders and files', 'list files', 'navigate', 'explore') and identifies the resource ('S3 bucket'). It distinguishes this tool from siblings like 'list_s3_buckets' (which lists buckets) and 'list_s3_recursive' (which likely lists recursively) by focusing on interactive browsing of bucket contents.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('when the user asks to see what's in an S3 bucket, list files in a folder, navigate S3, or explore any S3 path'). It also offers procedural guidance ('Start with no prefix... then drill into subfolders') and distinguishes it from alternatives by not mentioning other tools for similar tasks, implying this is the primary browsing tool.

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

browse_s3_logsA

Browse the S3 log directory structure. Navigate into folders to find logs.

Args: prefix: S3 prefix/path to browse (default: EMR_LOG_PREFIX from config, e.g. 'spark-logs/'). Use the output to navigate deeper, e.g. 'spark-logs/ttdgeo_metadata_SE/'. bucket: S3 bucket (default from config). max_items: Max items to show (default 50). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a directory listing of the S3 prefix showing folders and files.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNo
bucketNo
max_itemsNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries full burden and does well: it discloses the tool's purpose (directory listing), default values (prefix, bucket, max_items), and a critical behavioral constraint (must ask user for env if unspecified). It doesn't mention rate limits or auth needs, but covers core behavior adequately.

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

Conciseness4/5

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

Well-structured with a purpose statement, parameter details in bullet-like format, and a returns statement. Every sentence adds value, though the 'IMPORTANT' note could be integrated more smoothly. Slightly verbose but efficient overall.

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

Completeness5/5

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

Given 4 parameters with 0% schema coverage and no annotations, the description provides complete context: purpose, parameter details with defaults and examples, usage rules, and output explanation. With an output schema present, it doesn't need to detail return values, making this comprehensive.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It does: each parameter (prefix, bucket, max_items, env) is explained with semantics, defaults, examples (e.g., 'spark-logs/'), and usage guidance (e.g., 'Ask the user which environment'). This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('browse', 'navigate') and resource ('S3 log directory structure', 'folders to find logs'). It distinguishes from siblings like 'browse_s3' (general S3 browsing) and 'list_s3_recursive' (recursive listing) by focusing on log directories with navigation guidance.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use the output to navigate deeper' explains iterative usage, and 'IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified' gives clear when-to-use rules. It implicitly contrasts with 'browse_s3' by specifying log-focused browsing.

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

cancel_job_runA

Cancel a running or pending EMR Serverless job run.

Use this when a Spark job is stuck, taking too long, or was started with incorrect parameters. The cancellation is asynchronous — the job will transition to CANCELLING and then CANCELLED state.

Args: application_id: The EMR Serverless application ID. job_run_id: The job run ID to cancel. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns confirmation of the cancellation request.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYes
job_run_idYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses key behavioral traits: the cancellation is asynchronous, with state transitions (CANCELLING → CANCELLED). It also warns about the 'env' parameter requiring explicit user input. However, it doesn't mention permissions, rate limits, or error conditions.

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

Conciseness5/5

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

Well-structured and front-loaded: purpose first, usage guidelines second, parameter details third, return value last. Every sentence earns its place with no wasted words, and the formatting (Args/Returns sections) enhances readability.

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

Completeness4/5

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

Given no annotations, 0% schema coverage, but an output schema exists, the description is quite complete. It covers purpose, usage, parameters, and behavioral context. The output schema handles return values, so the description's 'Returns confirmation...' is sufficient. Minor gaps include lack of error handling or auth details.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains all three parameters: 'application_id' and 'job_run_id' are identified, and 'env' is detailed with allowed values ('dev', 'uat', 'test', 'prod') and a critical usage warning. This adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Cancel a running or pending EMR Serverless job run') and distinguishes it from all sibling tools, which are primarily about browsing, reading, listing, or managing other resources like DAGs, Confluence pages, or S3 objects. No other tool mentions job cancellation.

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

Usage Guidelines5/5

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

Explicitly provides when-to-use guidance: 'Use this when a Spark job is stuck, taking too long, or was started with incorrect parameters.' This gives concrete scenarios for invocation, helping the agent decide when this tool is appropriate versus alternatives.

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

clear_task_instanceA

Clear a task instance to retry it without re-triggering the entire DAG.

Use this when a task failed due to a transient issue (e.g. network timeout, temporary S3 error) and you want to retry just that task and optionally all tasks downstream of it.

Args: dag_id: The DAG identifier. dag_run_id: The run ID. task_id: The task to clear/retry. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. include_downstream: If True, also clear all downstream tasks (default: False).

Returns confirmation with the list of cleared task instances.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
dag_run_idYes
task_idYes
envNo
include_downstreamNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's purpose (clearing for retry), scope (task vs. entire DAG), and important behavioral constraints (the IMPORTANT note about not guessing/defaulting on environment). It doesn't cover rate limits or authentication needs, but provides substantial 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.

Conciseness5/5

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

The description is perfectly structured and front-loaded: purpose statement first, usage guidelines second, parameter details third, return information last. Every sentence earns its place, with no wasted words. The IMPORTANT warning is appropriately emphasized without disrupting flow.

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

Completeness5/5

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

Given the tool's complexity (mutation operation with 5 parameters), no annotations, and 0% schema coverage, the description provides complete operational context. It covers purpose, usage scenarios, all parameter semantics, and mentions the return format. The existence of an output schema means the description doesn't need to detail return values.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantic information for all parameters. It explains what each parameter represents (dag_id, dag_run_id, task_id), provides the enum values for 'env' with critical usage guidance, and clarifies the default behavior and meaning of 'include_downstream'.

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

Purpose5/5

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

The description clearly states the specific action ('clear a task instance to retry it') and distinguishes it from alternatives by specifying it doesn't 're-trigger the entire DAG'. It provides a precise verb+resource combination that differentiates it from sibling tools like 'trigger_dag' or 'cancel_job_run'.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('when a task failed due to a transient issue') and provides concrete examples (network timeout, temporary S3 error). It also clarifies the scope ('retry just that task and optionally all tasks downstream'), giving clear context for decision-making.

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

create_confluence_pageA

Create a new Confluence page.

Use this to create incident reports, runbook entries, meeting notes, or any documentation. Content should be in simple HTML or plain text (which will be wrapped in HTML paragraphs).

Args: title: The page title (must be unique within the space). body: The page content. Can be HTML or plain text. For plain text, paragraphs are separated by blank lines. space_key: Space key (default from config). parent_page_id: Optional parent page ID to nest under.

Returns confirmation with the new page ID and URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
bodyYes
space_keyNo
parent_page_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that content can be HTML or plain text (with formatting details) and mentions the return format (confirmation with page ID and URL). However, it does not cover important behavioral aspects like required permissions, error handling, rate limits, or whether the operation is idempotent, leaving gaps for a mutation tool.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage examples, parameter details, and return information. Every sentence adds value without redundancy, and the bullet-point style for parameters enhances readability while maintaining brevity.

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

Completeness4/5

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

Given the tool's complexity (mutation with 4 parameters), no annotations, and an output schema (which covers return values), the description does a good job but has minor gaps. It explains parameters thoroughly and mentions returns, but lacks details on permissions, errors, or idempotency, which are important for a creation tool. The output schema helps, but behavioral context could be more complete.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all four parameters: explains uniqueness for 'title', content formats for 'body', default behavior for 'space_key', and optional nesting for 'parent_page_id'. This adds significant value beyond the bare schema, covering all parameters effectively.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Create') and resource ('new Confluence page'). It distinguishes from sibling tools like 'update_confluence_page' by focusing on creation rather than modification. The examples (incident reports, runbook entries, etc.) further clarify the intended use cases.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool ('to create incident reports, runbook entries, meeting notes, or any documentation'), but does not explicitly state when not to use it or mention alternatives like 'update_confluence_page' for modifying existing pages. The guidance is helpful but lacks explicit exclusions or comparisons.

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

dag_analyticsA

Get run statistics and trend analysis for a specific DAG.

Use this when the user asks about DAG reliability, performance trends, statistics, or historical patterns — "how's digital taxonomy been running?", "is this DAG stable?", "show me stats for HEM processing".

Unlike list_dag_runs (flat list of individual runs), this tool provides:

  • Success rate and failure rate over the time period

  • Duration stats: average, min, max, and trend direction

  • Failure pattern detection (e.g. "fails on Mondays")

  • Recent run streak (visual ✅/❌ sequence)

  • Day-by-day breakdown

Args: dag_id: The DAG identifier to analyse. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. days: Number of days to look back (default: 14, max: 180).

Returns a formatted analytics report with trends and patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
envNo
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (returns formatted analytics report with trends/patterns), includes important behavioral constraints (env parameter requires explicit user specification, days has default and max), and outlines the specific analytics provided (success/failure rates, duration stats, pattern detection, etc.). It doesn't mention error handling or rate limits, but covers core behavior well.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It begins with the core purpose, then usage guidelines, differentiation from siblings, detailed parameter explanations, and return value - each section earns its place. No redundant information, and the formatting with bullet points enhances readability without wasting space.

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

Completeness5/5

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

Given the tool's complexity (analytics with pattern detection), no annotations, 0% schema coverage, but with an output schema present, the description provides excellent completeness. It covers purpose, usage, behavioral aspects, parameter semantics thoroughly, and since an output schema exists, it appropriately doesn't detail return format. The description compensates well for the lack of annotations and schema descriptions.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides detailed semantic information for all three parameters: dag_id ('The DAG identifier to analyse'), env ('Target environment — 'dev', 'uat', 'test', or 'prod' with IMPORTANT usage note'), and days ('Number of days to look back (default: 14, max: 180)'). This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get run statistics and trend analysis for a specific DAG.' It specifies the verb ('Get') and resource ('run statistics and trend analysis for a specific DAG'), and explicitly distinguishes it from the sibling tool 'list_dag_runs' by contrasting their outputs (analytics vs. flat list).

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines: 'Use this when the user asks about DAG reliability, performance trends, statistics, or historical patterns' with concrete examples. It also specifies when NOT to use it ('Unlike list_dag_runs...') and names the alternative tool, making it clear when to choose this tool over siblings.

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

delete_emr_applicationA

Delete an EMR Serverless application permanently.

The application must be in STOPPED or CREATED state to be deleted. If the application is still running:

  • With force=False: returns an error asking you to stop it first.

  • With force=True: automatically stops the app (cancelling any running jobs), waits for it to reach STOPPED state, then deletes it.

Args: application_id: The EMR Serverless application ID. force: If True, stop the app first (cancelling jobs) then delete. If False, only delete if already stopped. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a step-by-step report of what was done.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYes
forceNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and does so comprehensively. It explains state dependencies, the destructive nature of the operation ('permanently'), the two force modes with their different behaviors, the automatic stopping and job cancellation when force=True, and the step-by-step reporting of actions taken.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement upfront, followed by state requirements, force parameter behavior in bullet points, and organized parameter explanations. Every sentence adds value with no redundancy, and the formatting enhances readability without unnecessary verbosity.

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

Completeness5/5

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

For a destructive operation with 3 parameters, 0% schema coverage, and no annotations, the description provides complete context. It covers prerequisites, behavioral nuances, parameter semantics, and mentions the return format ('step-by-step report'). The presence of an output schema means the description doesn't need to detail return values further.

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

Parameters5/5

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

With 0% schema description coverage, the description provides essential semantic context for all three parameters. It explains what application_id represents, the detailed behavior of the force parameter (including job cancellation implications), and the critical importance of the env parameter with specific valid values and guidance against guessing/defaulting.

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

Purpose5/5

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

The description clearly states the specific action ('Delete an EMR Serverless application permanently') and distinguishes it from sibling tools like 'stop_emr_application' by emphasizing permanent deletion rather than temporary stopping. 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.

Usage Guidelines5/5

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 versus alternatives: it specifies the application must be in STOPPED or CREATED state, mentions that 'stop_emr_application' could be used first if needed, and explains the force parameter behavior for handling running applications. It also includes important environment selection guidance.

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

diagnose_dag_failureA

One-shot diagnosis of a failed DAG run.

This tool does everything automatically:

  1. Finds the most recent failed run (today or specified date)

  2. Identifies which task(s) failed

  3. Reads the failed task logs

  4. Extracts EMR application ID from the 'initialise' task

  5. Reads the Spark driver logs (stdout) for Python app errors

  6. Returns a complete failure analysis

This replaces the need to call 5-6 tools manually.

Args: dag_id: The DAG to diagnose (e.g. 'ttdcustom_processing'). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. date: Optional date to check (ISO format or 'yesterday'). Default: today.

Returns a comprehensive failure report with root cause analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
envNo
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's automated workflow (steps 1-6), including that it reads logs and extracts IDs, which clarifies its read-only, analytical nature. However, it lacks details on potential side effects, error handling, or performance characteristics like rate limits, leaving some behavioral aspects unclear.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, a numbered list of automated steps, and separate sections for arguments and returns. Every sentence adds value, such as the sibling tool comparison and parameter warnings, with no redundant or verbose content, making it highly readable and informative.

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

Completeness5/5

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

For a complex diagnostic tool with 3 parameters, 0% schema coverage, no annotations, but an output schema, the description is complete. It covers the tool's purpose, usage guidelines, parameter semantics, and behavioral workflow. Since an output schema exists, it appropriately omits detailed return value explanations, focusing on the 'comprehensive failure report with root cause analysis.'

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

Parameters5/5

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

Given 0% schema description coverage, the description fully compensates by explaining all three parameters: 'dag_id' is described with an example, 'env' specifies allowed values and critical usage instructions, and 'date' clarifies format and default behavior. This adds essential meaning beyond the bare schema, ensuring parameters are well-understood.

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

Purpose5/5

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

The description explicitly states the tool's purpose as 'One-shot diagnosis of a failed DAG run' and details the six specific automated steps it performs. It clearly distinguishes this from sibling tools by noting it 'replaces the need to call 5-6 tools manually,' making its comprehensive diagnostic function distinct from simpler tools like get_dag_run_details or get_task_log.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: it should be used for comprehensive failure analysis instead of manually calling multiple tools. It also includes important usage constraints, such as the warning not to guess or default the 'env' parameter and to ask the user if unspecified, ensuring correct application.

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

get_backlogA

Get backlog items (PBIs/User Stories not in the current sprint).

USE THIS TOOL when the user asks about the backlog, upcoming work, 'what's next?', 'what's not in the sprint?', or items waiting to be picked up.

Args: project: Project name (default from config). team: Team name (default from config). max_results: Maximum items to return (default 50).

Returns backlog items ordered by priority with state and effort.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
teamNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns items 'ordered by priority with state and effort,' which adds useful behavioral context beyond the input schema. However, it doesn't mention potential limitations like pagination, error conditions, or authentication requirements, leaving some gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is well-structured and front-loaded: it starts with the purpose, then usage guidelines, followed by parameter explanations. Every sentence earns its place with no redundancy. It's appropriately sized for the tool's complexity, making it easy for an agent to parse quickly.

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

Completeness4/5

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

Given the tool has an output schema (which handles return values), no annotations, and 3 parameters with 0% schema coverage, the description does a good job. It covers purpose, usage, and parameter semantics adequately. However, for a tool with no annotations, it could benefit from more behavioral details like error handling or rate limits, 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.

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining each parameter: 'project: Project name (default from config)', 'team: Team name (default from config)', and 'max_results: Maximum items to return (default 50).' This clarifies the purpose and defaults, though it doesn't provide format details or constraints. With 3 parameters, this is a strong effort that significantly enhances understanding.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get backlog items (PBIs/User Stories not in the current sprint).' It specifies the verb ('Get'), resource ('backlog items'), and scope ('not in the current sprint'), distinguishing it from sibling tools like get_current_sprint and get_sprint_work_items. This is specific and unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines: 'USE THIS TOOL when the user asks about the backlog, upcoming work, 'what's next?', 'what's not in the sprint?', or items waiting to be picked up.' It gives clear examples of when to use this tool, helping the agent distinguish it from alternatives like get_current_sprint. No exclusions are mentioned, but the guidance is comprehensive.

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

get_child_pagesA

List all child pages of a given parent page.

Args: page_id: The parent page ID. include_content: If True, include a short content preview for each child. max_results: Max children to return (default 50).

Returns a list of child pages with titles and IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
include_contentNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return format ('list of child pages with titles and IDs') but lacks critical details: whether this is a read-only operation, if it requires authentication, any rate limits, pagination behavior beyond the max_results default, or error conditions (e.g., invalid page_id). For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement followed by bullet-pointed parameter explanations and a return statement. Every sentence adds value: the first defines the tool's function, the parameter descriptions clarify inputs, and the return statement outlines outputs. There is no redundant or verbose language.

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

Completeness3/5

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

Given no annotations, 3 parameters with 0% schema coverage, and an output schema present, the description is moderately complete. It covers the basic purpose and parameters but lacks behavioral context (e.g., safety, errors, pagination). The output schema likely details return values, so the description doesn't need to explain returns extensively, but it should address more operational aspects for full completeness.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful context for all three parameters: page_id is explained as 'The parent page ID', include_content clarifies it provides 'a short content preview for each child', and max_results specifies 'Max children to return (default 50)'. This goes beyond the schema's basic titles and types, though it doesn't detail format constraints (e.g., page_id structure) or edge cases.

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

Purpose5/5

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

The description clearly states the specific action ('List all child pages') and identifies the target resource ('of a given parent page'). It distinguishes itself from sibling tools like 'get_space_pages' or 'search_confluence' by focusing on hierarchical page relationships rather than space-wide listing or search functionality.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_space_pages' or 'search_confluence'. It doesn't mention prerequisites, such as needing a valid parent page ID, or exclusions, like not being suitable for non-hierarchical content. The only implicit context is the need for a parent page, but no explicit usage instructions are given.

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

get_current_sprintA

Get the current (active) sprint/iteration with dates and summary.

USE THIS TOOL when the user asks 'what sprint are we in?', 'current iteration', 'sprint dates', 'when does the sprint end?', or any question about the active sprint.

Args: project: Project name (default from config). team: Team name (default from config).

Returns current sprint name, date range, and time remaining. Use get_sprint_work_items() to see what's in the sprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
teamNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns ('current sprint name, date range, and time remaining'), mentions configurable defaults for parameters, and clarifies the scope (active sprint only). However, it doesn't address potential edge cases like what happens when no sprint is active or authentication requirements.

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

Conciseness5/5

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

The description is well-structured with clear sections (purpose, usage guidelines, parameters, returns, related tools). Every sentence adds value with no redundancy. The 'USE THIS TOOL' section efficiently lists multiple query examples, and the parameter explanations are direct and informative.

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

Completeness5/5

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

Given the tool's moderate complexity (2 optional parameters, no annotations, but has output schema), the description provides complete context. It covers purpose, usage scenarios, parameter semantics, return values, and relationship to sibling tools. The existence of an output schema means the description doesn't need to detail return structure, which it appropriately avoids.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining both parameters ('project' and 'team') and indicating they have defaults from config. It provides meaningful context about when these parameters are needed, though it doesn't specify exact config sources or format requirements.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('get the current sprint/iteration') and resources ('dates and summary'). It distinguishes itself from siblings by focusing on the active sprint only, not historical or future sprints, and explicitly mentions get_sprint_work_items as a complementary tool for detailed sprint content.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines with a dedicated 'USE THIS TOOL' section listing specific user query examples ('what sprint are we in?', 'current iteration', etc.). It also clearly distinguishes when to use this tool versus get_sprint_work_items for different types of sprint information.

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

get_dag_run_detailsA

Get full details for a specific DAG run, including every task instance.

Use this to see ALL tasks in a DAG run with their pass/fail status. For any failed tasks, the output includes ready-to-use get_task_log() hints. Common DAG task flow: start → create_arguments → check_inputs → initialise (creates EMR app) → processing → finalise.

Args: dag_id: The DAG identifier. dag_run_id: The run ID (e.g. 'scheduled__2026-02-16T00:00:00+00:00' or 'manual__...'). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns formatted output showing each task with state, duration and try count.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
dag_run_idYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it returns formatted output with task states, durations, and try counts, includes hints for failed tasks, and provides a common DAG task flow for context. It also warns about the 'env' parameter requirement. However, it doesn't mention potential errors, 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.

Conciseness5/5

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, provides usage guidance, includes a practical example flow, details parameters clearly, and ends with return information. Every sentence adds value without redundancy, making it easy to parse and understand quickly.

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

Completeness5/5

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

Given the tool's complexity (DAG run details with task instances), no annotations, and an output schema that likely handles return values, the description is complete. It covers purpose, usage, parameters, behavioral output, and integration hints (like get_task_log). The presence of an output schema means the description doesn't need to detail return structure, allowing it to focus on contextual guidance.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains 'dag_id' as 'The DAG identifier', 'dag_run_id' with format examples, and 'env' with allowed values and a critical warning about not guessing/defaulting. This fully compensates for the schema's lack of descriptions and provides essential context for proper usage.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get full details', 'see ALL tasks') and resources ('specific DAG run', 'every task instance'). It distinguishes from sibling tools like 'list_dag_runs' (which lists runs) and 'get_task_log' (which gets logs for specific tasks) by focusing on comprehensive run details with task statuses.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('Use this to see ALL tasks in a DAG run with their pass/fail status') and includes practical context ('For any failed tasks, the output includes ready-to-use get_task_log() hints'). It also distinguishes from alternatives by emphasizing comprehensive details rather than just listing runs or getting specific logs.

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

get_dag_sourceA

Get the source code / definition of a DAG.

Use this to understand what a DAG does — its tasks, operators, dependencies, schedule, and configuration. Useful for debugging or understanding a pipeline's structure.

Args: dag_id: The DAG identifier. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns the DAG details including file location, schedule, tags, and task list.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a read operation ('Get'), returns detailed DAG information ('source code / definition', 'details including file location, schedule, tags, and task list'), and has a critical constraint about the 'env' parameter requiring explicit user input. However, it doesn't mention potential errors (e.g., if DAG doesn't exist), rate limits, or authentication needs, leaving some gaps.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded. The first sentence states the core purpose, followed by usage guidelines and parameter details in a structured 'Args:' section. Every sentence earns its place: the purpose, use cases, parameter explanations, and return value summary are all essential without redundancy. The formatting with bullet-like sections enhances readability.

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

Completeness5/5

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

Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is complete enough. It covers purpose, usage, parameters, and return values. Since an output schema exists, the description doesn't need to detail return values extensively, and it appropriately summarizes them ('Returns the DAG details including file location, schedule, tags, and task list'). This provides sufficient context for an agent to use the tool effectively.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must compensate fully. It does so by clearly explaining both parameters: 'dag_id: The DAG identifier' and 'env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.' This adds crucial meaning beyond the bare schema, including enum-like values for 'env' and a strict usage rule, making the parameters well-understood.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get the source code / definition of a DAG' with specific verbs ('get', 'understand') and resources ('source code', 'definition', 'DAG'). It distinguishes from siblings like 'get_dag_run_details' or 'list_dags' by focusing on the DAG's source/definition rather than runs, status, or lists. The phrase 'Use this to understand what a DAG does' reinforces its unique role.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Use this to understand what a DAG does — its tasks, operators, dependencies, schedule, and configuration. Useful for debugging or understanding a pipeline's structure.' It also includes a critical exclusion: 'IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.' This clearly defines the tool's context and constraints, helping the agent choose it over alternatives like 'list_dags' for structural insight.

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

get_dags_status_dashboardA

Get a complete status dashboard of ALL DAGs — the go-to tool for any overview question.

USE THIS TOOL when the user asks:

  • "What's the status of all DAGs?"

  • "Which DAGs failed today?"

  • "Show me a DAG report / dashboard / overview"

  • "What's running right now?"

  • "Are all DAGs healthy?"

Shows every DAG with:

  • Active/Paused state

  • Schedule interval

  • Last run: state (success/failed/running), date, and duration

  • Summary counts at the top

  • Failed DAGs highlighted at the bottom with diagnosis commands

Args: env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. limit: Maximum number of DAGs to return (default 100).

Returns a formatted status report with every DAG and its current health.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read-only operation (implied by 'Get'), returns formatted output with specific content (e.g., summary counts, highlighted failed DAGs), and includes important constraints like requiring explicit environment specification ('IMPORTANT: Do NOT guess or default'). However, it doesn't mention potential rate limits or authentication requirements.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, usage guidelines, output details, args, returns) and front-loads key information. Most sentences earn their place, though some phrasing like 'the go-to tool for any overview question' is slightly verbose. Overall, it's appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool's moderate complexity (2 parameters, no annotations, but with output schema), the description is highly complete. It covers purpose, usage context, parameter semantics, and output format. The presence of an output schema means the description doesn't need to detail return values, and it adequately addresses all other aspects needed 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.

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides detailed semantics for both parameters: 'env' is explained as 'Target environment' with valid values listed and a critical usage note, and 'limit' is described as 'Maximum number of DAGs to return' with its default value. This adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

The description explicitly states the tool's purpose: 'Get a complete status dashboard of ALL DAGs.' It specifies the verb ('Get'), resource ('status dashboard'), and scope ('ALL DAGs'), clearly distinguishing it from sibling tools like list_dags or get_dag_run_details by emphasizing comprehensive overview functionality.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines with a dedicated 'USE THIS TOOL when the user asks:' section listing five specific query patterns. It clearly defines when to use this tool versus alternatives by positioning it as the 'go-to tool for any overview question,' differentiating it from more specific sibling tools.

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

get_emr_cost_summaryA

Get a summary of EMR Serverless resource usage and estimated costs.

Aggregates vCPU hours, memory GB-hours, and storage GB-hours across recent job runs. Useful for understanding compute costs.

Args: application_id: Optional — filter to one application. If omitted, scans all. days: Number of days to look back (default 7). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a cost summary with per-job and total resource usage.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idNo
daysNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains what the tool does (aggregates resource usage across job runs) and includes important operational guidance about the 'env' parameter. However, it lacks details on permissions needed, rate limits, error conditions, or whether this is a read-only operation (though implied by 'Get').

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

Conciseness4/5

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

The description is well-structured with a clear purpose statement, aggregation details, usage context, parameter explanations, and return information. Every sentence adds value, though the 'IMPORTANT' note about the 'env' parameter could be integrated more smoothly. The text is appropriately sized for a tool with three parameters.

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

Completeness4/5

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

Given the tool's moderate complexity (3 parameters, no annotations, but with output schema), the description provides good coverage. It explains the tool's purpose, parameters, and return value ('Returns a cost summary with per-job and total resource usage'). The presence of an output schema means the description doesn't need to detail the return structure, making this reasonably complete.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing clear semantic explanations for all three parameters. It explains that 'application_id' is optional and filters to one application, 'days' specifies the lookback period with a default, and 'env' is the target environment with specific valid values and important usage guidance.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get a summary', 'Aggregates') and resources ('EMR Serverless resource usage and estimated costs', 'vCPU hours, memory GB-hours, and storage GB-hours across recent job runs'). It distinguishes itself from sibling tools by focusing on cost analysis rather than browsing, listing, or managing resources.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Useful for understanding compute costs'), but does not explicitly mention when not to use it or name specific alternatives. The guidance on the 'env' parameter ('IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified') offers operational direction but not tool-selection advice.

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

get_job_run_detailsA

Get detailed information about a specific EMR Serverless job run.

Shows the Spark submit config (entry point script, arguments), resource usage (vCPU hours, memory), and S3 log locations. Includes ready-to-use hints for read_spark_driver_log and browse_s3_logs.

Args: application_id: The EMR Serverless application ID (from Airflow 'initialise' task log). job_run_id: The job run ID (from Airflow processing task log). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns comprehensive details: state, config, resource usage, S3 log paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYes
job_run_idYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It effectively discloses behavioral traits: it's a read-only operation (implied by 'Get detailed information'), it returns comprehensive details (state, config, resource usage, S3 log paths), and it provides hints for related tools. However, it doesn't mention potential errors, rate limits, or authentication requirements, which keeps it from a perfect score.

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

Conciseness5/5

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

The description is well-structured and front-loaded: the first sentence states the core purpose, followed by specifics on what information is returned, parameter details, and important usage notes. Every sentence adds value—none are redundant or vague—making it efficient and easy to parse.

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

Completeness5/5

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

Given the tool's complexity (3 parameters, 0% schema coverage, no annotations) and the presence of an output schema, the description is complete. It explains the purpose, parameters, return value overview, and usage guidelines. The output schema will handle detailed return values, so the description doesn't need to enumerate them further, making it appropriately comprehensive.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It fully documents all three parameters: application_id (with source guidance: 'from Airflow initialise task log'), job_run_id (with source: 'from Airflow processing task log'), and env (with enum values: 'dev', 'uat', 'test', or 'prod' and critical usage instructions). This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get detailed information about a specific EMR Serverless job run.' It specifies the exact resource (EMR Serverless job run) and verb (get detailed information), distinguishing it from sibling tools like list_job_runs (which lists multiple runs) or get_emr_cost_summary (which focuses on costs).

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: for detailed information about a specific job run, including config, resource usage, and logs. It distinguishes from alternatives by mentioning 'ready-to-use hints for read_spark_driver_log and browse_s3_logs,' implying those are separate tools for deeper log inspection. It also includes a critical exclusion: 'IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.'

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

get_page_attachmentsA

List all file attachments on a Confluence page.

Args: page_id: The page ID. max_results: Max attachments to return (default 50).

Returns a list of attachments with name, size, type, and download URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It states this is a list operation (implying read-only) and describes the return format, which is helpful. However, it doesn't mention pagination behavior, rate limits, authentication requirements, or error conditions that would be important for a production tool.

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

Conciseness5/5

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

The description is perfectly structured and front-loaded: the first sentence states the core purpose, followed by clear parameter explanations and return value description. Every sentence earns its place with zero wasted words or redundancy.

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

Completeness4/5

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

For a relatively simple read operation with 2 parameters and an output schema, the description is mostly complete. It explains what the tool does, documents the parameters, and describes the return format. The main gap is lack of behavioral context like pagination or error handling, but the output schema likely covers the return structure.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It clearly explains both parameters: page_id identifies the target page, and max_results controls the return limit with its default value. This adds meaningful context beyond the bare schema, though it doesn't specify format requirements for page_id.

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

Purpose5/5

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

The description clearly states the specific action ('List all file attachments') and resource ('on a Confluence page'), distinguishing it from siblings like get_page_content or get_page_comments which handle different page elements. The verb 'List' is precise and the scope 'all file attachments' is unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. While it's clear this tool is for Confluence page attachments, there's no mention of when you'd use this versus other Confluence tools like get_page_content or search_confluence, nor any prerequisites or constraints beyond what's in the parameters.

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

get_page_commentsA

Get comments on a Confluence page.

Args: page_id: The page ID. max_results: Max comments to return (default 25).

Returns comments with author, date, and content. Useful for understanding discussions and context around a page.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('comments with author, date, and content') and a default value for max_results, but doesn't cover important aspects like pagination behavior, error handling, authentication requirements, rate limits, or whether this is a read-only operation. For a tool with zero annotation coverage, this leaves significant gaps.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, parameter explanations, and a usage benefit - all in just four sentences. Every sentence adds value without redundancy, and the information is front-loaded with the core functionality stated first.

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

Completeness4/5

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

Given that an output schema exists (which handles return value documentation), the description provides adequate context for a relatively simple read operation. It covers the purpose, parameters, and basic use case. However, for a tool with no annotations, it could benefit from more behavioral transparency about how the tool actually works beyond just what it returns.

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

Parameters4/5

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

The description adds meaningful context for both parameters beyond what the schema provides (which has 0% description coverage). It explains that 'page_id' identifies the Confluence page and that 'max_results' controls how many comments to return with a default of 25. This compensates well for the lack of schema descriptions, though it doesn't specify format requirements for page_id or constraints on max_results.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('comments on a Confluence page'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_page_content' or 'search_confluence', which could also involve page-related operations.

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

Usage Guidelines3/5

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

The description provides implied usage context by stating the tool is 'useful for understanding discussions and context around a page,' which suggests when it might be appropriate. However, it lacks explicit guidance on when to use this tool versus alternatives like 'get_page_content' or 'search_confluence,' and doesn't mention any prerequisites or exclusions.

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

get_page_contentA

Read the full content of a Confluence page.

Args: page_id: The page ID (numeric). Provide this OR title. title: Page title to look up (slower, requires space_key). space_key: Space key (default from config). Required if using title. include_metadata: Include page metadata header (default True).

Returns the page content converted to clean readable text.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNo
titleNo
space_keyNo
include_metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the read-only nature ('Read'), mentions performance characteristics ('slower'), and describes output behavior ('converted to clean readable text'). However, it doesn't cover important behavioral aspects like error conditions, rate limits, authentication requirements, 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.

Conciseness5/5

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

The description is perfectly structured with a clear purpose statement followed by a well-organized parameter explanation. Every sentence earns its place - the first sentence states the core function, and the parameter explanations are essential for proper usage. No wasted words or redundancy.

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

Completeness4/5

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

Given the tool's moderate complexity (4 parameters, read operation) and the presence of an output schema, the description provides good coverage. It explains the core functionality and parameters well, though it could benefit from more behavioral context about errors or limitations. The output schema handles return value documentation, so the description appropriately focuses on usage.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining all 4 parameters with clear semantics: page_id vs title trade-offs, space_key requirement logic, and include_metadata default behavior. The 'Args:' section provides essential context beyond what the bare schema offers.

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

Purpose5/5

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

The description clearly states the specific action ('Read the full content'), target resource ('a Confluence page'), and output format ('converted to clean readable text'). It distinguishes itself from siblings like get_page_attachments or get_page_comments by focusing on page content specifically.

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

Usage Guidelines3/5

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

The description provides implied usage guidance through parameter explanations (e.g., 'Provide this OR title', 'slower, requires space_key'), but doesn't explicitly state when to use this tool versus alternatives like search_confluence or get_child_pages. No clear exclusions or sibling comparisons are provided.

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

get_page_labelsB

Get all labels (tags) on a Confluence page.

Args: page_id: The page ID.

Returns a list of labels. Useful for finding related pages or understanding page categorization.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool 'Returns a list of labels,' which indicates a read-only operation, but fails to address other critical aspects such as authentication requirements, error handling (e.g., invalid page_id), rate limits, or pagination behavior. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, with the core purpose stated first ('Get all labels (tags) on a Confluence page.'). The additional sentences provide useful context without redundancy. However, the formatting with 'Args:' and 'Returns' could be more integrated, slightly affecting structure.

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

Completeness3/5

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

Given the tool's low complexity (1 parameter) and the presence of an output schema (which handles return values), the description is somewhat complete but has gaps. It covers the basic purpose and usage hint but lacks details on behavioral aspects like error handling or authentication, which are important for a tool with no annotations. This results in a minimally adequate but incomplete description.

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

Parameters3/5

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

The input schema has 0% description coverage, with only one parameter ('page_id') documented structurally. The description adds minimal semantics by stating 'page_id: The page ID,' which restates the schema's title without providing additional context (e.g., format, source, or validation rules). Since schema coverage is low, the description does not adequately compensate, resulting in a baseline score.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get all labels (tags) on a Confluence page.' It specifies the verb ('Get') and resource ('labels on a Confluence page'), making the action unambiguous. However, it does not explicitly differentiate from sibling tools like 'get_page_attachments' or 'get_page_comments', which follow a similar pattern but target different page attributes.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by stating it's 'Useful for finding related pages or understanding page categorization.' This suggests contexts where the tool is applicable, such as content organization or navigation. However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., 'search_confluence' for broader queries) or any exclusions, leaving room for interpretation.

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

get_s3_object_infoA

Get detailed metadata for a single S3 object without downloading it.

USE THIS TOOL when the user asks about a specific file's size, modification time, type, or other details. This is fast because it only reads the metadata header, not the file content.

Args: s3_uri: Full S3 URI (e.g. 's3://bucket-name/path/to/file.csv'). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns file metadata: size, last modified, content type, storage class, encryption, and ETag.

ParametersJSON Schema
NameRequiredDescriptionDefault
s3_uriYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a read-only metadata operation (implied by 'without downloading'), it's performance-optimized ('fast'), and it returns specific metadata fields. However, it doesn't mention potential errors (e.g., if the object doesn't exist), authentication requirements, or rate limits, which would be helpful for a production S3 tool.

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

Conciseness5/5

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

The description is well-structured and front-loaded: the first sentence states the core purpose, followed by usage guidelines, parameter details, and return values. Every sentence adds value with no redundancy. The formatting with clear sections (Args, Returns) enhances readability without being verbose.

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

Completeness5/5

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

Given the tool's moderate complexity (2 parameters, no annotations, but with output schema), the description is complete. It covers purpose, usage, parameters, and return values. Since an output schema exists, the description doesn't need to detail the return structure beyond listing the metadata fields. It provides all necessary context for an agent to correctly invoke this tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides excellent parameter semantics: it explains 's3_uri' format with an example ('s3://bucket-name/path/to/file.csv'), defines 'env' as 'Target environment' with explicit valid values ('dev', 'uat', 'test', or 'prod'), and includes an IMPORTANT warning about not guessing/defaulting. This adds crucial context beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Get detailed metadata for a single S3 object without downloading it') and distinguishes it from sibling tools like 'read_s3_file' (which downloads content) and 'browse_s3' (which lists objects). It explicitly mentions the resource type (S3 object) and scope (single object metadata only).

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

Usage Guidelines5/5

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

The description provides explicit guidance with 'USE THIS TOOL when the user asks about a specific file's size, modification time, type, or other details.' It also distinguishes this from content-reading alternatives by stating 'This is fast because it only reads the metadata header, not the file content.' This gives clear when-to-use criteria and contrasts with sibling tools that handle content.

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

get_space_pagesB

List all pages in a Confluence space.

Args: space_key: Space key (default: ACTIVATE from config). max_results: Max pages per request (default 50, max 100). page_type: 'page' or 'blogpost' (default 'page'). start: Pagination offset (default 0).

Returns a list of pages with titles, IDs, and URLs (paginated).

ParametersJSON Schema
NameRequiredDescriptionDefault
space_keyNo
max_resultsNo
page_typeNopage
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions pagination and default values, which is helpful, but doesn't cover critical aspects like rate limits, authentication requirements, error conditions, or whether this is a read-only operation. The description doesn't contradict any annotations (since none exist), but it leaves significant behavioral gaps.

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

Conciseness4/5

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

The description is efficiently structured with a clear purpose statement followed by parameter explanations and return value information. Every sentence adds value, though the 'Args:' and 'Returns:' formatting could be more integrated with natural language. It's appropriately sized for a tool with four parameters.

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

Completeness3/5

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

Given the tool's moderate complexity (listing operation with pagination and filtering), no annotations, and an output schema (which handles return values), the description is minimally adequate. It covers parameters well but lacks behavioral context like error handling, rate limits, and usage guidelines. The presence of an output schema reduces the need to explain return format, but more operational guidance would be helpful.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining all four parameters: space_key (with default from config), max_results (with range), page_type (with enum values), and start (pagination offset). It provides meaningful context beyond the schema's titles, though it could elaborate on the 'ACTIVATE from config' default behavior.

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

Purpose4/5

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

The description clearly states the tool's purpose as 'List all pages in a Confluence space' with a specific verb ('List') and resource ('pages in a Confluence space'). It distinguishes itself from siblings like 'get_child_pages' or 'search_confluence' by focusing on space-level listing rather than page-specific operations or search. However, it doesn't explicitly contrast with these siblings in the description text.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_child_pages' or 'search_confluence'. It mentions pagination but doesn't explain when pagination is needed or how to handle large result sets. There's no discussion of prerequisites, such as needing space access permissions.

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

get_sprint_work_itemsA

Get all work items (PBIs, Tasks, Bugs) in a sprint with full details.

USE THIS TOOL when the user asks 'what's in the sprint?', 'sprint board', 'who's working on what?', 'sprint details', or wants to see sprint content.

Shows each work item with type, title, state, assigned person, effort/story points. Groups items by type (PBI, Task, Bug) with totals.

Args: iteration_path: Full iteration path (e.g. 'Activate\Sprint 23 Q4 FY26'). If omitted, uses the current sprint automatically. project: Project name (default from config). team: Team name (default from config).

Returns all work items grouped by type with assignee, state, effort, and priority. Use get_work_item_details(work_item_id=...) for full details of any item.

ParametersJSON Schema
NameRequiredDescriptionDefault
iteration_pathNo
projectNo
teamNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it returns grouped items with specific fields (type, title, state, assigned person, effort/story points), shows grouping logic (by type with totals), and explains default behavior for omitted parameters. It doesn't mention rate limits or authentication requirements, but provides substantial 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.

Conciseness5/5

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 guidelines, parameter explanations, and return behavior. Every sentence serves a distinct purpose: purpose statement, usage scenarios, parameter semantics, return format, and alternative tool reference. No wasted words or redundancy.

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

Completeness5/5

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

Given the tool's complexity (3 parameters, no annotations, but with output schema), the description provides complete context. It explains what the tool does, when to use it, what parameters mean, what information is returned, and how it relates to sibling tools. The presence of an output schema means the description doesn't need to detail return values, 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.

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing clear semantic explanations for all three parameters. It explains what 'iteration_path' represents with an example, clarifies that it defaults to current sprint when omitted, and explains default behavior for 'project' and 'team' parameters. This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get all work items') and resources ('in a sprint with full details'), explicitly listing the item types (PBIs, Tasks, Bugs). It distinguishes from sibling tools like 'get_work_item_details' by indicating this is for aggregated sprint content rather than individual item details.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance with a dedicated 'USE THIS TOOL when' section listing specific user query patterns ('what's in the sprint?', 'sprint board', etc.). It also clearly distinguishes from the alternative 'get_work_item_details' tool for individual item details, providing complete when-to-use and when-not-to-use guidance.

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

get_task_logA

Read the Airflow log for a specific task attempt.

IMPORTANT for EMR debugging:

  • Read the 'initialise' (or 'ae_initialize_emr_application') task log to find the EMR application ID. Look for: 'EMR serverless application created: 00gXXXXXXXXX' or 'Created EMR application 00gXXXXXXXXX'.

  • Read the failed processing task log to find the job_run_id. Look for: 'EMR serverless job started: 00gXXXXXXXXX'.

  • Then use read_spark_driver_log(application_id, job_run_id, log_type='stdout') to get the Python app output.

Args: dag_id: The DAG identifier. dag_run_id: The run ID. task_id: The task identifier. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. try_number: Which attempt (default 1). tail_lines: Number of lines to return from the end (default 200).

Returns the raw log text, trimmed to the last N lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
dag_run_idYes
task_idYes
envNo
try_numberNo
tail_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'Read'), returns raw log text trimmed to the last N lines, and includes important constraints like not guessing the 'env' parameter. However, it doesn't mention potential errors, 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.

Conciseness4/5

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

The description is well-structured with clear sections (purpose, important notes, args, returns) and uses bullet points for readability. While slightly longer due to detailed examples, every sentence adds value (e.g., EMR debugging steps, parameter warnings). Minor trimming could improve conciseness without losing clarity.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, 0% schema coverage, no annotations) and the presence of an output schema, the description is highly complete. It covers purpose, usage guidelines, parameter semantics, and behavioral aspects like output trimming. The output schema handles return values, so the description appropriately focuses on context and usage.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must fully compensate. It successfully adds meaning for all parameters: explains 'dag_id', 'dag_run_id', and 'task_id' as identifiers; details 'env' options and critical usage warning; clarifies 'try_number' as attempt count with default; and specifies 'tail_lines' as number of lines from the end with default. This goes well beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Read the Airflow log for a specific task attempt') and resource ('Airflow log'), distinguishing it from siblings like 'read_spark_driver_log' or 'get_dag_run_details'. It precisely defines the tool's function without tautology.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool, including specific examples for EMR debugging (e.g., to find EMR application IDs or job_run_ids). It also names an alternative tool ('read_spark_driver_log') for further steps, clearly differentiating use cases.

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

get_work_item_detailsA

Get full details of a single work item (PBI, Task, Bug, Feature, Epic).

USE THIS TOOL when the user asks about a specific work item by ID, wants the description, acceptance criteria, history, or full details.

Args: work_item_id: The numeric work item ID (e.g. 12345). project: Project name (default from config).

Returns complete work item details including description, acceptance criteria, parent/child links, and all metadata fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
work_item_idYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It describes what the tool returns ('complete work item details including description, acceptance criteria, parent/child links, and all metadata fields') but doesn't mention authentication requirements, rate limits, error conditions, or whether this is a read-only operation. It provides some behavioral context but leaves important operational details unspecified.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, usage guidelines section, parameter explanations, and return value description. Every sentence serves a distinct purpose with no wasted words, and information is logically organized and front-loaded.

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

Completeness4/5

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

Given the tool has an output schema (which handles return values), no annotations, and 2 parameters with good description coverage, the description is reasonably complete. It explains what the tool does, when to use it, what parameters mean, and what to expect in return. The main gap is lack of operational context like authentication or error handling.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining both parameters: 'work_item_id: The numeric work item ID (e.g. 12345)' and 'project: Project name (default from config).' It provides concrete examples and default behavior, adding significant value beyond the bare schema which only shows types and requirements.

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

Purpose5/5

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

The description explicitly states 'Get full details of a single work item' with specific resource types listed (PBI, Task, Bug, Feature, Epic). It clearly distinguishes this from sibling tools by focusing on retrieving complete details for a single item by ID, unlike tools like get_backlog or get_sprint_work_items which handle collections.

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

Usage Guidelines5/5

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

The description provides explicit guidance with 'USE THIS TOOL when the user asks about a specific work item by ID, wants the description, acceptance criteria, history, or full details.' This gives clear conditions for when to use this tool versus alternatives, addressing the specific use case scenarios.

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

list_dag_runsA

Get DAG runs for today, yesterday, last week, or a specific date.

This is the go-to tool when the user asks about DAG runs, processing status, or historical failures. Returns a numbered interactive list so the user can pick a specific run for deeper investigation.

Args: env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. dag_id: Optional — filter to a specific DAG. If omitted, shows ALL DAGs. date: 'today' (default), 'yesterday', 'last_week', or ISO date (e.g. '2026-02-15'). limit: Max runs to return (default 50).

Returns a numbered list of runs with status, timing and duration. Present these to the user so they can pick one by number.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNo
dag_idNo
dateNotoday
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'Get'), returns interactive numbered lists, and includes important constraints like the 'IMPORTANT: Do NOT guess or default' warning for the 'env' parameter. However, it doesn't mention rate limits, authentication requirements, or error handling scenarios.

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

Conciseness4/5

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

The description is well-structured with clear sections: purpose statement, usage guidelines, parameter explanations, and return format. It's appropriately sized for a 4-parameter tool with no annotations. Minor improvement could be made by slightly tightening the language, but every sentence adds value.

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

Completeness5/5

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

Given the tool's complexity (4 parameters, no annotations, but with output schema), the description is complete. It covers purpose, usage, all parameters with semantics, and return behavior. The output schema existence means the description doesn't need to detail return values, and it appropriately focuses on how to present results to users.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. It explains all 4 parameters: 'env' (target environments with specific values and an important usage warning), 'dag_id' (optional filter), 'date' (valid values and default), and 'limit' (purpose and default). This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get DAG runs for today, yesterday, last week, or a specific date.' It specifies the verb ('Get'), resource ('DAG runs'), and scope (time-based filtering). It distinguishes from sibling tools like 'get_dag_run_details' (which provides deeper investigation) and 'list_dags' (which lists DAGs rather than runs).

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'This is the go-to tool when the user asks about DAG runs, processing status, or historical failures.' It also specifies the return format ('numbered interactive list') and how to use the output ('Present these to the user so they can pick one by number'). This gives clear context for when to use this tool versus alternatives like 'get_dag_run_details' for deeper investigation.

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

list_dagsA

List all DAGs in the MWAA environment.

Args: env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. limit: Maximum number of DAGs to return (default 100). only_active: If True, show only unpaused DAGs.

Returns a formatted table of DAGs with schedule interval and pause status.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNo
limitNo
only_activeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it specifies the return format ('formatted table'), mentions default values for parameters, and includes an important instruction about not guessing the environment. However, it doesn't cover aspects like rate limits or error handling.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a structured breakdown of args and returns. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

For a tool with 3 parameters, no annotations, but an output schema, the description is quite complete: it covers purpose, parameters, and return format. The output schema likely handles return values, so the description doesn't need to detail them further. Minor gaps include lack of error or edge-case handling.

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

Parameters5/5

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

Given 0% schema description coverage, the description fully compensates by explaining all three parameters: 'env' with allowed values and a critical usage note, 'limit' with its default, and 'only_active' with its filtering logic. It adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('List all DAGs') and resource ('in the MWAA environment'), distinguishing it from siblings like list_dag_runs, list_emr_applications, or list_job_runs. It precisely identifies what the tool does without ambiguity.

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

Usage Guidelines4/5

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

The description provides clear context for usage by specifying the target environment and filtering options, but it does not explicitly state when to use this tool versus alternatives like get_dags_status_dashboard or list_dag_runs. It offers guidance on parameter usage but lacks sibling differentiation.

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

list_emr_applicationsA

List all EMR Serverless applications.

Note: DAGs create temporary EMR apps that are deleted after each run. If an app is not found here, it was already cleaned up — but job run details and S3 logs are still available via get_job_run_details and read_spark_driver_log using the application_id from the Airflow task log.

Args: states: Optional comma-separated state filter (e.g. 'STARTED,CREATED'). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a formatted list of applications with IDs, types and states.

ParametersJSON Schema
NameRequiredDescriptionDefault
statesNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it lists applications, explains that temporary apps are deleted (implying the list may not be comprehensive), and specifies that the output is a formatted list with IDs, types, and states. However, it doesn't mention pagination, rate limits, or authentication requirements, which are common gaps.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by important notes and parameter details. Every sentence adds value: the first states the action, the next explains temporary app behavior, the third guides to alternatives, and the parameter sections provide essential usage context. No wasted words.

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

Completeness5/5

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

Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is complete. It covers purpose, usage context, parameter semantics, and output format. The output schema handles return values, so the description doesn't need to detail them further. All necessary context for effective use is provided.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must fully compensate. It does so by clearly explaining both parameters: 'states' as an optional comma-separated state filter with an example, and 'env' as the target environment with specific values and a critical instruction to ask the user if not specified. This adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('List all EMR Serverless applications') and distinguishes it from siblings by focusing on EMR applications rather than DAGs, job runs, or other resources. The verb 'list' and resource 'EMR Serverless applications' are 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.

Usage Guidelines5/5

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 vs alternatives: it notes that temporary EMR apps from DAGs are deleted after runs, and if an app is not found here, job run details and logs are available via get_job_run_details and read_spark_driver_log. This clearly delineates the tool's scope and points to complementary tools.

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

list_job_runsA

List job runs for an EMR Serverless application.

Args: application_id: The EMR Serverless application ID. max_results: Max runs to return (default 30). states: Optional comma-separated state filter (e.g. 'SUCCESS,FAILED'). created_after: Optional ISO date — only runs after this date (e.g. '2026-02-16'). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a list of job runs with status, timing and duration.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYes
max_resultsNo
statesNo
created_afterNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('list of job runs with status, timing and duration') but doesn't cover critical aspects like whether this is a read-only operation, pagination behavior, rate limits, authentication requirements, or error conditions. For a tool with 5 parameters and no annotations, this leaves significant gaps.

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

Conciseness5/5

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

The description is perfectly structured and front-loaded: purpose statement first, followed by organized parameter documentation with clear formatting. Every sentence earns its place, with no wasted words or redundant information.

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

Completeness4/5

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

Given the tool's moderate complexity (5 parameters, 1 required), 0% schema coverage, no annotations, but presence of an output schema, the description does well by thoroughly documenting all parameters. The output schema means return values don't need explanation, but behavioral aspects like safety and constraints could be more complete.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining all 5 parameters in the Args section, including format examples (e.g., ISO date, comma-separated states), default values, and important usage guidance for 'env'. This adds substantial meaning beyond what the bare schema provides.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('job runs for an EMR Serverless application'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_job_run_details' or 'list_emr_applications', which would be needed for a perfect score.

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

Usage Guidelines3/5

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

The description provides implied usage context through the 'env' parameter guidance ('IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified'), which suggests when to use this tool versus alternatives. However, it lacks explicit when/when-not guidance or named alternatives for filtering job runs.

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

list_reposA

List all Git repositories in the Azure DevOps project.

USE THIS TOOL when the user asks about repos, code repositories, or wants to browse source code in Azure DevOps / TFS.

Args: project: Project name (default: Activate from config).

Returns a list of repositories with name, default branch, size, and URL. Use browse_repo(repo_name='...') to explore a repo's files.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list of repositories with specific fields (name, default branch, size, URL), which is useful behavioral context. However, it doesn't mention potential limitations like pagination, rate limits, authentication needs, or error conditions, leaving gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, parameter details, and return information. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

Given 1 parameter with no annotations but an output schema (which handles return values), the description is largely complete. It covers purpose, usage, parameter semantics, and return format. However, it lacks details on behavioral aspects like error handling or constraints, which would be beneficial since annotations are absent.

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

Parameters4/5

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

The input schema has 1 parameter with 0% description coverage. The description adds meaningful semantics by explaining that 'project' is the 'Project name (default: Activate from config),' clarifying its purpose and default behavior. This compensates well for the low schema coverage, though it doesn't detail what 'Activate from config' entails.

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

Purpose5/5

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

The description clearly states the specific action ('List all Git repositories') and resource ('in the Azure DevOps project'), distinguishing it from sibling tools like browse_repo (which explores files) and other unrelated tools. 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.

Usage Guidelines5/5

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

The description explicitly states 'USE THIS TOOL when the user asks about repos, code repositories, or wants to browse source code in Azure DevOps / TFS,' providing clear when-to-use guidance. It also mentions an alternative tool ('Use browse_repo(repo_name='...') to explore a repo's files') for related but different tasks.

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

list_s3_bucketsA

List all S3 buckets in the AWS account.

USE THIS TOOL when the user asks about S3 buckets, storage, "what buckets do we have", or anything about S3 at account level.

Args: env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns every bucket with its creation date, sorted alphabetically.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it lists all buckets (implying a read-only operation), specifies the return format (creation date, sorted alphabetically), and includes a critical instruction about not guessing/defaulting the 'env' parameter. However, it doesn't mention potential rate limits, authentication needs, or error handling, leaving some gaps.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: it starts with the core purpose, follows with usage guidelines, then details parameters and returns. Every sentence adds value without waste, and the structure is clear and efficient for an AI agent to parse.

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

Completeness4/5

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

Given the tool's low complexity (1 parameter) and the presence of an output schema (which handles return values), the description is largely complete. It covers purpose, usage, parameters, and behavioral aspects. However, without annotations, it could benefit from more details on authentication or error scenarios, slightly reducing completeness.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description must compensate. It adds significant meaning beyond the schema: it explains the 'env' parameter as 'Target environment' with enumerated values ('dev', 'uat', 'test', 'prod') and provides an IMPORTANT note about not guessing/defaulting. This fully compensates for the schema's lack of documentation.

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

Purpose5/5

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

The description clearly states the specific action ('List all S3 buckets') and resource ('in the AWS account'), distinguishing it from sibling tools like 'browse_s3' or 'list_s3_recursive' which likely operate at different scopes. 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.

Usage Guidelines5/5

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

The description explicitly provides usage guidelines with 'USE THIS TOOL when...' followed by specific scenarios (e.g., user asks about S3 buckets, storage, 'what buckets do we have'), and it includes an important directive to ask the user for the environment if not specified. This offers clear context and exclusions, helping differentiate from alternatives.

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

list_s3_recursiveA

Recursively list ALL files under an S3 bucket/prefix in a single call.

USE THIS TOOL when the user asks to see everything in a bucket or folder end-to-end, wants a full file listing, or needs to find files by name or extension across nested folders.

Args: bucket: S3 bucket name (required). prefix: Starting prefix/folder (default: root of bucket). Example: 'raw/hem_processing/' to list that subtree. name_filter: Optional — case-insensitive substring match on filename. Example: 'taxonomy' shows only files with 'taxonomy' in the name. extension_filter: Optional — file extension to filter by (with or without dot). Example: '.csv' or 'csv' or '.parquet' or '.gz' max_results: Max files to return (default 500, max 2000). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a full recursive file listing with sizes, plus a summary with total count, total size, and file type breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
bucketYes
prefixNo
name_filterNo
extension_filterNo
max_resultsNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'list'), returns comprehensive data ('full recursive file listing with sizes, plus a summary'), has performance constraints ('max 2000' results), and includes important operational guidance about the 'env' parameter requiring explicit user input. It doesn't mention rate limits or authentication needs, but covers most critical aspects for this type of tool.

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

Conciseness5/5

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

The description is perfectly structured and concise. It starts with the core purpose, then usage guidelines, followed by detailed parameter explanations, and ends with return value information. Every sentence earns its place - there's no redundancy or wasted words. The use of sections (Args: and Returns) enhances readability without adding unnecessary length.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, recursive operation, filtering capabilities) and the presence of an output schema (which handles return value documentation), this description is complete. It covers purpose, usage scenarios, parameter semantics, behavioral constraints (max results), and operational guidance. The output schema existence means the description doesn't need to detail return format, allowing it to focus on the other critical aspects.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantic explanations for all 6 parameters. Each parameter gets clear purpose explanations, examples ('raw/hem_processing/', 'taxonomy', '.csv'), and important behavioral notes (case-insensitive matching, 'with or without dot' for extensions, default values, and the critical guidance for 'env'). This adds substantial value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific verb ('recursively list ALL files') and resource ('under an S3 bucket/prefix'), distinguishing it from siblings like 'browse_s3' (likely non-recursive) and 'list_s3_buckets' (lists buckets, not files). It explicitly mentions 'single call' to differentiate from paginated approaches.

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

Usage Guidelines5/5

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

The description provides explicit usage scenarios: 'when the user asks to see everything in a bucket or folder end-to-end, wants a full file listing, or needs to find files by name or extension across nested folders.' It also includes a critical exclusion: 'IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.' This gives clear when-to-use and when-not-to-use guidance.

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

pause_dagA

Pause a DAG — prevents future scheduled runs from triggering.

The DAG will still be visible in the Airflow UI but won't execute on its schedule. Already-running DAG runs will continue to completion.

Args: dag_id: The DAG to pause. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns confirmation of the pause action.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the DAG remains visible in the UI, scheduled runs are prevented, and already-running runs continue. It also hints at a confirmation return. However, it lacks details on permissions, error conditions, or rate limits, which are important for a mutation tool.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by behavioral details and parameter explanations. Every sentence adds value, with no wasted words, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's complexity (a mutation with 2 parameters, no annotations, but an output schema), the description is mostly complete. It covers purpose, behavior, and parameters well. However, as a mutation tool, it could benefit from more details on side effects or error handling, though the output schema may cover return values.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It clearly explains both parameters: 'dag_id' as the DAG to pause and 'env' with its allowed values ('dev', 'uat', 'test', 'prod') and a critical usage instruction (asking the user if not specified). This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('pause') and resource ('a DAG'), and distinguishes it from sibling tools like 'unpause_dag' and 'trigger_dag'. It explains that it prevents future scheduled runs while allowing current runs to complete, which is precise and actionable.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool (to pause a DAG and prevent future scheduled runs) and includes an important usage note for the 'env' parameter (asking the user if not specified). However, it does not explicitly state when not to use it or compare it to alternatives like 'unpause_dag', which limits the score.

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

read_repo_fileA

Read the content of a single file from a Git repository.

USE THIS TOOL when the user wants to see source code, config, or content of a specific file. Get the path from browse_repo first.

Args: repo_name: Repository name. path: Full file path (e.g. '/src/main.py'). Use forward slashes. branch: Branch name (default: repo's default branch). project: Project name (default from config).

Returns the raw file content with metadata header.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes
pathYes
branchNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the operation (read-only file access), specifies the return format ('raw file content with metadata header'), and mentions default behaviors for branch and project parameters. However, it lacks details on error handling, rate limits, or authentication needs, which would be beneficial for a tool with no annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, parameter details, and return information. Every sentence adds value without redundancy, and it efficiently covers necessary information in a compact format.

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

Completeness5/5

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

Given the tool's moderate complexity (4 parameters, 2 required), no annotations, and the presence of an output schema (which handles return values), the description is complete. It covers purpose, usage, parameters, and behavioral aspects adequately, leaving no significant gaps for the agent to understand and invoke the tool correctly.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must fully compensate. It provides clear semantics for all 4 parameters: repo_name (repository name), path (full file path with format example), branch (branch name with default behavior), and project (project name with default). The examples and default explanations add significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Read the content of a single file') and resource ('from a Git repository'), distinguishing it from sibling tools like browse_repo (which lists files) and read_s3_file (which reads from S3). It explicitly mentions reading source code, config, or content, making the purpose unambiguous.

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

Usage Guidelines5/5

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 ('when the user wants to see source code, config, or content of a specific file') and includes a prerequisite ('Get the path from browse_repo first'), which helps differentiate it from browsing tools. This directly addresses usage context and alternatives.

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

read_s3_fileA

Read any file from S3 by its full URI and display in chat.

Supports CSV, TXT, JSON, log files, .gz compressed files, and Parquet. Files larger than 5 MB are rejected to avoid crashing the server.

For Parquet files: reads the file and displays the first N rows as a formatted table (default 50 rows). Parquet files are binary so they cannot be tailed or searched — use head_rows to control output.

Args: s3_uri: Full S3 URI (e.g. 's3://bucket-name/path/to/file.csv'). tail_lines: Lines from the end for text files (default 100). -1 for all. search_text: Filter matching lines (text files only). head_rows: Rows to display for Parquet files (default 50). env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns the file contents, optionally filtered and tailed.

ParametersJSON Schema
NameRequiredDescriptionDefault
s3_uriYes
tail_linesNo
search_textNo
head_rowsNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does so effectively. It discloses critical behavioral traits: file size limitations (5 MB rejection), format-specific behaviors (Parquet vs text file handling), default values for parameters, and the important requirement to ask about the 'env' parameter rather than guessing. It doesn't contradict any annotations since none exist.

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

Conciseness4/5

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

The description is well-structured with purpose statement first, then format support and limitations, then Parquet-specific details, followed by parameter explanations. Every sentence earns its place, though the final return statement is somewhat redundant given the tool name and purpose.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, file format variations, size limits) and the presence of an output schema, the description is complete enough. It covers all critical aspects: purpose, limitations, format-specific behaviors, parameter semantics, and usage guidance without needing to explain return values since an output schema exists.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining all 5 parameters in detail. It provides meaning beyond the schema: s3_uri format examples, tail_lines behavior and default, search_text applicability, head_rows purpose for Parquet, and critical guidance about the env parameter. This adds substantial value over the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Read any file from S3') and resource ('by its full URI'), distinguishing it from sibling tools like browse_s3 or get_s3_object_info which don't read file contents. It specifies the verb+resource combination precisely.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool vs alternatives: it mentions file size limits (5 MB), supported formats, and specific handling for Parquet files. It also warns against guessing the 'env' parameter and instructs to ask the user if not specified, creating clear usage boundaries.

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

read_spark_driver_logA

Read the Spark driver log from S3 for an EMR Serverless job run.

DEFAULT: Reads stdout.gz — this is the PRIMARY log containing Python print statements, row counts, file paths, and application errors. This is what you want 90% of the time.

Use log_type='stderr' only when you need Spark framework logs (executor allocation, memory warnings, shuffle errors).

Use read_both=True to get BOTH logs in one call (stdout first, then stderr filtered to ERROR lines only).

How to find application_id and job_run_id:

  • application_id: from the 'initialise' Airflow task log → 'EMR serverless application created: 00gXXX'

  • job_run_id: from the processing Airflow task log → 'EMR serverless job started: 00gXXX'

  • Or use list_emr_applications() then list_job_runs()

Args: application_id: The EMR Serverless application ID (e.g. '00g16i3marao0c0t'). job_run_id: The job run ID (e.g. '00g16i5g2pm56o0v'). log_type: 'stdout' (default, Python app output) or 'stderr' (Spark framework logs). s3_log_uri: Optional full S3 URI to read directly (e.g. 's3://bucket/path/stdout.gz'). process_name: Optional folder name under spark-logs/ (e.g. 'stackadapt_main'). Speeds up log discovery. tail_lines: Number of lines from the end (default 300). Use -1 for all lines. search_text: Optional text to filter log lines (e.g. 'ERROR', 'Exception'). bucket: S3 bucket override (default from config). read_both: If True, read BOTH stdout and stderr in one call. stdout shown first, stderr filtered to ERROR lines.

Returns the log content, optionally filtered and tailed.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYes
job_run_idYes
log_typeNostdout
s3_log_uriNo
process_nameNo
tail_linesNo
search_textNo
bucketNo
read_bothNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by explaining behavioral aspects: default behavior (reads stdout.gz), what each log type contains, how read_both works (stdout first, stderr filtered to ERROR lines), and that it returns filtered/tailed content. It doesn't mention rate limits or authentication needs, but covers core functionality thoroughly.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, defaults, usage guidance, parameter explanations, return statement). While comprehensive, some sentences could be more concise, but every section earns its place by adding valuable information for tool selection and usage.

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

Completeness5/5

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

Given the tool's complexity (10 parameters, 0% schema coverage, no annotations) and the existence of an output schema, the description is remarkably complete. It covers purpose, usage scenarios, parameter semantics, and behavioral details, providing everything needed 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.

Parameters5/5

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

With 0% schema description coverage, the description compensates excellently by explaining all 10 parameters in detail. It clarifies the purpose of each parameter, provides examples, explains defaults, and describes interactions (like how s3_log_uri overrides discovery). This adds substantial value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool reads Spark driver logs from S3 for EMR Serverless job runs. It specifies the resource (Spark driver log), source (S3), and context (EMR Serverless job run), distinguishing it from sibling tools like read_s3_file or get_task_log that handle different resources.

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

Usage Guidelines5/5

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 different log_type options: 'stdout' for primary logs (90% of cases), 'stderr' for Spark framework logs, and read_both=True for combined logs. It also explains how to find required IDs using other tools like list_emr_applications() and list_job_runs().

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

search_confluenceA

Search Confluence pages — the primary tool for finding documentation.

USE THIS TOOL when the user says 'docs', 'documentation', 'wiki', 'runbook', 'find page about X', or any documentation-related question.

Searches both page titles and content, ranked by relevance (same as the web UI).

Args: query: The search text (e.g. 'Audience Engine'). Also supports raw CQL queries (e.g. "type=page AND title~'Walkthrough'"). space_key: Space to search in (default: ACTIVATE from config). ancestor_page_id: Optional parent page ID to scope search within a page tree. max_results: Max results to return (default 50). start: Pagination offset — skip this many results (default 0). Use for page 2, 3, etc.

Returns a list of matching pages with titles, space, last modified, and URLs. Use get_page_content(page_id='...') to read any result.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
space_keyNo
ancestor_page_idNo
max_resultsNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it searches 'both page titles and content, ranked by relevance (same as the web UI)', returns 'a list of matching pages with titles, space, last modified, and URLs', and supports pagination via 'start' parameter. However, it doesn't mention rate limits, authentication needs, or error handling, which keeps it from a perfect score.

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

Conciseness5/5

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

The description is well-structured and front-loaded, starting with the core purpose, followed by usage guidelines, behavioral details, and parameter explanations. Every sentence earns its place, with no redundant or vague language, making it efficient and easy to parse.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no annotations, but with an output schema), the description is complete. It covers purpose, usage, behavior, and parameters thoroughly. Since an output schema exists, it doesn't need to detail return values, and the mention of 'get_page_content' for reading results adds practical completeness.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. It explains each parameter's purpose: 'query' supports both text and CQL, 'space_key' defaults to ACTIVATE, 'ancestor_page_id' scopes search, 'max_results' defaults to 50, and 'start' is for pagination. This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Search Confluence pages — the primary tool for finding documentation.' It specifies the verb ('Search'), resource ('Confluence pages'), and scope ('primary tool for finding documentation'), distinguishing it from siblings like 'get_page_content' or 'get_space_pages' which retrieve specific content rather than searching broadly.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines: 'USE THIS TOOL when the user says 'docs', 'documentation', 'wiki', 'runbook', 'find page about X', or any documentation-related question.' It also mentions an alternative tool ('Use get_page_content(page_id='...') to read any result'), giving clear context for when to use this tool versus others.

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

server_health_checkA

Check connectivity to all configured services.

Tests AWS credentials for each environment (dev/uat/test/prod), MWAA environments, EMR Serverless API, S3 log bucket access per env, S3 general access, Confluence PAT, and Azure DevOps connectivity.

Use this FIRST to verify everything is connected before running other tools. Requires VPN and valid AWS credentials.

Returns a status report for each service.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (tests various services), prerequisites (VPN and AWS credentials), and the return format (status report for each service), though it could add more detail on error handling or rate limits.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by specifics and usage guidelines in a logical flow. Every sentence adds value—detailing services tested, prerequisites, and return format—with no wasted words.

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

Completeness5/5

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

Given the tool's complexity (testing multiple services), no annotations, and an output schema present, the description is complete. It explains the tool's purpose, usage context, prerequisites, and return format, leaving output details to the schema and avoiding redundancy.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on context and behavior without redundant parameter details, earning a baseline score of 4 for zero-parameter tools.

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

Purpose5/5

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

The description explicitly states the tool's purpose with a specific verb ('Check connectivity') and resource ('all configured services'), and it clearly distinguishes itself from sibling tools by focusing on connectivity verification rather than data operations, job management, or content handling.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('Use this FIRST to verify everything is connected before running other tools') and includes prerequisites ('Requires VPN and valid AWS credentials'), which helps differentiate it from alternatives that assume connectivity.

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

stop_emr_applicationA

Stop an EMR Serverless application. If jobs are running, cancels them first.

Smart flow:

  1. Tries to stop the application directly.

  2. If it fails because jobs are still running — automatically finds and cancels ALL running/pending jobs, then retries the stop.

  3. Reports every step taken so the user knows exactly what happened.

Use force=True to skip the initial stop attempt and go straight to cancelling all jobs first (useful when you know jobs are running).

Args: application_id: The EMR Serverless application ID. force: If True, cancel all running jobs first without trying to stop. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns a step-by-step report of what was done.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_idYes
forceNo
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It explains the multi-step flow (stop attempt → job cancellation → retry), discloses that it cancels ALL running/pending jobs, specifies that it reports every step taken, and explains the force parameter's bypass behavior. The only minor gap is lack of explicit mention about permissions or rate limits, but overall it provides rich behavioral context.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, smart flow, parameter guidance, return value) and every sentence earns its place. It's appropriately sized for a complex tool with multi-step behavior. The only minor improvement would be slightly tighter formatting, but it's highly efficient overall.

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

Completeness5/5

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

Given this is a complex mutation tool with no annotations, 3 parameters, and an output schema, the description provides excellent completeness. It explains the multi-step behavior, parameter semantics, usage guidelines, and explicitly states what the tool returns ('step-by-step report'). The presence of an output schema means the description doesn't need to detail return format, making this description complete for its context.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantic explanations for all three parameters. It explains what 'application_id' represents, when and why to use 'force=True', and provides critical guidance about the 'env' parameter (valid values and the requirement to ask users rather than guessing defaults). This adds substantial value beyond the bare schema.

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

Purpose5/5

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

The description starts with a clear, specific verb+resource statement: 'Stop an EMR Serverless application.' It distinguishes from siblings like 'cancel_job_run' and 'delete_emr_application' by focusing on stopping (not deleting) applications and handling job cancellation as part of the process. The purpose is 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.

Usage Guidelines5/5

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 vs alternatives through the 'Smart flow' section and the 'force' parameter explanation. It tells users to use 'force=True' when they know jobs are running, and importantly specifies when NOT to guess defaults for the 'env' parameter, requiring explicit user input. This gives clear operational context.

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

trigger_dagA

Manually trigger a DAG run.

Args: dag_id: The DAG to trigger. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified. conf: Optional JSON string of DAG run configuration.

Returns confirmation with the new run ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
envNo
confNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool triggers a DAG run and returns a confirmation with a run ID, but lacks details on permissions, side effects, rate limits, or error handling. For a mutation tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement followed by parameter explanations in a bullet-like format. Every sentence adds value, and the IMPORTANT note is appropriately emphasized without unnecessary verbosity.

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

Completeness3/5

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

Given the tool's complexity (a mutation with 3 parameters), no annotations, and an output schema present, the description is adequate but incomplete. It covers the basics of what the tool does and parameter semantics, but lacks behavioral context like permissions or side effects, which are crucial for safe usage.

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

Parameters4/5

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

The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains 'dag_id' as 'The DAG to trigger', 'env' with allowed values and critical usage guidance, and 'conf' as an optional JSON string. This compensates well for the schema's lack of documentation, though it doesn't fully detail all parameter nuances.

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

Purpose4/5

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

The description clearly states the action ('Manually trigger a DAG run') and resource ('a DAG'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'pause_dag' or 'unpause_dag' beyond the triggering action, which is why it doesn't reach a score of 5.

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

Usage Guidelines4/5

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

The description provides clear context for the 'env' parameter with explicit guidance ('IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified'), which helps guide usage. However, it lacks explicit alternatives or when-not-to-use guidance compared to siblings like 'pause_dag', preventing 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.

unpause_dagA

Unpause a DAG — allows scheduled runs to trigger again.

Args: dag_id: The DAG to unpause. env: Target environment — 'dev', 'uat', 'test', or 'prod'. IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified.

Returns confirmation of the unpause action.

ParametersJSON Schema
NameRequiredDescriptionDefault
dag_idYes
envNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a state-changing operation (unpausing affects DAG scheduling) and specifies the return value ('confirmation of the unpause action'), though it doesn't detail error conditions or side effects like impact on existing runs.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, parameter explanations in a labeled 'Args' section, and a returns statement. Every sentence adds value, with no wasted words, and important warnings are front-loaded with 'IMPORTANT'.

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

Completeness5/5

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

Given the tool's moderate complexity (state change with environment targeting), no annotations, and the presence of an output schema (implied by 'Returns confirmation'), the description is complete. It covers purpose, parameters with constraints, usage warnings, and return value, leaving no gaps for the agent to operate effectively.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides essential semantic context for both parameters: 'dag_id' is explained as 'The DAG to unpause', and 'env' includes detailed constraints ('Target environment — 'dev', 'uat', 'test', or 'prod'') and critical usage warnings, adding significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('unpause a DAG') and the effect ('allows scheduled runs to trigger again'), which distinguishes it from sibling tools like 'pause_dag'. It uses precise verb+resource language without being tautological.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool (to resume scheduled DAG runs) and includes critical usage instructions for the 'env' parameter ('IMPORTANT: Do NOT guess or default. Ask the user which environment if not specified'), which helps differentiate it from alternatives and prevents misuse.

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

update_confluence_pageA

Update an existing Confluence page's content.

Args: page_id: The page ID to update. body: New page content (HTML or plain text). title: Optional new title. If omitted, keeps the existing title. append: If True, append to existing content instead of replacing.

Returns confirmation of the update.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
bodyYes
titleNo
appendNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions the tool updates content and can append, but lacks critical behavioral details: required permissions, whether updates are reversible, rate limits, or what 'confirmation of the update' entails. For a mutation tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement followed by bullet-like parameter explanations. Every sentence adds value: the first states the action, and the subsequent lines clarify parameter roles and behaviors. No wasted words, and information is front-loaded.

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

Completeness3/5

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

Given the tool's complexity (mutation with 4 parameters), no annotations, and an output schema present, the description is partially complete. It covers parameters well but lacks behavioral context (permissions, side effects). The output schema handles return values, so the description's focus on parameters is appropriate, but more behavioral disclosure would improve completeness.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all 4 parameters: 'page_id' identifies the target, 'body' specifies new content format, 'title' explains optional behavior, and 'append' defines a key behavioral flag. This adds substantial value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Update an existing Confluence page's content'), identifies the resource ('Confluence page'), and distinguishes it from sibling tools like 'create_confluence_page' (creation vs. update). 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.

Usage Guidelines3/5

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

The description implies usage context through the parameter descriptions (e.g., 'If omitted, keeps the existing title'), but does not explicitly state when to use this tool versus alternatives like 'create_confluence_page' or 'get_page_content'. 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.

Tool Schema Changelog

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

  1. 44 tool updatesv1.2.0
    • First observedbrowse_repo
    • First observedbrowse_repo_recursive
    • First observedbrowse_s3
    • First observedbrowse_s3_logs
    • First observedcancel_job_run
    • First observedclear_task_instance
    • First observedcreate_confluence_page
    • First observeddag_analytics
    • First observeddelete_emr_application
    • First observeddiagnose_dag_failure
    • First observedget_backlog
    • First observedget_child_pages
    • First observedget_current_sprint
    • First observedget_dag_run_details
    • First observedget_dag_source
    • First observedget_dags_status_dashboard
    • First observedget_emr_cost_summary
    • First observedget_job_run_details
    • First observedget_page_attachments
    • First observedget_page_comments
    • First observedget_page_content
    • First observedget_page_labels
    • First observedget_s3_object_info
    • First observedget_space_pages
    • First observedget_sprint_work_items
    • First observedget_task_log
    • First observedget_work_item_details
    • First observedlist_dag_runs
    • First observedlist_dags
    • First observedlist_emr_applications
    • First observedlist_job_runs
    • First observedlist_repos
    • First observedlist_s3_buckets
    • First observedlist_s3_recursive
    • First observedpause_dag
    • First observedread_repo_file
    • First observedread_s3_file
    • First observedread_spark_driver_log
    • First observedsearch_confluence
    • First observedserver_health_check
    • First observedstop_emr_application
    • First observedtrigger_dag
    • First observedunpause_dag
    • First observedupdate_confluence_page

TDQS

A3.9/5.0

Scored across 44 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some overlap that could cause confusion. For example, browse_repo and browse_repo_recursive both explore Git repositories, with the latter being a more comprehensive version, which might lead to misselection if an agent doesn't carefully read descriptions. Similarly, browse_s3 and browse_s3_logs both browse S3, but the latter is specialized for logs, creating a potential boundary issue. However, the majority of tools, like those for DAG management, EMR, Confluence, and Azure DevOps, are clearly differentiated.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as browse_repo, cancel_job_run, create_confluence_page, and get_dag_run_details. There are no deviations in naming conventions (e.g., no mixing of camelCase or other styles), making the set predictable and easy to understand. This consistency aids agents in quickly identifying tool purposes.

Tool Count2/5

With 44 tools, the count is excessive for a single server, even given its broad scope covering Git, S3, EMR, Airflow DAGs, Confluence, and Azure DevOps. This many tools can overwhelm agents, increasing cognitive load and the risk of misselection. A more modular approach with separate servers for each domain (e.g., one for DAGs, one for Confluence) would be more appropriate, as the current set feels heavy and unfocused.

Completeness5/5

The tool set provides comprehensive coverage across its integrated domains, with no obvious gaps. For Git, it includes browsing and reading files; for S3, browsing, reading, and listing; for EMR, full lifecycle management (create, list, stop, cancel, delete, cost analysis); for Airflow DAGs, CRUD operations (trigger, pause, unpause), monitoring, and diagnostics; for Confluence, CRUD pages and search; and for Azure DevOps, repository and sprint management. Each domain is well-covered, enabling agents to handle end-to-end workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Google Cloud Platform services for log analysis and root cause investigation. Provides tools to query Cloud Logging, detect error patterns, and perform real-time log streaming across multiple GCP projects.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to analyze Amazon EKS node logs collected by the EKS Log Collector script. It provides tools and troubleshooting workflows for diagnosing issues with VPC CNI, kubelet, DNS, and general node connectivity.
    -