deepset-mcp
OfficialThis server lets AI agents manage and operate the deepset Haystack Enterprise Platform—building, validating, debugging, deploying, and searching with pipelines, indexes, and related resources.
Manage workspaces: list, fetch, and create workspaces.
Manage pipelines: create, list, fetch, version, validate, deploy, patch, restore, and debug pipeline configurations.
Manage indexes: create, list, fetch, validate, update, and deploy indexes.
Search with pipelines: run queries against deployed pipelines, with optional filters and custom params.
Inspect run history: list search history and pipeline traces, retrieve trace spans, span tags, and logs for debugging.
Work with Haystack components: search and get component definitions, run individual components, list component families, and manage custom components and their installation logs.
Use templates: search, list, and fetch pipeline/indexing templates.
Explore platform resources: list and get available models, list and get secrets.
Get help: search official deepset documentation and load bundled skill guides for custom component/tool development.
Manipulate stored results: use object-store tools to fetch, slice, grep, sed, and jq-query objects returned by other tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@deepset-mcpCreate a new pipeline for document search"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
deepset-mcp
The official MCP server and Python SDK for the Haystack Enterprise Platform
deepset-mcp enables AI agents to build and debug pipelines on the Haystack Enterprise Platform through 45+ specialized tools. It also provides a Python SDK for programmatic access to many platform resources.
Documentation
Related MCP server: mcp-dagster
Quick Links
Development
Installation
Install the project using uv:
# Install uv first
pipx install uv
# Install project with all dependencies
uv sync --locked --all-extras --all-groupsLocal Development
If you want to test your changes locally, follow these steps:
Add a script run-deepset-mcp.sh that uses the binary from the project's virtual env
#!/usr/bin/env bash
# Wrapper to run the local deepset-mcp server for Cursor MCP.
# Use this as command so it doesn't depend on uv or PATH.
set -e
cd "$(dirname "$0")"
exec .venv/bin/deepset-mcpUse it this way in Cursor:
"deepset": {
"command": "/bin/bash",
"args": ["/Users/*****/****/deepset-mcp-server/run-deepset-mcp.sh"],
"cwd": "/Users/*****/****/deepset-mcp-server",
"env": {
"DEEPSET_WORKSPACE": "WORKSPACE",
"DEEPSET_API_KEY": "API_KEY"
}
}Note: If you change the codebase, make sure to restart the MCP server.
Code Quality & Testing
Run code quality checks and tests using the Makefile:
# Install dependencies
make install
# Code quality
make lint # Run ruff linting
make format # Format code with ruff
make types # Run mypy type checking
# Testing
make test # Run unit tests (default)
make test-unit # Run unit tests only
make test-integration # Run integration tests
make test-all # Run all tests
# Clean up
make clean # Remove cache filesDocumentation
Documentation is built using MkDocs with the Material theme:
Configuration:
mkdocs.ymlContent:
docs/directoryAuto-generated API docs via mkdocstrings
Deployed via GitHub Pages (automated via GitHub Actions on push to main branch)
Available Tools
109 toolsactivate_deploymentB
Re-activates a deployment's current active revision, marking it as desired to be served.
Use this to bring a deactivated deployment back online without pushing a new revision. :param deployment_id: ID of the deployment. :returns: The updated deployment or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the effective side effect ('marking it as desired to be served') and that it avoids a new revision, plus the return shape, but is silent on permissions/authorization, idempotency, and reversibility for what is a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and usage are front-loaded in the first two sentences. The remainder is repetitive object-store boilerplate ('The output is automatically stored...', 'Use the returned object ID...') that restates the same idea multiple times and dilutes the signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers purpose, usage, and return handling, but with no annotations and no output schema it should do more: it omits auth requirements and, importantly, fails to disambiguate from the sibling 'activate_deployment_revision', which is the biggest risk for this 1-param mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single required parameter. ':param deployment_id: ID of the deployment.' merely restates the schema title ('Deployment Id') and adds no format, identifier source, or lookup guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Re-activates a deployment's current active revision') and even scopes it as the current active revision without pushing a new one. However, it never acknowledges or distinguishes itself from the near-identical sibling 'activate_deployment_revision', which an agent selecting between the two would need.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'to bring a deactivated deployment back online without pushing a new revision', which contrasts with a revision-pushing flow. No explicit when-not or named alternatives (e.g., deactivate_deployment, update_deployment) are offered, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
activate_deployment_revisionB
Activates a revision, marking it as the deployment's desired served revision. :param deployment_id: ID of the deployment. :param revision_id: ID of the revision to activate. :returns: The updated deployment or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| revision_id | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return path (object ID like @obj_123 and object-store interaction), but for a mutation it omits key traits: whether activating replaces the currently served revision, required permissions, and reversibility/downtime implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the docstring params are compact, but the trailing block about the object store is repetitive ('object ID' repeated across three sentences) and bloats the definition with shared boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param mutation with no annotations and no output schema, the definition covers the return/object-store behavior but leaves important gaps: effect on the currently served revision, auth requirements, and failure semantics. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It identifies both params ('ID of the deployment', 'ID of the revision to activate'), but these are near-tautological restatements of the names and add no format, constraint, or lookup detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (activates) and resource (revision) plus a concrete effect: 'marking it as the deployment's desired served revision.' This distinguishes it from the sibling activate_deployment (which targets a deployment, not a revision), though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no reference to alternatives such as activate_deployment or create_deployment_revision. The agent must infer the calling context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_deployment_tagB
Adds a tag to a deployment. Each deployment supports at most three tags. :param deployment_id: ID of the deployment. :param tag_name: Tag to add (1-50 characters; letters, digits, spaces, underscores, hyphens). :returns: The deployment's full tag list after the add, or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_name | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully states the maximum tag count (three), the tag_name validation rules, and the return shape ('full tag list after the add, or error message'). However, it omits permissions/auth requirements, idempotency behavior for duplicate tags, and reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is front-loaded reasonably well: purpose, limit, parameter notes, and return value. However, the trailing paragraphs about automatic object storage, preview object IDs, and object store tools are generic boilerplate that does not clearly earn its place for a simple tag-adding tool and adds noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with no annotations or output schema, the description is fairly complete: it states what the tool does, the input constraints, the return value, and a deployment-level limit. It still lacks auth, error-condition, and duplicate-tag behavior, but covers the essentials an agent needs to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does. It explains that deployment_id is the ID of the deployment and gives concrete character and length constraints for tag_name. It could go further by indicating where deployment_id comes from, but it meaningfully documents both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Adds a tag to a deployment.' It distinguishes the action from sibling tools like delete_deployment_tag and list_deployment_tags implicitly through the verb 'Adds.' However, it does not explicitly name or contrast against those siblings, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no alternatives, and no exclusions. The hard constraint of at most three tags is useful context but is a limitation, not usage direction. An agent is left to infer that this tool should be used whenever a tag needs to be added.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_test_casesA
Adds test cases to the end of a Dataset. Replays nothing and costs nothing.
Each test case is either a recorded Session (session_id) or inputs, never both. A
Session needs pipeline_name. A Session the Dataset already holds is skipped. To reuse test
cases from another Dataset use copy_test_cases.
:param dataset_id: The Dataset's id.
:param test_cases: The test cases to add, in order.
:param pipeline_name: The pipeline the Sessions were recorded on; required when a test case has a session_id.
:returns: The Dataset with all its test cases, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ||
| test_cases | Yes | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load. It does disclose genuinely useful behavior an agent could not otherwise know: nothing is replayed, nothing is billed, and a Session the Dataset already holds is silently skipped rather than duplicated. It does not address permissions, whether duplicates in the input list are also skipped, or what the 'error message' return means for partial adds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening two sentences front-load the action and the cost/side-effect profile, which is exactly what an agent needs first. The trailing Sphinx-style :param/:returns block partially duplicates the nested schema descriptions, keeping it short of ideal, but nothing is padded or off-topic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the behavior profile, the input-shape constraint, the conditional parameter, and the return value ('The Dataset with all its test cases, or an error message'). Only the failure/partial-success conduct and permission requirements are left implicit, which is a minor gap at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is reported as 0%, and the description supplies the missing meaning: test_cases are appended in order, and pipeline_name is conditionally required only when a test case carries a session_id. That conditional dependency, plus the mutual exclusivity of session_id/inputs, is real semantics the top-level schema does not express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Adds test cases to the end of a Dataset', plus a distinguishing clause that it 'Replays nothing and costs nothing', which separates it from replay_session. It also names the sibling copy_test_cases as the route for cross-Dataset reuse, so an agent can pick this tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative ('To reuse test cases from another Dataset use copy_test_cases') and an explicit exclusion rule (a test case is session_id or inputs, never both; pipeline_name is required when session_id is used). What it lacks is routing against the adjacent mutation siblings like update_test_case or remove_test_cases, which an agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_test_casesA
Copies test cases from any Dataset of the workspace to the end of this one.
Each copy keeps the Session or inputs, name, expected data and scripts, and gets its own id, so
editing a copy leaves the original untouched. Find ids with get_dataset.
:param dataset_id: The Dataset to copy into.
:param test_case_ids: The test cases to copy, in order.
:returns: The Dataset with all its test cases, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ||
| test_case_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that the copy preserves Session/inputs, name, expected data and scripts, that each copy receives a new id so editing the copy leaves the original untouched, and that cases are appended to the end of the target dataset. It omits any mention of permissions, quota/limits, or duplicate handling, which keeps it short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then behavioral detail, then the param/return block. The Sphinx-style ':param:' lines are mildly redundant with the prose but every sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Two required params, no output schema, no annotations – and the description supplies the mutation semantics, id-generation/independence guarantee, append behavior, an id-discovery pointer, and the return value ('The Dataset with all its test cases, or an error message'). Only missing pieces are failure conditions and permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: dataset_id is defined as the target ('The Dataset to copy into') and test_case_ids as an ordered list ('in order'), which conveys the ordering semantics absent from the schema. It does not clarify that ids may come from any other dataset's cases, a minor residual gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Copies test cases') plus the directional scope ('from any Dataset of the workspace to the end of this one'), which implicitly separates it from add_test_cases / remove_test_cases. It does not name a sibling explicitly, so it falls short of the 5 bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete prerequisite – 'Find ids with ``get_dataset``' – which is genuinely useful. However it never says when to prefer this over add_test_cases (which presumably creates new cases in place) or remove_test_cases, so the choice among siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_datasetA
Creates a Dataset, optionally with its first test cases. Replays nothing and costs nothing.
Each test case is either a recorded Session (session_id, find them with list_sessions)
or inputs to send to the pipeline, never both. A Session needs pipeline_name, the
pipeline it was recorded on. A Session sent twice becomes one test case. Add more later with
add_test_cases. Then run it with create_experiment using the returned dataset_id.
:param name: What the Dataset is called.
:param pipeline_name: The pipeline the Sessions were recorded on; required when a test case has a session_id.
:param test_cases: The test cases to start with; none by default.
:returns: The created Dataset, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| test_cases | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does well: 'Replays nothing and costs nothing' rules out execution side effects and billing, and 'A Session sent twice becomes one test case' discloses dedup behavior. Gaps remain around name uniqueness/validation and what happens on partial failure, but the core behavioral profile is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and cost/replay disclaimer, then the input rules, then next steps — a good order. The trailing ':param name:'/' :param test_cases:' lines restate what the prose already conveyed, which is mild duplication but not damaging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, non-annotated mutation tool with no output schema, the description covers what is created, the exclusivity rule, dedup behavior, cost, the return value, and the follow-up call. Only edge cases (name collisions, validation errors) are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is 0% (no descriptions on name/test_cases/pipeline_name), so the description must compensate, and it does: it defines name, states pipeline_name is required when a test case carries a session_id, and defaults test_cases to none. It also clarifies the session_id-vs-inputs exclusivity and expected semantics that the schema only partially documents in $defs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource plus scope: 'Creates a Dataset, optionally with its first test cases.' It also implicitly separates itself from siblings by pointing to add_test_cases for later additions and create_experiment for running, so an agent can distinguish it from update_dataset/get_dataset/add_test_cases without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: find Sessions with list_sessions, use add_test_cases to extend an existing Dataset, and create_experiment with the returned dataset_id to run it. It also states the mutually exclusive input rule (session_id or inputs, never both), which is the main selection decision the agent has to make.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_deploymentA
Creates a new deployment (AI Gateway), optionally linked to a pipeline.
A deployment created without an origin_pipeline_id has no active revision until you call
create_deployment_revision and activate_deployment_revision. Default service sizing follows
Development unless explicit sizing fields are provided.
:param name: Name of the deployment.
:param description: Optional description.
:param group_label: Optional label used to group related deployments.
:param origin_pipeline_id: ID of the platform pipeline to link, if any.
:param deployment_mode: Execution mode, "MANAGED" or "SERVERLESS" (default "MANAGED").
:param service_level: Sizing tier, "PRODUCTION", "DEVELOPMENT", or "CUSTOM" (default "DEVELOPMENT").
:param idle_timeout_in_seconds: Seconds of inactivity before scaling down.
:param min_query_replica_count: Minimum number of query replicas.
:param max_query_replica_count: Maximum number of query replicas.
:param max_index_replica_count: Maximum number of index replicas.
:param cpu_request: Requested CPU per replica.
:param cpu_limit: CPU limit per replica.
:param memory_request: Requested memory per replica.
:param memory_limit: Memory limit per replica.
:param gpu_limit_gigabyte: GPU memory limit in gigabytes.
:returns: The created deployment or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
create_deployment(data={'key': 'value'}, threshold=10)
# Call with references
create_deployment(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
create_deployment(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cpu_limit | No | ||
| cpu_request | No | ||
| description | No | ||
| group_label | No | ||
| memory_limit | No | ||
| service_level | No | DEVELOPMENT | |
| memory_request | No | ||
| deployment_mode | No | MANAGED | |
| gpu_limit_gigabyte | No | ||
| origin_pipeline_id | No | ||
| idle_timeout_in_seconds | No | ||
| max_index_replica_count | No | ||
| max_query_replica_count | No | ||
| min_query_replica_count | No |
TDQS
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 usefully discloses default behavior (sizing defaults to DEVELOPMENT unless explicit sizing fields are given), the post-creation state (no active revision without a pipeline), and that output is auto-stored and returned as an object ID. It says nothing about permissions/auth requirements, provisioning side effects, or costs, which are meaningful gaps for a create-a-resource operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the critical 'no active revision' caveat are front-loaded, and the param reference is justified by 15 undocumented params. However, the Examples block is generic boilerplate that references 'data' and 'threshold' – parameters that do not exist on create_deployment – which adds noise and potential confusion rather than value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation tool with no annotations and no output schema, the description is fairly complete: it covers parameter meaning, defaults, the revision workflow dependency, and the return/preview behavior (object ID usable with object store tools). It omits auth/permission prerequisites and any description of the created deployment's fields, but an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: a full :param list documents all 15 parameters with semantics and defaults (e.g., idle_timeout_in_seconds as 'Seconds of inactivity before scaling down', the MANAGED/SERVERLESS and PRODUCTION/DEVELOPMENT/CUSTOM enums, and the @obj_id reference syntax). Some entries are near-tautological (e.g., 'Name of the deployment', 'Maximum number of index replicas'), keeping it out of the top score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ('Creates a new deployment (AI Gateway)') plus the scoping condition that it is optionally linked to a pipeline. An agent can distinguish this from siblings like create_deployment_revision, update_deployment, and deploy_pipeline. It stops short of explicitly naming which sibling to use in which situation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the key branch: without an origin_pipeline_id the deployment has no active revision until create_deployment_revision and activate_deployment_revision are called, which effectively routes the agent to the follow-up tools. It lacks explicit exclusions or guidance on when not to use create_deployment, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_deployment_revisionA
Pushes a new revision onto a deployment, e.g. from a platform pipeline version.
Creating a revision does not serve it automatically; call activate_deployment_revision
to make it the deployment's served revision.
:param deployment_id: ID of the deployment.
:param comment: Comment describing the revision.
:param config_yaml: Inline pipeline configuration YAML, for an externally pushed revision.
:param source_version_id: ID of the source pipeline version, for a platform pipeline revision.
:param source_type: Where the revision's pipeline configuration comes from, "PLATFORM_PIPELINE"
(default) or "EXTERNAL_PIPELINE".
:returns: The newly created revision or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
create_deployment_revision(data={'key': 'value'}, threshold=10)
# Call with references
create_deployment_revision(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
create_deployment_revision(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | ||
| config_yaml | No | ||
| source_type | No | PLATFORM_PIPELINE | |
| deployment_id | Yes | ||
| source_version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that creation is non-serving and requires a separate activation step, and explains that the result is auto-stored and returned as a preview with an object ID. It omits permission/auth requirements, reversibility, and error conditions beyond a generic "or error message".
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and parameter notes are front-loaded and useful, but the description is padded with leaked Sphinx directives and a generic template block whose examples use parameters that do not exist on this tool (data, threshold). Those examples are actively misleading and do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no annotations and no output schema, the description covers purpose, the activation prerequisite, per-parameter meaning, the object-reference convention, and the return shape. Missing pieces are edge behavior such as auth requirements and validation failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all five parameters including the source_type enum values and the situational role of config_yaml vs source_version_id. It also explains the @obj_id / @obj_id.path.to.value reference syntax, which the schema never mentions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Pushes a new revision onto a deployment") and immediately scopes it against the sibling that serves revisions. An agent can distinguish it from activate_deployment_revision without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the follow-up tool and the condition that selects it: creating a revision does not serve it, call activate_deployment_revision to serve it. No exclusions are given for when *not* to create a revision, so it stops short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_evaluatorA
Creates an Evaluator from Python source and adds it to the workspace. Judged Metrics cost money when run.
Always validate new code first: run it on a real Session with try_evaluator and fix what it
reports before saving. python_code is the Evaluation Function; its @metrics declaration
names the Metrics it reports, and hub-api rejects code whose declaration it cannot read. Start
from list_evaluator_templates rather than from scratch. The name must be unused in the
workspace. The Evaluator scores nothing until a Metric Group runs it: add it to existing groups
with metric_group_ids (each at the end of its set), to a new group with
new_metric_group_name, or later with update_metric_group. Change it later with
update_evaluator.
:param name: The Evaluator's name; must not exist in the workspace yet.
:param python_code: The Evaluation Function's Python source.
:param metric_group_ids: Existing Metric Groups to add it to.
:param new_metric_group_name: Also creates a Metric Group of this name holding only this Evaluator.
:returns: The created Evaluator, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| python_code | Yes | ||
| metric_group_ids | No | ||
| new_metric_group_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the whole burden and does it well: it warns that Judged Metrics cost money when run, that hub-api rejects code whose @metrics declaration cannot be parsed, that the name must be unused in the workspace, that the Evaluator scores nothing until a Metric Group runs it, and that new_metric_group_name creates an additional object as a side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Behavioral warnings and prerequisites are front-loaded in the first sentences, which is good structure. It loses a point because the trailing :param/:returns block partially restates what the prose already explained (notably python_code and the Metric Group options), adding length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with a 4-parameter schema, no annotations, and no output schema, the description covers prerequisites, side effects, failure modes, cost implications, and even the return value ('The created Evaluator, or an error message'). Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare titles only), yet the description documents all four parameters with meaning beyond the schema: name must not already exist, python_code is the Evaluation Function whose @metrics declaration is mandatory, metric_group_ids are existing groups with insertion at the end of each set, and new_metric_group_name creates a group containing only this Evaluator. This fully compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource and scope: 'Creates an Evaluator from Python source and adds it to the workspace.' It then names the sibling tools it is not (try_evaluator for validation, list_evaluator_templates for scaffolding, update_evaluator for changes), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: validate first with try_evaluator, start from list_evaluator_templates rather than from scratch, and use update_evaluator for later changes. It also explains the two mutually available paths for grouping (metric_group_ids vs new_metric_group_name) and the later alternative (update_metric_group).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_experimentA
Creates an Experiment that compares a candidate pipeline version against a baseline.
Both sides are scored by the same Metric Group over the test cases of one Dataset. The baseline
is either another pipeline version (give baseline_pipeline_name and
baseline_pipeline_version_id together) or Recorded (leave both unset): a Recorded baseline
reuses the Sessions each test case recorded, with nothing replayed. The candidate is always a
pipeline version that will be replayed on each test case.
Creating costs money: it replays the pipeline on the customer's models, and then every Session
is judged by the Metric Group's Evaluators, which are billed when they use an LLM. Call it first
with preview=True: that starts nothing and returns, per side, how many Sessions are
reused_sessions and how many replays_needed, plus cells (Sessions times Evaluators)
against max_cells. Show that to the user and get a yes before creating for real.
sessions_per_test_case sets how many Sessions each side scores per test case
(1..50); existing Sessions on that version are reused and only the shortfall is replayed.
Set reuse_sessions=False to replay every Session instead of reusing any, for example after a
change outside the pipeline's configuration such as a secret; it costs more replays, so preview
it. A Recorded baseline still scores the Dataset's own Sessions. Find
ids with list_metric_groups (metric groups) and list_experiments (an existing
Experiment's dataset_id). Read the running or finished Experiment with
get_experiment_results; follow its progress with get_experiment.
:param name: Human-readable name for the Experiment.
:param dataset_id: The Dataset's id (the UI's Dataset dropdown).
:param metric_group_id: The Metric Group id to score both sides with.
:param candidate_pipeline_name: Name of the candidate pipeline.
:param candidate_pipeline_version_id: The candidate pipeline version to replay.
:param baseline_pipeline_name: Baseline pipeline name; omit for a Recorded baseline.
:param baseline_pipeline_version_id: Baseline version id; required when baseline_pipeline_name is given.
:param sessions_per_test_case: Repetitions per test case (1..50, default 1).
:param replay_mode: FIRST_USER_MESSAGE replays the first turn only; ALL_USER_MESSAGES replays every turn.
:param reuse_sessions: False replays every Session each side scores and reuses none (default True).
:param preview: True returns the plan (what would be reused and replayed) and creates nothing.
:returns: The created Experiment, or with preview the plan, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| preview | No | ||
| dataset_id | Yes | ||
| replay_mode | No | FIRST_USER_MESSAGE | |
| reuse_sessions | No | ||
| metric_group_id | Yes | ||
| baseline_pipeline_name | No | ||
| sessions_per_test_case | No | ||
| candidate_pipeline_name | Yes | ||
| baseline_pipeline_version_id | No | ||
| candidate_pipeline_version_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses that creating costs money (pipeline replays on customer models plus billed LLM evaluators), what preview returns (reused_sessions, replays_needed, cells vs max_cells), and that preview starts nothing. It also explains the side effects of reuse_sessions=False and that a Recorded baseline reuses existing Sessions with nothing replayed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the cost warning and the preview-first rule, which is the most important thing an agent must know. It is long but dense; the only waste is that preview, reuse_sessions, and sessions_per_test_case are each explained twice, once in prose and again in the parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything needed for an 11-parameter, high-cost mutation with no annotations: cost model, preview protocol, baseline pairing rules, session reuse semantics, and a :returns: line standing in for the absent output schema. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must supply meaning, and the :param: block does — baseline_pipeline_name/version_id must be given together or omitted for a Recorded baseline, sessions_per_test_case is 1..50 default 1, replay_mode enum values are interpreted, reuse_sessions and preview defaults are stated. A few entries (name, dataset_id) merely restate the parameter, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — creates an Experiment comparing a candidate pipeline version against a baseline — and immediately explains the two sides, the dataset/metric-group scoping, and the two baseline flavors. An agent can distinguish it from get_experiment, list_experiments, and start_experiment_run without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit workflow guidance: call first with preview=True, show the plan to the user and get a yes before creating for real. It also routes id discovery to list_metric_groups and list_experiments, and points to get_experiment_results / get_experiment for reading and following the run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_indexC
Creates a new index within your Haystack Enterprise Platform workspace. :param index_name: Unique name of the index to create. :param yaml_configuration: YAML configuration to use for the index. :param description: Description of the index to create. :returns: A message and the created index, or an error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
create_index(data={'key': 'value'}, threshold=10)
# Call with references
create_index(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
create_index(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| index_name | Yes | ||
| description | No | ||
| yaml_configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose useful behavior: the return is 'a message and the created index, or an error message', the output is auto-stored, and an object ID is returned for chaining. It says nothing about permissions, uniqueness enforcement on index_name, or side effects, which leaves real 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body is bloated with Sphinx docstring artifacts (:param:, :returns:), generic boilerplate about the object store repeated twice, and example calls whose parameter names (data, threshold) do not match this tool's schema. Much of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does cover the return shape and object-store mechanics, which is the minimum needed to use the result. It omits duplicate-name behavior, required permissions, and what the YAML configuration must contain, so an agent could still call it incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It names all three parameters and adds genuinely useful object-reference syntax ('@obj_id.path.to.value') not present in the schema, but the per-parameter notes are thin (yaml_configuration is not explained beyond 'YAML configuration to use') and the code examples reference non-existent parameters (data, threshold), which is actively misleading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb+resource ('Creates a new index') scoped to the Haystack Enterprise Platform workspace, which is enough to distinguish it from unrelated siblings like create_pipeline or create_deployment. It does not explicitly contrast itself with the closest siblings (update_index, validate_index, deploy_index), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use create_index versus update_index, validate_index, or deploy_index, nor any stated prerequisites. The only routing advice concerns post-call object handling ('use the object store tools'), not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_metric_groupA
Creates a Metric Group: a named, ordered set of Evaluators to score Sessions of any pipeline with.
The group names Evaluators, not versions, so each run judges with their newest versions. Running
it costs money if an Evaluator is judged. Find Evaluator ids with list_evaluators.
weights say how much each Metric counts toward the group's Composite, as
{evaluator_id, metric_key, weight} entries. weight is a number above 0 and relative: weights
are divided by their sum, so 2, 1, 1 count as 50%, 25%, 25%. Each Evaluator must be in the group,
each metric_key must be one its newest version declares with a Normalized mean (a Score
with both range and better, or a Label with a scale), and no pair may repeat; otherwise
hub-api rejects the request. Without weights a group has no Composite. A stored weight with
usable false and an unusable_reason means a newer Evaluator version dropped the Metric or
its normalization: it is kept but no longer counts in new runs.
:param name: The Metric Group's name.
:param evaluator_ids: The Evaluators to run, in the order results show them (at least one).
:param weights: Optional Metric weights, as described above.
:returns: The created Metric Group, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| weights | No | ||
| evaluator_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full load and does so well: it discloses cost implications, that evaluators are referenced by name rather than version so each run uses the newest version, the relative-normalization math for weights, the exact validation rules hub-api enforces (Normalized mean, no duplicate pairs), and the degraded `usable: false` / `unusable_reason` state that is retained but no longer counted. These are non-obvious failure and lifecycle behaviors an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose before the caveats, and every paragraph maps to a decision the caller must make. It is dense and long-ish for a three-parameter tool, and the weight-normalization example is partly redundant with the schema's own wording, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations and no output schema, yet the description covers prerequisites, cost, validation rejection behavior, version-drift semantics, and even a returns line ('The created Metric Group, or an error message'). An agent has enough to call this correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the top level, so the description must compensate, and it does: `evaluator_ids` is not just a list but an ordered list controlling result display order with a minimum of one, and `weights` is explained structurally and semantically. The business rules that no duplicate evaluator/metric pair may appear and that weights divide by their sum add meaning well beyond the raw types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and goes further by defining the resource: 'a named, ordered set of Evaluators to score Sessions of any pipeline with.' That is far more than a restatement of the name. It does not, however, explicitly route against the adjacent lifecycle siblings (update_metric_group, list_metric_groups, delete_metric_group), so it lands at clear-but-undifferentiated rather than fully distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real context for when to reach for it and points to the prerequisite tool: 'Find Evaluator ids with list_evaluators.' It also warns that running the group costs money, which is a practical decision input. It stops short of explicit when-not guidance, e.g. when to update an existing group instead of creating a new one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pipelineB
Creates a new pipeline within the currently configured deepset workspace. :param pipeline_name: Name of the pipeline to create. :param yaml_configuration: YAML configuration for the pipeline. :returns: Created pipeline or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
create_pipeline(data={'key': 'value'}, threshold=10)
# Call with references
create_pipeline(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
create_pipeline(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline_name | Yes | ||
| yaml_configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses output is automatically stored with object ID and returns a preview, which is useful. However, no annotations are provided, and the description does not cover potential side effects or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose front-loaded, but includes redundant docstring-style param/return lines and mismatched examples. Could be more concise and accurate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, 0% schema coverage, and many siblings, the description omits crucial context like YAML structure, prerequisites, error handling, and differentiation from pipeline versioning tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description adds minimal info (pipeline name and YAML config), but the examples are mismatched, referencing non-existent parameters 'data' and 'threshold', which confuses. No explanation of YAML format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'creates' and resource 'pipeline' within deepset workspace. Distinguishes from siblings like create_index or create_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides examples and mentions object references for parameter passing, but lacks explicit guidance on when to use this tool versus alternatives like create_pipeline_version or deploy_pipeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pipeline_versionA
Creates a new version of an existing pipeline with the provided YAML configuration.
Use this to update a pipeline's configuration. Each call creates a new immutable version, preserving the full history of changes.
If is_draft is True, and there is already a draft version, the existing draft will be finalized and incremented to a new version number. :param pipeline_name: Name of the pipeline to create a version for. :param yaml_configuration: The new YAML configuration for this version. :param description: Optional description of what changed in this version. :param is_draft: If True, the version is created as a draft (default: False). :returns: The newly created pipeline version or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
create_pipeline_version(data={'key': 'value'}, threshold=10)
# Call with references
create_pipeline_version(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
create_pipeline_version(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| is_draft | No | ||
| description | No | ||
| pipeline_name | Yes | ||
| yaml_configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses immutability, version history, draft finalization, output storage, and object ID usage. No annotations, so description carries full burden and meets it thoroughly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with opening statement, behavior explanation, parameter list, and examples. Slightly verbose with redundant parameter docstring but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, all parameters, behavior, output format, and usage examples. Adequate for a 4-parameter tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. Description compensates fully by describing each parameter, default values, reference format, and providing examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates a new immutable version of an existing pipeline with YAML configuration. Distinguishes from siblings like create_pipeline and patch_pipeline_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: "Use this to update a pipeline's configuration." Explains behavior with is_draft and object references, but lacks explicit exclusions or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workspaceA
Creates a new workspace with the specified name.
This tool creates a new workspace that can be used to organize pipelines, indexes, and other resources. The workspace name must be unique across the platform. Once created, you can start deploying pipelines and other resources within this workspace. :param name: The name for the new workspace. Must be unique. :returns: Success confirmation or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses mutation (creates), uniqueness requirement, output format with object ID, and storage behavior. However, it does not mention permissions, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise overall, but includes extra details about object store tools and referencing results, which are tangentially relevant. Could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description covers purpose, input, output, and uniqueness constraint. Lacks error handling details and authentication requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'name' has no schema description (0% coverage), but the description adds meaningful context: 'The name for the new workspace. Must be unique.' This compensates well for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Creates a new workspace with the specified name' and explains its role in organizing pipelines, indexes, and other resources. It clearly distinguishes from sibling tools like create_index and create_pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the uniqueness constraint and that workspaces can be used after creation, but does not provide explicit guidance on when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deactivate_deploymentB
Marks a deployment as no longer desired to be served, keeping its active revision intact. :param deployment_id: ID of the deployment. :returns: The updated deployment or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It adds useful behavioral context by stating the active revision is preserved (implying reversibility), but omits permissions/auth requirements, whether served traffic is immediately stopped, and whether the action can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is well front-loaded and earns its place, but the trailing object-store boilerplate ('Use the object store tools...', 'Use the returned object ID...') is generic and largely irrelevant to a deactivate operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-param mutation with no output schema and no annotations, the description covers the return path reasonably well, explaining the object-ID preview and how to consume it, though the safety/permission profile remains undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single param is documented only as ':param deployment_id: ID of the deployment,' which restates the name. With one self-evident ID parameter the gap is minor, but the description adds no format or source detail to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Marks a deployment as no longer desired to be served, keeping its active revision intact.' The 'keeping its active revision intact' clause implicitly distinguishes it from delete_deployment, though it never names that sibling directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternatives. With siblings like delete_deployment, activate_deployment, and update_deployment in the list, the description never says when to prefer deactivation over deletion or how it relates to activation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_pipelineA
Runs a pipeline configuration in debug mode: pin a breakpoint, resume a snapshot, or trace a full run.
Debugs a pipeline configuration directly (not a saved pipeline by name) -- pass the YAML you want to test, e.g. from get_pipeline_version, create_pipeline_version, or a local draft. The inline run trace is always returned, so a failure is visible even for a run that never reaches a breakpoint.
One call carries at most one of:
break_at_component_name (with break_at_visit_count) -- run from inputs until the breakpoint is hit, then stop and return a resumable snapshot in the 'snapshot' field. Pass that back as resume_from to continue the run.
resume_from -- replay a snapshot returned by a previous debug run to completion; inputs are ignored, they come from the snapshot.
neither -- run the pipeline from inputs to completion as a plain debug run. :param yaml_configuration: The pipeline YAML configuration to debug. :param inputs: Named pipeline inputs keyed by the input name declared under the pipeline config's 'inputs' mapping (e.g. {"query": "What is love?"}). Ignored when resume_from is set. :param break_at_component_name: Name of the component to break at. Mutually exclusive with resume_from; omit both to run to completion as a plain debug run. :param break_at_visit_count: Break when the target has been visited this many times (0 breaks before the first visit; relevant for loops/cycles). Only used if break_at_component_name is set. :param resume_from: A snapshot returned by a previous debug run (its 'snapshot' field), replayed to completion. Mutually exclusive with break_at_component_name. :param files: File IDs to download and inject into the inputs declared under the pipeline config's 'inputs.files' mapping. :param pipeline_id: Optional ID of the pipeline this debug run is associated with. :param pipeline_version_id: Optional ID of the pipeline version to associate the run with (requires pipeline_id). :param dry_run: Best-effort stateless run: state-modifying components (e.g. DocumentWriter) are replaced with no-op equivalents so the pipeline can be inspected without side effects. Required for indexing pipelines (their document store carries no index until deploy time); harmless for query pipelines. Set it on resume too if the original run used dry_run, otherwise the run is rejected.
:returns: PipelineDebugResult with status, result/snapshot, and the run trace, or an error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
debug_pipeline(data={'key': 'value'}, threshold=10)
# Call with references
debug_pipeline(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
debug_pipeline(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | ||
| inputs | No | ||
| dry_run | No | ||
| pipeline_id | No | ||
| resume_from | No | ||
| yaml_configuration | Yes | ||
| pipeline_version_id | No | ||
| break_at_visit_count | No | ||
| break_at_component_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral disclosure: it explains resumable snapshot behavior, the always-returned inline run trace, state-modifying dry_run substitutions, and the resume rejection on dry_run mismatch. It also notes that outputs are auto-stored and can be referenced via object IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, the description is well structured: a clear overview, mode breakdown, parameter definitions, and examples. Each section adds essential operational detail, and the first sentence front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no annotations, and no output schema, the description is remarkably complete. It covers return shape, side effects, dry_run behavior, error visibility, object-reference usage, and example calls, leaving almost no operational ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero descriptions, but the description documents all 9 parameters, including mutual exclusions, defaults (break_at_visit_count=0), ignored inputs when resume_from is set, and the requirement that pipeline_version_id requires pipeline_id. This fully compensates for the schema coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action and scope: 'Runs a pipeline configuration in debug mode: pin a breakpoint, resume a snapshot, or trace a full run.' It also explicitly distinguishes from saved pipelines ('directly (not a saved pipeline by name)'), which separates it from siblings like run_component or deploy_pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description defines three mutually exclusive usage modes and tells users to pass YAML from get_pipeline_version/create_pipeline_version or a local draft. It provides concrete when-to-use guidance for dry_run ('Required for indexing pipelines... harmless for query pipelines') and warns to set it on resume too. However, it does not explicitly name alternative tools, so it stops short of full explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_datasetA
Deletes a Dataset and all its test cases. This cannot be undone: get a yes first.
Experiments that used the Dataset keep their results but lose the link to it. hub-api refuses with a message while something else still uses the Dataset; relay that message. Afterwards every Experiment that used the Dataset can no longer change sides or rerun failed replays (hub-api answers 409). :param dataset_id: The Dataset's id. :returns: A confirmation, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so well: irreversibility, cascading deletion of test cases, the fact that Experiments keep results but lose their link, a named refusal behavior with instruction to relay the message, and the downstream 409 consequences for change-sides and rerun-failed. This is exactly the side-effect detail an agent cannot get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The consequence of deletion is front-loaded and every behavioral sentence earns its place. The trailing Sphinx-style ':param:' and ':returns:' fragments are documentation artifacts that mostly duplicate the schema and slightly dilute the otherwise tight prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description covers outcomes, failure modes, and cross-entity effects, and it states what is returned. What is missing is how to obtain a valid dataset_id and whether any permission/authorization conditions apply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only parameter line is ':param dataset_id: The Dataset's id.', which merely restates the schema title. It adds no format, sourcing (e.g. from list_datasets/get_dataset), or validity guidance beyond the property name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the cascade scope: 'Deletes a Dataset and all its test cases.' That scope line alone separates it from siblings like delete_experiment or delete_deployment, and from non-destructive dataset tools such as remove_test_cases or update_dataset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real precondition ('get a yes first') and describes when the call will fail (while something else still uses the Dataset). It does not route to an alternative for partial removal, e.g. remove_test_cases when only some cases should go, so the alternative-selection guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_deploymentA
Deletes a deployment along with all of its revisions. This cannot be undone. :param deployment_id: ID of the deployment to delete. :returns: Confirmation or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explicitly discloses the critical destructive trait ('along with all of its revisions. This cannot be undone.'), which is exactly what an agent needs. It could be improved by mentioning auth requirements or rate limits, but the core destructive behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core message is front-loaded and clear, but the description is bloated with 6+ sentences of boilerplate about object storage ('The output is automatically stored...', 'Use the object store tools...'), which is irrelevant to a destructive delete operation and dilutes the signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 required param, no output schema) and lack of annotations, the description covers the essential destructive warning but is incomplete on prerequisites and environment context. The included object-store boilerplate is noise for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter 'deployment_id', so the description must compensate. It does mention ':param deployment_id: ID of the deployment to delete.', providing a basic definition, but adds no format, syntax, or sourcing guidance beyond what the name implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Deletes') and resource ('deployment') and clarifies the cascading scope ('along with all of its revisions'). This distinguishes it from siblings like update_deployment or deactivate_deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it is irreversible but provides no guidance on when to use this tool versus alternatives like deactivate_deployment or delete_deployment_tag, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_deployment_tagB
Removes a tag from a deployment. Tag matching is case-insensitive. :param deployment_id: ID of the deployment. :param tag_name: Tag to remove. :returns: The deployment's full tag list after removal, or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_name | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one useful trait (case-insensitive tag matching) and the return shape. It omits important behaviors for a mutation: required permissions, idempotency (what happens if the tag is absent), and whether removal is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, which is good, but the trailing block about automatic output storage, object IDs, and the object store is generic boilerplate that consumes roughly half the text without helping an agent call this delete tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter delete with no annotations and no output schema, the description covers purpose, both params, and the return value (full tag list or error message), which is adequate. It still leaves auth/permission requirements and failure modes unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it does document both params via the docstring (:param deployment_id:, :param tag_name:) and adds the case-insensitivity rule for tag_name. However, the descriptions are minimal paraphrases ('Tag to remove.') rather than adding format or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes a tag from a deployment'), which is unambiguous. It does not explicitly distinguish itself from the close sibling add_deployment_tag or list_deployment_tags, but the verb makes the direction of the operation obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of the sibling add_deployment_tag/list_deployment_tags, and no prerequisites. The only guidance is the object-store boilerplate about passing the returned object ID to other functions, which covers follow-up usage rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_experimentA
Deletes an Experiment and its results. This cannot be undone: get a yes first.
The Sessions it reused, its replays and its scoring runs are kept, so later Experiments can reuse them. :param experiment_id: The Experiment's id. :returns: A confirmation, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_id | Yes |
TDQS
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 it well: it declares irreversibility, explains exactly what is destroyed (the Experiment and its results), and explicitly what survives (sessions it reused, replays, scoring runs). It also states the return shape ("a confirmation, or an error message").
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its immediate consequence, with no wasted sentences. The Sphinx-style ":param"/":returns:" markup reads as raw docstring artifacts rather than agent-facing prose, which slightly hurts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero annotations and no output schema, the description covers destruction scope, data retention, the confirmation requirement, and return shape — enough to call it safely. Missing pieces are permission/auth requirements, the id's provenance, and error conditions such as a nonexistent experiment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but ":param experiment_id: The Experiment's id" only restates the parameter name. For a destructive one-parameter tool, it should say where the id comes from (e.g. list_experiments/get_experiment) or its format, since a wrong id is unrecoverable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Deletes an Experiment and its results") and adds scope detail about what is and isn't removed. It is unambiguous against the many experiment siblings, but it never explicitly names an alternative or contrast tool, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"This cannot be undone: get a yes first" establishes a hard precondition (user confirmation) before calling, which shapes when the tool should be used. There is no routing guidance toward alternatives such as update_experiment or archiving, and no guidance on when deletion is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_metric_groupA
Deletes a Metric Group together with all its scoring runs. This cannot be undone: get a yes first.
The Evaluators themselves stay. hub-api refuses with a message while something else still uses the group; relay that message. Afterwards every Experiment that used the group can no longer change sides or rerun failed replays (hub-api answers 409). :param metric_group_id: The Metric Group's id. :returns: A confirmation, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| metric_group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the entire burden and does so well: it declares the operation irreversible, discloses the cascading loss of scoring runs, notes that Evaluators survive, and warns that dependent Experiments lose side-changing and replay-rerun ability (409). That downstream consequence is information an agent could not infer from the schema or from any other sibling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The destructive warning and cascade scope are front-loaded in the first two sentences, which is the right ordering. It loses a point for retaining Sphinx docstring artifacts (":param", ":returns") and hard line breaks that add noise rather than information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter tool with no annotations and no output schema, the description covers reversibility, cascade behavior, retained entities, the referential-integrity failure mode, and what a success versus error response looks like. There is no material gap an agent would need filled before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only parameter text is ":param metric_group_id: The Metric Group's id," which essentially restates the property title. It does not say where to obtain the id (for example from list_metric_groups), so the schema gap is not really compensated, but with a single obvious required identifier the omission is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Deletes a Metric Group") plus the cascade scope ("together with all its scoring runs"), which is exactly the detail that separates it from update_metric_group and list_metric_groups in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition — confirm with the user ("get a yes first") — and explains the blocking case where hub-api refuses while the group is still referenced. It does not name a sibling alternative or spell out when deleting is preferable to updating, so it falls short of a full when/when-not rubric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_indexA
Deploys an index to production.
This function attempts to deploy the specified index in the given workspace. If the deployment fails due to validation errors, it returns an object describing the validation errors. :param index_name: Name of the index to deploy.
:returns: A string indicating the deployment result or the validation results including errors.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| index_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that the tool attempts to deploy, returns validation errors on failure, and stores output with an object ID. However, it lacks details on prerequisites (e.g., index must exist) and implications of deployment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is functional but somewhat verbose, with docstring-style param/returns and redundant mentions of object ID usage. It front-loads the main action but could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return format and error handling but omits important context: it mentions 'in the given workspace' but the schema lacks a workspace parameter. Missing details on deployment effects and prerequisites like validation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds a clear definition for the single parameter 'index_name' ('Name of the index to deploy'). This fully compensates for the missing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deploys an index to production, using a specific verb and resource. It distinguishes from sibling tools like create_index (creates but doesn't deploy) and validate_index (validates but doesn't deploy).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for deploying an existing index but does not explicitly compare to alternatives like create_index or validate_index. No guidance on prerequisites or 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.
deploy_pipelineA
Deploys a pipeline to production.
This function attempts to deploy the specified pipeline in the given workspace. If the deployment fails due to validation errors, it returns a validation result. :param pipeline_name: Name of the pipeline to deploy. :param version_id: Optional ID of the pipeline version to deploy. If None, deploys the latest non-draft version.
:returns: Deployment validation result or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses return behavior (validation result on failure, stored object ID) and how to use the object ID. However, it does not mention destructive actions, auth requirements, or side effects of deployment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description includes docstring-style parameter and return sections, making it somewhat lengthy (6 sentences). Information is front-loaded, but could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 0% schema coverage, and no output schema, the description provides parameter meanings, return value with object ID usage, and partial behavioral context. It lacks prerequisites (e.g., pipeline existence, permissions) but is fairly complete for deployment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains both parameters: pipeline_name is the name of the pipeline, version_id is optional and defaults to latest non-draft version. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Deploys a pipeline to production,' which identifies the specific action and resource. It is distinct from sibling tools like 'create_pipeline' (which creates) and 'validate_pipeline' (which only validates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives (e.g., deploy_index, validate_pipeline). It only explains behavior on failure but no context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_definitionB
Returns the definition of a specific Haystack component.
:param component_type: Fully qualified component type
(e.g. haystack.components.routers.conditional_router.ConditionalRouter)
:param haystack_version: Optional version of Haystack to use.
Pass the same version as specified in the pipeline yaml's dependencies section for the haystack-ai package.
:returns: ComponentDefinition model or error message string
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| component_type | Yes | ||
| haystack_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral aspects such as side effects, permissions, or whether the operation is read-only. While the name suggests a get operation, the description does not explicitly state that it is safe or free of side effects, and there are no annotations to fill this gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured but contains redundant boilerplate about the object store and output formatting (e.g., repeating 'Use the object store tools...' twice). While not excessively long, this repetition could be trimmed for conciseness without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, and return type, but it lacks context about why or when one would need a component definition (e.g., for inspecting inputs/outputs before pipeline creation). It does not explain the structure of the returned definition or its typical use in the broader workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides meaningful explanations for both parameters. For component_type, it gives a concrete example. For haystack_version, it explains how to derive the value from the pipeline's dependencies. This adds clarity beyond the schema, which only lists types and required status.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Returns the definition of a specific Haystack component.' This is a specific verb-resource pair, and it distinguishes from sibling tools like get_pipeline or list_pipelines by focusing on component definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives. It lacks any mention of use cases, prerequisites, or scenarios where this tool is appropriate, leaving the agent to infer its purpose from the name and generic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cost_breakdownA
Reads the LLM cost of the workspace, or of one pipeline, grouped by model, pipeline, Service or API key.
Use this to find what drove the cost: which models, pipelines, Services or API keys spent the most.
Costs are in USD. Results are sorted by cost, highest first, unless you set sort_by and sort_order.
Each entry has a key (a model or provider name, or a UUID for the other dimensions) and a readable
label. A deleted pipeline still shows up with group_by='pipeline', labelled with its UUID.
total is the number of groups across all pages; when has_more is true, read the next
page_number. total_requests counts queries, not individual LLM calls. A cost_total of null
means the group had usage but none of it was priced. Without dates the range is the last 30 days.
A Service (group_by='deployment') is a published Service endpoint; a deployed pipeline is a pipeline
(group_by='pipeline'). The two overlap: a query through a Service that runs a pipeline counts in both,
so never add Service groups and pipeline groups together. Usage that did not go through a Service shows up
as __unattributed__ under group_by='deployment'.
Without workspace the figures cover the whole organization, as the Cost Management page does for an
organization admin; this needs the organization admin role. Use workspace for one workspace. In that
organization view pipeline_name and Service names can't be used (they belong to a workspace); pass
Service ids instead.
Narrow the breakdown with services, providers and api_keys, for example the models of one
Service. They combine: usage must match every kind you set, and any one value within a list.
:param group_by: The dimension to group by: model, workspace, pipeline, deployment (a Service), api_key or
provider.
:param pipeline_name: Restrict to this pipeline. Omit for the whole workspace. Needs Pipelines read as well as
Costs read.
:param start_date: Inclusive start as an ISO timestamp. Defaults to 30 days before end_date.
:param end_date: Exclusive end as an ISO timestamp. Defaults to no upper bound.
:param sort_by: Sort by label, cost_total, total_tokens or total_requests. Defaults to cost_total.
:param sort_order: ASC or DESC. Defaults to DESC.
:param limit: Groups per page, from 1 to 100.
:param page_number: The page to read, starting at 1.
:param services: Restrict to these Services (deployment in the API; a published Service endpoint, not a
deployed pipeline, which is a pipeline). Each value is a Service name or its id, the key from
get_cost_breakdown with group_by='deployment'. Looking a Service up by name needs Services read as
well as Costs read; an id needs only Costs read.
:param providers: Restrict to these providers. Use the provider ids from get_cost_breakdown with
group_by='provider', such as bedrock_converse or openai, not their display names.
:param api_keys: Restrict to these API keys. Use the key ids from get_cost_breakdown with
group_by='api_key', never a key's secret token.
:returns: One page of the breakdown, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sort_by | No | ||
| api_keys | No | ||
| end_date | No | ||
| group_by | Yes | ||
| services | No | ||
| providers | No | ||
| sort_order | No | ||
| start_date | No | ||
| page_number | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses USD units, default sorting, pagination via total/has_more/page_number, default 30-day range, null cost_total meaning, organization-admin permission needs, and the important warning not to add Service and pipeline groups together. It also explains that __unattributed__ appears for usage outside a Service and that results are stored in the object store for later inspection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and organized into short paragraphs, and most content is necessary for an 11-parameter tool with no schema descriptions. It is still quite long, and the closing object-store/preview note plus some repeated Service-versus-pipeline explanation add bulk beyond the core call semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no annotations, no schema descriptions, and no output schema, the description is unusually complete: it covers permissions, scoping, grouping semantics, filtering behavior, pagination, return-preview/object-store handling, and edge cases like deleted pipelines and unpriced usage. The only notable inconsistency is the workspace reference not present in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document all 11 parameters, and it largely does: group_by values are explained, dates are inclusive/exclusive, sort fields and order are defined, services/providers/api_keys explain accepted ids versus names and filter combination semantics. The main flaw is that the prose refers to a workspace parameter ('Without workspace ... Use workspace') that is absent from the input schema, which could mislead an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: it reads LLM cost for a workspace or pipeline, grouped by model, pipeline, Service, or API key. This is clear enough to understand the operation, but it never names sibling tools such as get_cost_totals or get_cost_over_time, so the distinction relies on the reader inferring that this is the grouped breakdown rather than a total or time series.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful usage context: use it to find what drove cost by model, pipeline, Service, or API key, and it explains organization-wide versus workspace scoping. However, it does not explicitly say when to choose this over get_cost_totals or get_cost_over_time, nor does it state exclusions beyond the Service/pipeline overlap warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cost_over_timeA
Reads the LLM cost of the workspace, or of one pipeline, per UTC day.
Use this to see how spending developed, find the day a cost spike started, or compare periods.
Costs are in USD. There is one point per day with usage; days without usage are left out, so a missing
day means zero cost. A cost_total of null means that day had usage but none of it was priced.
Without dates the range is the last 30 days. start_date is inclusive and end_date exclusive.
The daily figures leave out unpriced LLM calls; use get_cost_totals to check whether the cost is
complete.
Without workspace the figures cover the whole organization, as the Cost Management page does for an
organization admin; this needs the organization admin role. Use workspace for one workspace. In that
organization view pipeline_name and Service names can't be used (they belong to a workspace); pass
Service ids instead.
Narrow the figures with services, providers and api_keys. They combine: usage must match every
kind you set, and any one value within a list.
:param pipeline_name: Restrict to this pipeline. Omit for the whole workspace. Needs Pipelines read as well as
Costs read.
:param start_date: Inclusive start as an ISO timestamp. Defaults to 30 days before end_date.
:param end_date: Exclusive end as an ISO timestamp. Defaults to no upper bound.
:param services: Restrict to these Services (deployment in the API; a published Service endpoint, not a
deployed pipeline, which is a pipeline). Each value is a Service name or its id, the key from
get_cost_breakdown with group_by='deployment'. Looking a Service up by name needs Services read as
well as Costs read; an id needs only Costs read.
:param providers: Restrict to these providers. Use the provider ids from get_cost_breakdown with
group_by='provider', such as bedrock_converse or openai, not their display names.
:param api_keys: Restrict to these API keys. Use the key ids from get_cost_breakdown with
group_by='api_key', never a key's secret token.
:returns: The daily cost, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| api_keys | No | ||
| end_date | No | ||
| services | No | ||
| providers | No | ||
| start_date | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses key behavior: USD costs, one point per day with usage, omitted zero-usage days, null cost_total semantics for unpriced usage, inclusive/exclusive date bounds, and default ranges. It also states permission needs and the organization-admin-only behavior when workspace is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and information-dense, with the primary purpose and usage context first. It is appropriately sized for the tool's complexity, though some parameter explanations and object-store boilerplate are slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There are no annotations, no output schema, and six sensitive query parameters, but the description covers defaults, permissions, filter semantics, limitations, return behavior, and the object-store preview mechanism. An agent has enough information to invoke the tool correctly without opening other documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain all six parameters, and it does. It documents date inclusivity, filtering combination logic, id sources from get_cost_breakdown, permission implications, and the organization-view restriction on pipeline_name and Service names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, resource, and scope: reading LLM cost per UTC day for a workspace or one pipeline. It clearly distinguishes the tool from related siblings by naming get_cost_totals and get_cost_breakdown in relevant contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases such as seeing spending over time, finding when a cost spike started, or comparing periods. It also routes the agent to get_cost_totals for completeness checks and to get_cost_breakdown for obtaining provider, Service, and API key ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cost_totalsA
Reads the total LLM cost, tokens and requests of the workspace, or of one pipeline, over a date range.
Use this to answer how much a workspace or pipeline spent on LLM calls. Costs are in USD.
Without dates the range is the last 30 days. start_date is inclusive and end_date exclusive, so
for September 2026 pass 2026-09-01T00:00:00Z and 2026-10-01T00:00:00Z.
Without workspace the figures cover the whole organization, as the Cost Management page does for an
organization admin; this needs the organization admin role. Use workspace for one workspace. In that
organization view pipeline_name and Service names can't be used (they belong to a workspace); pass
Service ids instead.
Narrow the figures with services, providers and api_keys. They combine: usage must match every
kind you set, and any one value within a list.
Check is_cost_complete before reporting total_cost. When it is false, total_cost is a lower
bound, not the final figure: say so, and name the models in unpriced_models (LLM calls with no price
on file) and mention pending_generation_count (calls whose cost is still being calculated, which
usually clears within a minute). total_requests counts queries, not individual LLM calls; one query
can make several LLM calls.
:param pipeline_name: Restrict to this pipeline. Omit for the whole workspace. Needs Pipelines read as well as
Costs read.
:param start_date: Inclusive start as an ISO timestamp. Defaults to 30 days before end_date.
:param end_date: Exclusive end as an ISO timestamp. Defaults to no upper bound.
:param services: Restrict to these Services (deployment in the API; a published Service endpoint, not a
deployed pipeline, which is a pipeline). Each value is a Service name or its id, the key from
get_cost_breakdown with group_by='deployment'. Looking a Service up by name needs Services read as
well as Costs read; an id needs only Costs read.
:param providers: Restrict to these providers. Use the provider ids from get_cost_breakdown with
group_by='provider', such as bedrock_converse or openai, not their display names.
:param api_keys: Restrict to these API keys. Use the key ids from get_cost_breakdown with
group_by='api_key', never a key's secret token.
:returns: The cost totals, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| api_keys | No | ||
| end_date | No | ||
| services | No | ||
| providers | No | ||
| start_date | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the admin-role requirement, the is_cost_complete lower-bound caveat with instructions to name unpriced_models and pending_generation_count, the asymmetry that total_requests counts queries rather than LLM calls, and that results are stored in the object store with an @obj id. That is behavioral detail an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and defaults, and the paragraph-per-concern structure is easy to scan. It is long, though, and partly inflated by a Sphinx-style ':param'/':returns:' block that restates parameter info plus a generic object-store boilerplate tail that adds little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, no-output-schema tool this covers defaults, permission requirements, filter combination logic ('usage must match every kind you set, and any one value within a list'), and result handling. The missing piece is the absent ``workspace`` parameter the description depends on for its main scoping story.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: inclusive start / exclusive end with a concrete September 2026 example, providers must be ids like bedrock_converse not display names, api_keys must be key ids never secret tokens, and services may be names or ids with different permission implications. The deduction is for referencing a ``workspace`` parameter that does not appear in the input schema, which would confuse an agent trying to scope to one workspace.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reads the total LLM cost, tokens and requests') plus the exact scoping options (workspace, one pipeline, or whole organization) and a date range. The word 'totals' plus the scoping language distinguishes it from the sibling aggregates get_cost_over_time and get_cost_breakdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says what question it answers ('how much a workspace or pipeline spent on LLM calls'), what the defaults are (last 30 days, whole organization), and what constraint applies (whole-org view requires the organization admin role). It also names exclusions and workarounds: pipeline_name and Service names can't be used in the org view, pass Service ids instead, and it points to get_cost_breakdown as the source of ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_componentsA
Get a list of all installed custom components.
:param haystack_version: Optional version of Haystack to use.
Pass the same version as specified in the pipeline yaml's dependencies section for the haystack-ai package.
:returns: ComponentDefinitionList model or error message string.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| haystack_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It transparently mentions that the output is automatically stored, returns an object ID, and can be referenced elsewhere. It also notes 'ComponentDefinitionList model or error message string.' It does not explicitly state read-only behavior, but the get semantics imply it. The disclosure of the object store side effect is an informative behavioral trait beyond what annotations would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with the main purpose first, followed by parameter documentation, return type, and additional usage notes. It is somewhat verbose but each sentence adds value, such as storage behavior and object ID usage. It is appropriately sized for a tool with one parameter and a clear output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully clarifies what the tool returns (ComponentDefinitionList model or error string) and how to further interact with the result (object store tools). It covers all necessary aspects for a simple list tool, including the optional parameter handling and the storage mechanism. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining the parameter 'haystack_version' in detail: 'Pass the same version as specified in the pipeline yaml's `dependencies` section.' This adds meaning beyond the schema, which only shows the type. The explanation is sufficient for understanding how to set it correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a list of all installed custom components.' This is a specific verb ('Get') and resource ('list of installed custom components'), and it distinguishes from siblings like list_custom_component_installations, which focuses on installation logs. The purpose is unambiguous and effectively differentiates from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('get a list of all installed custom components') but does not explicitly state when to prefer this tool over alternatives like search_component_definitions or get_component_definition. There is no guidance on exclusions or comparisons, though the purpose is clear. It gives basic instructions on the optional haystack_version parameter but lacks explicit when-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_datasetA
Fetches one Dataset with all its test cases, in the order an Experiment replays them.
Each test case has its test_case_id (for update_test_case, copy_test_cases and
remove_test_cases), the session_id it replays or the inputs it sends, its expected
data and its setup and cleanup source.
:param dataset_id: The Dataset's id.
:returns: The Dataset, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the burden and does disclose meaningful behavior: the result is automatically stored, a formatted preview with an @obj_ ID is returned, and nested properties require the object store tools. It also states an error message is returned instead of the Dataset. Missing are permission/read-only expectations and any note on large datasets or truncation of the preview.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is well front-loaded, but Sphinx artifacts (':param', ':returns:') leak into agent-facing text, and the object-store advice is spread over four separate sentences that repeat the same idea. Roughly a third of the text could be collapsed into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema, the description covers the return shape (test_case_id, session_id or inputs, expected, setup/cleanup), the object-store retrieval path, and the error case. Only the parameter's origin/format and access expectations are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only says ':param dataset_id: The Dataset's id.' — essentially a restatement of the parameter name/title. It does not clarify the id format or where the id comes from (e.g., a prior list_datasets call).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Fetches one Dataset') and immediately scopes the payload ('with all its test cases, in the order an Experiment replays them'), which distinguishes it from list_datasets and from experiment-level tools. The agent knows exactly what it gets back without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Guidance is given for the output side-channel ('Use the object store tools in combination with the object ID', 'pass this result to other functions'), but there is no guidance on when to call this versus list_datasets, get_experiment, or update_dataset. Usage is implied by 'one Dataset' but alternatives are never named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deploymentB
Fetches details for a specific deployment, including its active revision and runtime status. :param deployment_id: ID of the deployment to fetch. :returns: Deployment details or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose an important non-obvious behavior: the result is stored in an object store and returned as a formatted preview with an object ID. However, it says nothing about permissions, error conditions beyond 'error message', or whether the read is side-effect free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and clear, but the docstring-style block is padded: ':returns: Deployment details or error message' is followed by three sentences that all circle the same object-store/object-ID idea, with the last two largely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is right to describe the return mechanism (object ID, preview, chaining into object-store tools). It stops short on other essentials such as error handling and where the deployment_id comes from, leaving gaps for a tool embedded among ~60 siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single param has no schema description, so the description must compensate. It offers only 'ID of the deployment to fetch', which restates the parameter name rather than clarifying format, source, or where to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetches details for a specific deployment') and adds the scope of what is returned (active revision, runtime status). This distinguishes it from list_deployments and get_deployment_revision without naming them, but the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this tool versus the many siblings (get_deployment_revision, get_deployment_stats, get_deployment_metrics, list_deployment_revisions). Usage is only inferable from 'specific deployment', so an agent gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deployment_metricsB
Fetches per-replica CPU/memory usage, resource limits, and replica counts for a deployment. :param deployment_id: ID of the deployment. :param start_ms: Start of the time range, in unix milliseconds. :param end_ms: End of the time range, in unix milliseconds. :returns: Deployment metrics or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| end_ms | Yes | ||
| start_ms | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose a real behavioral trait: output is auto-stored and returns an object ID (@obj_123) that feeds object-store tools. That is valuable and non-obvious. It does not, however, cover auth/permission requirements, read-only nature, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the object-store explanation is repeated across three sentences ('referenced in other functions', 'use the object store tools', 'pass this result to other functions') with overlapping meaning. The docstring-style ':param/:returns' formatting is also less scannable than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description does cover parameter meaning and the return/object-store mechanism, which is the critical missing structured data. It falls short on usage routing relative to get_deployment_stats and on any access/permission context, leaving an agent with gaps before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides only bare titles, and the description compensates by documenting all three parameters, including the unit for start_ms/end_ms ('unix milliseconds'). That unit detail is genuinely additive. Deployment_id is described only generically ('ID of the deployment'), so it is not perfect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource: 'Fetches per-replica CPU/memory usage, resource limits, and replica counts for a deployment.' An agent immediately knows the resource and the metric types returned. However, it does not distinguish itself from the sibling get_deployment_stats, which an agent could plausibly confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives or prerequisites. With siblings like get_deployment_stats and get_deployment present, the description should state what selects this tool over those, but it leaves that entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deployment_revisionB
Fetches a single deployment revision, including the pipeline configuration YAML it serves. :param deployment_id: ID of the deployment. :param revision_id: ID of the revision to fetch. :returns: The revision, including its config YAML, or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| revision_id | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it does disclose real behavior: the result is auto-stored, returned as a formatted preview with an object ID, and nested properties are reached via object-store tools. It omits permission/auth requirements and only vaguely gestures at errors ('or error message').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is well front-loaded, but the trailing block repeats the object-store idea across four sentences ('automatically stored', 'referenced in other functions', 'use the object store tools', 'pass this result to other functions') without adding new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param fetch with no output schema, the description covers the return shape (revision + config YAML) at a high level and explains the object-store handoff. It is missing selection guidance and the meaning of the two IDs, which are the main gaps an agent would hit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, yet the :param lines merely restate the names ('ID of the deployment', 'ID of the revision to fetch') without format, source, or how to obtain them. It adds almost no meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetches a single deployment revision') and adds scope detail ('including the pipeline configuration YAML it serves'), which clearly separates it from the sibling list_deployment_revisions. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to choose this over siblings like get_deployment, list_deployment_revisions, or activate_deployment_revision, and no prerequisites or exclusions. The object-store notes describe what to do with the result, not when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deployment_statsB
Fetches query volume, outcome split, and run durations for a deployment. :param deployment_id: ID of the deployment. :param days: Size of the rolling window, in days (1-90, default 30). :param granularity: Bucket width for the returned series, "DAY" (default) or "HOUR". :param time_zone: IANA time zone used to bucket the series (default "UTC"). :returns: Deployment statistics or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| time_zone | No | UTC | |
| granularity | No | DAY | |
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add genuinely useful behavioral context: the result is auto-stored in an object store and returned as an object ID (@obj_123) that can be fed into other functions and inspected via object-store tools. What it omits is the read-only nature, any authorization requirements, and whether values are nil for inactive deployments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The :param/:returns block is efficient, but the object-store tail is spread over three sentences that partially restate each other ('stored and can be referenced', 'use the object store tools', 'pass this result to other functions'). Front-loading is good, but there is redundancy that could be compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param tool with no output schema and no annotations, the definition covers parameters well and explains the important non-obvious behavior that the actual data lives behind an object ID. It is nearly complete; the remaining gap is distinguishing it from the metrics sibling and any dependency on deployment state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: each of the four params gets a :param line with units, bounds (1-90), defaults (30, DAY, UTC), and the enum values for granularity. This is meaningfully richer than the bare schema titles, though it doesn't explain time_zone's effect on bucket boundaries beyond 'bucket the series'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource and enumerates exactly what is returned: query volume, outcome split, and run durations for a deployment. That is a clear purpose. However, it never distinguishes itself from the sibling get_deployment_metrics, which an agent could easily confuse with stats, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g., the deployment must be active), and no reference to alternatives such as get_deployment_metrics or get_deployment. The agent is left to infer applicability purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evaluation_runA
Reads one Evaluation Run: its progress, or what the Evaluator found once it ended.
Use it to follow a run run_evaluator handed back while still going. status ENDED with
outcome SUCCEEDED has metrics; ERRORED means the Evaluator's code broke (see
error_detail); FAILED never completed and can be run again.
:param pipeline_name: Name of the pipeline.
:param evaluation_run_id: The evaluation_run_id from run_evaluator or list_evaluation_runs.
:returns: The Evaluation Run, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline_name | Yes | ||
| evaluation_run_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it defines the status/outcome state machine (ENDED + SUCCEEDED yields metrics, ERRORED means the evaluator code broke and points to error_detail, FAILED never completed and can be re-run). It also discloses that results are persisted to the object store and returned as a preview with an object ID, though permissions and read-only guarantees are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded, but the text carries Sphinx-style ':param' and ':returns' markup and three separate sentences about object IDs and the object store, which repeat the same point. Trimming the duplicated storage/object-ID text would sharpen it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey return semantics, and it does: status, outcome, metrics, error_detail, and the object-store preview are all described. What remains missing is how run state is obtained if not ENDED (polling cadence, timeouts) — minor for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the provenance of evaluation_run_id (from run_evaluator or list_evaluation_runs), which is genuinely useful, but pipeline_name is only glossed as 'Name of the pipeline' with no format or qualification guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reads one Evaluation Run') plus scope: current progress versus post-run findings. It also names the producing siblings (run_evaluator, list_evaluation_runs), so an agent can immediately tell this apart from the listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it to follow a run that run_evaluator returned while still in progress, and where the evaluation_run_id comes from. It lacks an explicit exclusion (e.g., 'use list_evaluation_runs to enumerate runs instead'), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evaluation_tryA
Reads an ad-hoc try that try_evaluator handed back while it was still running.
EXPIRED means the result aged out (tries are kept for an hour): run try_evaluator again.
:param pipeline_name: Name of the pipeline.
:param try_id: The try_id from try_evaluator.
:returns: The try report, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| try_id | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden, and it discloses real behavioral traits: tries expire after an hour (TTL), an EXPIRED state exists, and it may return 'an error message'. It doesn't cover auth or idempotency, but the lifecycle and failure semantics are genuinely useful beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and expiration behavior, then the params. The Sphinx-style :param:/:returns: tags are slightly redundant with the prose but compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly states the return ('The try report, or an error message'), and both required params are covered. For a two-param read tool this is essentially complete, with only auth/prerequisite detail missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents both parameters. Critically, it explains that try_id originates from try_evaluator, adding meaning the bare string-typed schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Reads') and resource ('an ad-hoc try'), and ties it directly to the sibling try_evaluator that produced the try. An agent can distinguish it from try_evaluator (which initiates) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly establishes the workflow: try_id comes 'from try_evaluator', so this is the retrieval step after a try is handed back. It also gives a concrete remedy on EXPIRED (re-run try_evaluator). It lacks an explicit 'do not use this to start a try' exclusion, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evaluatorA
Fetches one Evaluator, or one of its versions with the Python source.
Without version_id it returns the Evaluator with every version, newest first, each with
the Metrics it declares but no source. With version_id it returns that version including
its python_code; pass latest_version.evaluator_version_id to read the current source.
:param evaluator_id: The Evaluator's id.
:param version_id: A version's id, to read that version's source.
:returns: The Evaluator or the version, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | No | ||
| evaluator_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does a good job: it discloses exactly what is returned in each mode, that source is omitted unless version_id is set, that errors come back as a message, and the object-store side effect with an @obj_123 ID. It does not cover permissions or rate limits, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is well front-loaded, but the piece is padded: the :param version_id line restates the opening paragraph, the :returns line restates the outcome, and the closing two sentences about the object ID duplicate the earlier object-store note. Structure is conventional but several sentences do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain return values, and it does so for both modes plus the object-store preview and cross-function reuse. For a two-parameter read tool this is nearly complete; only permission/error-handling detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: both parameters are documented via :param lines, with version_id carrying real behavioral meaning (it controls whether python_code is returned). evaluator_id's semantics as "The Evaluator's id" is thin but adequate alongside the required-parameter constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fetches one Evaluator, or one of its versions with the Python source") and immediately distinguishes the two operating modes by the presence of version_id. It implicitly contrasts with the list_evaluators sibling via "one Evaluator," but never names the alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditional guidance: without version_id you get every version newest-first without source; with version_id you get that version's python_code, and it tells you to pass latest_version.evaluator_version_id to read current source. No exclusion or explicit alternative tool is named, but the when-to-use context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experimentA
Reads one Experiment: its test cases and how far each side has got. Free to call.
Use it to follow an Experiment after create_experiment, update_experiment or a rerun,
and to see why a side failed. status and each side's status go REPLAYING, SCORING, then
ENDED or FAILED. Per side: run_counts (replays by status, failed ones can be replayed
again), scoring_counts (evaluations; failed and errored ones can be judged again),
error (why it could not be scored) and experiment_run_id (the scoring run, for
get_experiment_run). The Sessions each side scored are not included; they are per test case
in get_experiment_results. To retry what failed use rerun_failed_experiment; to see why one
replay failed, read it with get_session_replay (its id is on the Session's row in get_experiment_run).
:param experiment_id: The Experiment's id, from list_experiments.
:returns: The Experiment, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carried the full burden and does disclose a lot: the status lifecycle (REPLAYING, SCORING, then ENDED/FAILED), per-side fields run_counts, scoring_counts, error and experiment_run_id, retry semantics for failed replays/scorings, and the cost signal 'Free to call.' That is strong behavioral context, but it stops short of stating permission/auth requirements. A 3 reflects solid disclosure with that one notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core prose is dense and front-loaded, with the state-machine and per-side field explanation earning its place. The trailing block about automatic object storage, formatted previews, @obj_123 IDs and object-store tools is generic boilerplate repeated across tools, and the ':param'/':returns:' Sphinx fragments mixed with prose read awkwardly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing return contents field-by-field and notes what is deliberately omitted (scored Sessions), which is exactly what an agent needs. The only shortfall is the absence of any permission or access-level statement for a read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter at 0% schema coverage, so the description must compensate and it partly does: ':param experiment_id: The Experiment's id, from list_experiments' adds provenance the schema lacks. It does not add format details (ID shape, whether an object ID is accepted), leaving the agent with a pointer but no syntax guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Reads one Experiment: its test cases and how far each side has got.' It immediately scopes what is and isn't returned, letting an agent distinguish it from get_experiment_results and get_experiment_run without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ('follow an Experiment after create_experiment, update_experiment or a rerun, and to see why a side failed') and routes to alternatives by name: get_experiment_results for per-test-case Sessions, rerun_failed_experiment for retries, get_session_replay for diagnosing a failed replay. Exclusions are stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experiment_resultsA
Reads an Experiment's results: each Metric, candidate against baseline, then each test case.
Find an Experiment with list_experiments. metrics has one entry per Metric of the
Metric Group, in its order: each side's value (or labels for a Label), delta and
delta_pct of the candidate over the baseline, better (which way a change is an
improvement, null when undeclared), change (improved, regressed, unchanged or unknown),
and how many Sessions errored, meaning the Evaluator's own code broke. A test case's value
is the mean over its Sessions, and a Metric is averaged only over the paired_test_cases
both sides have a value for, so check that count before trusting a delta. Say a Metric
improved or regressed only from change; unknown means no judgement, so never infer a
direction from the Metric's name. pipeline_metrics compares DURATION, TOKENS and COST the
same way. Each test case lists the Sessions each side scored and, per Score Metric keyed
{evaluator_id}:{metric_key}, each side's mean; that is where to look for the test cases
behind a regression. Resolve evaluator ids to names with list_evaluators. Results are
partial while status is REPLAYING or SCORING. headline gives each side's Composite
(0 to 1, 1 best) and normalized_means. When comparable is false the two sides used
different formulas: report no change between them and give incomparable_reason; each side's
composite_weights shows the formula it used. aggregates gives each Metric over every Session
a side scored, not just the paired test cases: each side's whole-run entry (a Score's mean, a
Label's shares), delta, share_deltas for a Label and change. Empty until a side's
scoring runs end.
:param experiment_id: The Experiment's id.
:param max_test_cases: Most test cases to return; metrics still cover every test case.
:returns: The results, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_id | Yes | ||
| max_test_cases | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so: results are partial while ``status`` is REPLAYING or SCORING, ``aggregates`` is empty until scoring runs end, ``errored`` counts mean the Evaluator's own code broke, ``unknown`` means no judgement, and comparability failures must be reported as no-change. It also discloses the object-store side effect (auto-stored output, preview with an ``@obj_123`` id), which is behavior an agent must know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded with the core purpose and the dense middle is largely necessary return-value documentation given there is no output schema. Some density could be trimmed (the ``pipeline_metrics`` aside, the repeated 'each side's' phrasing) and the trailing object-store boilerplate does not earn much space, but overall the content justifies its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only 0% parameter coverage, the description compensates by documenting the return structure field by field: ``metrics``, ``delta``/``delta_pct``, ``change``, ``paired_test_cases``, ``pipeline_metrics``, per-test-case Session breakdowns, ``headline``/``normalized_means``, ``comparable`` and ``aggregates``. An agent can both call the tool and interpret its output without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. ``max_test_cases`` is explained with a crucial semantic detail — '``metrics`` still cover every test case' — which prevents the agent from assuming metrics are truncated too. ``experiment_id`` is only restated ('The Experiment's id'), but that parameter is self-evident, so the gap is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource plus the shape of the payload: 'Reads an Experiment's results: each Metric, candidate against baseline, then each test case.' It is clearly a results-retrieval tool, distinguishable from metadata tools like get_experiment or run-management tools like list_experiment_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent explicitly: find the experiment with ``list_experiments`` and resolve evaluator ids with ``list_evaluators``. It also gives conditional usage rules ('Say a Metric improved or regressed only from ``change``', 'When ``comparable`` is false ... report no change'). It stops short of naming sibling result tools such as get_experiment_run or get_evaluation_run as alternatives, so it is strong but not fully disambiguating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experiment_runA
Reads one scoring run: how its cells ended, a summary per Metric, then the grid rows.
A scoring run is a Metric Group judging chosen Sessions of one pipeline. Find one with
list_metric_groups (last_run) or list_experiments (a side's scoring_runs).
It judges each chosen Session with each Evaluator; one cell per pair. counts says how
the cells ended: errored is the Evaluator's own code breaking (see the cell's
error_detail), not a low Metric; failed is a cell that never ran and can be retried.
metrics summarises each Evaluator's Metric over every row, rows past max_rows
included: mean, min and max for a Score, a count per label for a Label, and how often it did
not apply. Each row is a Session with its cells; a cell's metrics carry the value per
address (session, turn/2, ...) and the rationale the Evaluator wrote, which is what to
group failures by. run.selection says whether the Sessions were SAMPLED or HAND_PICKED;
only sampled runs say anything about traffic as a whole. composite is the Metric Group's
single number for the run, 0 to 1 with 1 best, from normalized_means (each Metric on that
scale) weighted by run.composite_weights, the formula the run started with. When it has
no value it says reason and lists the Metrics that block it in missing.
aggregate is the API's whole-run result per Metric: how its Sessions fell out (valued,
errored, failed, pending, ...), coverage and the Metric's mean or label
shares, in the units it declares; it is null until the run ends. usage is what the
pipeline spent on the run's Sessions (tokens, duration, cost in USD, null unless
cost_status is priced). evaluator_versions says which version of each Evaluator
judged and what its Metrics declare. The filters keep only the cells whose Session's origin,
Service or pipeline version match (a cell still running has no origin and matches none):
they narrow counts, rows and metrics, but not aggregate, usage,
normalized_means or composite, which stay whole-run.
:param pipeline_name: Name of the pipeline.
:param metric_group_id: The id of the Metric Group the run scored with.
:param run_id: The run's id.
:param max_rows: Most rows to return; the summaries still cover every row.
:param origin: Only cells whose Session came from a Service, the pipeline's own API, or the Playground.
:param deployment_id: Only cells whose Session this Service served.
:param pipeline_version_id: Only cells whose Session this pipeline version served.
:param session_id: Only this Session's row.
:returns: The run report, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | No | ||
| run_id | Yes | ||
| max_rows | No | ||
| session_id | No | ||
| deployment_id | No | ||
| pipeline_name | Yes | ||
| metric_group_id | Yes | ||
| pipeline_version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so thoroughly: it explains that 'errored' means Evaluator code breaking rather than a low Metric, that 'failed' cells can be retried, that aggregate/usage/composite are null until the run ends or unless cost_status is 'priced', and that run.selection (SAMPLED vs HAND_PICKED) determines whether traffic-wide inference is valid. It also discloses the important side effect that output is auto-stored and returned as an @obj_123 reference for reuse via object store tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core purpose, but the body is a dense, unbroken prose block covering return fields, filter semantics, and object-store boilerplate without headings or bullets, making it hard to scan. Nearly every sentence is substantive, so the length is largely earned by the complexity, but the structure could be much tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema tool, the description explains return values in unusual depth, including null conditions and exactly which fields filters do and do not narrow. Minor gaps remain around error behavior beyond 'The run report, or an error message' and any access/permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the 8 parameters has a documented meaning, including that max_rows limits rows but summaries still cover every row, and that origin maps to Service/pipeline API/Playground. The descriptions for pipeline_name, metric_group_id, and run_id are terse ('Name of the pipeline', 'The run's id'), which is the main residual gap given zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('Reads one scoring run') and then enumerates exactly what is returned: cell outcomes, a per-Metric summary, and the grid rows. It further anchors the concept ('a scoring run is a Metric Group judging chosen Sessions of one pipeline'), so an agent can distinguish it from list-level siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete discovery path for the required identifiers ('find one with list_metric_groups (last_run) or list_experiments (a side's scoring_runs)'), which is actionable routing guidance. It does not, however, contrast this tool with close siblings such as get_experiment_results, get_evaluation_run, or list_experiment_runs, nor state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_from_object_storeA
Use this tool to fetch an object from the object store.
You can fetch a specific object by using the object's id (e.g. @obj_001).
You can also fetch any nested path by using the path-parameter
(e.g. {"object_id": "@obj_001", "path": "user_info.given_name"}
-> returns the content at obj.user_info.given_name).
:param object_id: The id of the object to fetch in the format @obj_001.
:param path: The path of the object to fetch in the format of access.to.attr or ["access"]["to"]["attr"].
:return: String representation of the object or of the value at path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| object_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the return shape ('String representation of the object or of the value at path'), which is valuable given there is no output schema. But it omits failure behavior (missing id, invalid path), any permission/auth requirements, and any side-effect statement for this read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then progressively adds the id mode, the path mode, and parameter docs. The JSON example is worth its space; the format is efficient overall, with only minor redundancy between the prose path explanation and the `:param path:` line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers the essentials (what it returns, both parameter formats), which is more than minimal. But it stops short of error/edge-case behavior and any resource-identification guidance for deciding between this and the other object-store tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning, and it does: it specifies the id format (`@obj_001`) and two accepted path syntaxes (`access.to.attr` and `["access"]["to"]["attr"]`) with a concrete example. This meaningfully compensates for the undocumented schema, though the empty-string default for `path` is never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('fetch an object from the object store') and immediately operationalizes it with two retrieval modes. It is clear on its own, but never names the adjacent siblings (get_slice_from_object_store, sed_object_store, grep_object_store) to draw the boundary, so an agent still has to infer which store tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two ways to call it (by id, or by id plus nested path with a worked example), which is genuine usage guidance. However, it gives no when-to-use vs the many store siblings and no exclusions, so the routing decision is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indexB
Fetches detailed configuration information for a specific index, identified by its unique index_name.
:param index_name: Unique name of the index to fetch.
:returns: The index configuration or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| index_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses that output is auto-stored, returned as an object ID preview, and that nested properties require object store tools, but says nothing about auth requirements, read-only nature, or error conditions beyond 'an error message'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the entry mixes Sphinx-style ':param:'/':returns:' directives with prose and then spends three sentences on object store mechanics. Some redundancy between ':returns:' and the object-ID paragraphs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the needed lifting by describing the return value ('index configuration or an error message') and the object-ID indirection pattern. It is nearly complete for this simple one-parameter read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no schema description, so the description must compensate. It does document index_name as the 'Unique name of the index to fetch', which adds the uniqueness constraint but no format or naming convention details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetches') and resource ('detailed configuration information for a specific index'), anchored by the unique index_name. It is clearly differentiated from list_indexes by the singular scope, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use vs. list_indexes/update_index guidance, but the description does give downstream workflow direction ('Use the object store tools in combination with the object ID'). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_custom_component_installation_logsB
Get the logs from the latest custom component installation.
:returns: The latest installation logs or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the output is stored and returns an object ID for further use, implying a read operation. However, with no annotations, it does not explicitly confirm no side effects or state the exact behavior beyond output handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is adequate but contains some redundancy (e.g., mentioning logs twice). It is structured as a paragraph but could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters or output schema, the description sufficiently explains the output format and how to use it with object store tools. It lacks details on error scenarios but covers the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters are defined, so the schema provides full coverage. The description adds value by explaining the output storage and object ID usage, meeting the baseline for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves logs from the latest custom component installation. The name and description are consistent, but no explicit differentiation from sibling tools is provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes instructions on using the output with object store tools but lacks guidance on when to choose this tool over alternatives like list_custom_component_installations or get_custom_components.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelsA
Lists the models including their configuration options available for use in a workspace's pipelines and indexes.
This includes predefined models offered by deepset as well as custom models configured
at the workspace or organization level. Use this tool to discover which model names and
providers can be used, which configuration options are available, and which default
configuration is offered when configuring chat generators.
:param limit: Maximum number of models to return per page.
:param page_number: The page to fetch, starting at 1.
:param connected: If set, only return models for which the workspace does (True) or
does not (False) have a working integration configured.
:param provider: If set, only return models from this provider. Accepts a well-known
ModelProvider value (e.g. 'openai', 'anthropic', 'gemini', 'aws-bedrock') or any other
provider name as a plain string. Case-insensitive, exact match.
:param model: If set, only return models whose configured model name contains this value
(e.g. 'gpt-4o'). Case-insensitive, substring match.
:param include_price: If True, each model also carries its effective price in USD per 1,000 tokens
(input, output and cache prices), with the workspace's and organization's custom prices applied.
Requires read access to costs. Models without a known price have no price, e.g. Azure models that
are only identified by their deployment name. Defaults to False.
:returns: A page of models including their configuration options or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | No | ||
| provider | No | ||
| connected | No | ||
| page_number | No | ||
| include_price | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses the side effect that results are auto-stored as an object with an ID (e.g. @obj_123) to be read via object-store tools, and that include_price requires read access to costs and silently omits price for models like Azure deployment-named ones. Missing are explicit read-only framing, auth scope beyond costs, and ordering/pagination edge behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then parameters, then return behavior, so scanning order is correct. It is somewhat long and the boilerplate object-store paragraph plus ':returns' line add bulk, but nearly every line carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-optional-parameter list tool with no output schema and no annotations, the description covers purpose, filtering semantics, cost/permission caveat, pagination and the shape of the returned result (preview + object ID). An agent has enough to call it correctly and know how to retrieve nested details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the six parameters is documented with semantics beyond the schema — limit as per-page cap, page_number starting at 1, connected as integration-status filter, provider as case-insensitive exact match accepting well-known or arbitrary provider strings, model as case-insensitive substring match, and include_price's units (USD per 1,000 tokens, input/output/cache).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Lists the models including their configuration options') plus the scope ('available for use in a workspace's pipelines and indexes'). It immediately separates itself from sibling list tools such as list_pipelines, list_indexes and get_custom_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the discovery use case: finding model names/providers, available configuration options, and default configuration when setting up chat generators. There are no explicit exclusions or named alternatives, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipelineA
Fetches information for a specific pipeline, identified by its unique pipeline_name.
:param pipeline_name: The name of the pipeline to fetch.
:returns: Pipeline details or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the output is automatically stored, returns a formatted preview with an object ID, and can be passed to other functions. It also mentions error messages. This is valuable beyond the schema, though it stops short of stating permissions or explicit read-only safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized but contains redundancy; two sentences about using the object ID could be merged. The use of `:param` and `:returns` is conventional, but the instructions are somewhat scattered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, it covers the return format and how to use the object ID, but it lacks explicit usage guidance versus siblings and does not elaborate on error conditions beyond a generic message. The overall context is adequate for basic use but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate. However, it only restates the parameter name ('The name of the pipeline to fetch') and adds 'unique', which adds little meaning beyond the schema. No format, constraints, or examples are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Fetches information for a specific pipeline' and identifies the resource by the unique `pipeline_name`, distinguishing it from sibling tools like `list_pipelines` (fetching all) and `get_pipeline_version` (a version-specific resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage when you have a specific pipeline name, but does not explicitly mention when to prefer this over alternatives, nor does it state exclusions. The guidance about using object store tools is about post-processing, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_logsA
Fetches logs for a specific pipeline.
Retrieves log entries for the specified pipeline, with optional filtering by log level. This is useful for debugging pipeline issues or monitoring pipeline execution. :param pipeline_name: Name of the pipeline to fetch logs for. :param limit: Maximum number of log entries to return (default: 30). :param level: Filter logs by level. If None, returns all levels. :param after: The cursor to fetch the next page of results.
:returns: Pipeline logs or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| level | No | ||
| limit | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It explains output is automatically stored and returns an object ID, which is key behavioral info. It could be more transparent about permissions or format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded purpose and parameter docs, but has slight redundancy between 'Fetches logs' and 'Retrieves log entries'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers parameters and output usage but lacks details on return format and pagination mechanics (how to get the first cursor). Given no output schema, this is a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining each parameter's purpose (pipeline_name, limit, level, after) with clear semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetches logs for a specific pipeline' with a specific verb and resource. It distinguishes from siblings as no other tool fetches logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'useful for debugging pipeline issues or monitoring pipeline execution', providing clear context. However, it lacks explicit exclusions or alternative comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_traceA
Retrieves the Haystack pipeline run trace including all spans for a single search history record.
Returns the execution trace for one query: every
component span with essential tags (excluding the component's input and output),
timing, and failure details. Use this to deep-dive into a
specific query run identified by its query_id (obtainable from
list_pipeline_traces or list_pipeline_search_history).
For a targeted look at one span including the input and output at one component, use
get_pipeline_trace_span_tags; for the logs, use get_pipeline_trace_logs.
:param pipeline_name: Name of the pipeline.
:param query_id: UUID of the search history query whose trace to retrieve.
Obtain this from the query_id / search_history_id field of a
list_pipeline_traces or list_pipeline_search_history response.
:returns: The pipeline trace entry including all spans or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses important behaviors: returns all spans, excludes component input/output, includes timing and failure details, and automatically stores output with an object ID. It clearly signals a read-like operation via 'Retrieves' and explains the side effect of storage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than strictly necessary, with some redundancy (query_id source is mentioned twice). However, it is well-structured with a front-loaded purpose, clear param block, and separate usage guidance. Every major section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description provides a comprehensive context: what is returned, what is excluded, error handling, object store integration, and how to reference the result. It covers the tool's role in the broader workflow and directs users to related tools when needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions in properties), but the description fully explains both parameters. pipeline_name is simply 'Name of the pipeline,' and query_id is given a detailed definition with instructions to obtain it from the query_id/search_history_id field of list_pipeline_traces or list_pipeline_search_history responses.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieves the Haystack pipeline run trace including all spans for a single search history record.' It clearly differentiates from sibling tools by focusing on the full trace for a single query, and mentions alternatives for other granularities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('Use this to deep-dive into a specific query run') and how to obtain required identifiers ('obtainable from list_pipeline_traces or list_pipeline_search_history'). It also provides concrete alternatives: 'For a targeted look at one span... use get_pipeline_trace_span_tags; for the logs, use get_pipeline_trace_logs.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_trace_logsA
Retrieves the log entries for a single Haystack pipeline run trace.
Returns the run's logs (e.g. to diagnose warnings or errors emitted during the run). Each entry includes the logger, level, message, timestamp, and extra fields.
Obtain query_id from list_pipeline_traces or list_pipeline_search_history.
If errors occur outside of the pipeline (e.g. in the API or search history service), they will not appear in the
trace logs. Use the get_pipeline_logs tool to retrieve logs for the pipeline itself (e.g. startup errors,
configuration issues, orother runtime problems).
:param pipeline_name: Name of the pipeline.
:param query_id: UUID of the search history query.
:returns: List of log entries or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return structure (logger, level, message, timestamp, extra fields), the exclusion of errors outside the pipeline, and the automatic storing of output with an object ID for reference. It does not mention pagination or auth, but provides substantial behavioral context beyond a simple read-only claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear paragraphs and param documentation. Some redundancy exists around the object ID mention ('Returns a formatted preview' and 'Use the returned object ID'), but the content is all relevant and earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 2 parameters, no output schema, and no annotations, this description is remarkably complete. It covers purpose, use cases, parameter semantics, expected return format, error boundaries, related tools, and how to reference the result. It leaves little ambiguity for an AI agent attempting to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema provides no descriptions for either parameter (0% coverage), the description compensates fully by defining pipeline_name as 'Name of the pipeline' and query_id as 'UUID of the search history query', and additionally tells users where to obtain query_id. This exceeds schema-level information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Retrieves the log entries for a single Haystack pipeline run trace', which is a specific verb+resource combination. It distinguishes from siblings by naming the alternative get_pipeline_logs and explaining when each should be used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says when to use this tool (to diagnose warnings/errors emitted during a run) and when to use get_pipeline_logs instead (pipeline startup errors, configuration issues). It also explains how to obtain query_id from list_pipeline_traces or list_pipeline_search_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_trace_span_tagsA
Retrieves all tags for a single span within a Haystack pipeline run trace.
A span's tags carry the component-level detail, including its input and output
(e.g. haystack.component.input / haystack.component.output) plus type and
error information. Use this to inspect one component run in detail.
Obtain span_id from a span in a get_pipeline_trace response, and query_id
from list_pipeline_traces or list_pipeline_search_history.
:param pipeline_name: Name of the pipeline.
:param query_id: UUID of the search history query.
:param span_id: UUID of the span whose tags to retrieve.
:returns: The span's tag dictionary or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| span_id | Yes | ||
| query_id | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return type (tag dictionary or error message), the automatic storage of output, and the object ID behavior. It lacks details on permissions or rate limits, but covers key behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (purpose, usage hints, param docs, returns) and uses formatting (bold, code) for readability. It is somewhat lengthy but each section adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage context, parameter semantics, return behavior, and object store integration. Given no output schema or annotations, it is fairly complete, though it could include an example of the tag dictionary structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description explicitly defines each parameter in the :param: lines, including types and purpose (e.g., 'UUID of the span whose tags to retrieve'). This compensates well for the schema's silence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieves all tags for a single span') on a specific resource ('within a Haystack pipeline run trace'), clearly distinguishing it from sibling tools like get_pipeline_trace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context ('Use this to inspect one component run in detail') and explains how to obtain the required parameters from other tools (get_pipeline_trace, list_pipeline_traces). It does not explicitly mention when not to use it, but the guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipeline_versionA
Fetches a specific version of a pipeline by its version ID. :param pipeline_name: Name of the pipeline. :param version_id: UUID of the version to fetch. :returns: Pipeline version details or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the output is automatically stored in the object store and returns an object ID for referencing. It explains how to use the result with object store tools. However, it omits authentication needs, rate limits, or side effects, though the operation is likely read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative with a clear purpose, parameter docs, and output usage notes. It is slightly lengthy due to repeating param docs that could be in the schema, but overall front-loaded with the main action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch tool with no output schema, the description explains the return format (object ID) and how to use it. It covers the basic workflow but lacks details on error handling or prerequisites. Given the tool's simplicity, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description includes explicit parameter documentation: ':param pipeline_name: Name of the pipeline.' and ':param version_id: UUID of the version to fetch.' This adds crucial meaning beyond the schema's property titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches a specific pipeline version by ID, using the verb 'fetches' and specific resource 'version'. It distinguishes from siblings like 'list_pipeline_versions' (which lists all versions) and 'patch_pipeline_version' (which modifies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (fetching a specific version) but does not explicitly guide when to use this vs. alternatives like 'list_pipeline_versions' for multiple versions or 'get_pipeline' for the pipeline itself. It mentions using object store tools for nested properties, which helps for further interaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secretA
Retrieves detailed information about a specific secret by its ID.
Use this tool to get information about a specific secret when you know its ID. The secret value itself is not returned for security reasons, only metadata. :param secret_id: The unique identifier of the secret to retrieve
:returns: Secret information or error message
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| secret_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It states the secret value is not returned, output is stored, and an object ID is returned for referencing. It lacks details on auth needs, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise but contains redundant phrasing (e.g., 'Use this tool to get information about a specific secret' reiterates the purpose). It front-loads the core action but could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no annotations, the description covers retrieval, security nuance, and output format. However, it omits specifics like what metadata is returned, error case handling, and explicit object store usage instructions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds minimal semantics by calling secret_id 'the unique identifier of the secret to retrieve,' which is a slight improvement over the schema's bare title. Given the low coverage, more elaboration is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'Retrieves detailed information about a specific secret by its ID.' It differentiates from siblings like list_secrets by emphasizing 'specific secret' and 'by ID'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use: 'Use this tool to get information about a specific secret when you know its ID.' It also notes that the secret value is not returned for security reasons, implying alternative uses for other data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_replayA
Reads one replay run. Free to call.
Experiment support, for when you need it: to see why an Experiment's replay failed or looks wrong,
read its run. Get the id from a row's session_replay_run_id in get_experiment_run (the row
is the Session the replay produced), or from replay_session. The run has status (CREATED,
STARTED, ENDED or FAILED), error_detail when it failed, setup_logs and cleanup_logs from
the setup and cleanup steps, session_id (the new Session the replay produced), source_session_id
(the Session it replayed), test_case_id (the Dataset test case it was for, if any), and the
trace_ids it produced. Only a FAILED run is retryable, with rerun_failed_experiment
(rerun="replays").
:param pipeline_name: Name of the pipeline.
:param replay_run_id: The replay run's session_replay_run_id.
:returns: The replay run, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline_name | Yes | ||
| replay_run_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden well: it discloses that the call is free, enumerates the returned fields (status, error_detail, setup_logs, cleanup_logs, session_id, source_session_id, test_case_id, trace_ids), and states that only FAILED runs are retryable. It does not cover permission or rate-limit behavior, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior and id-sourcing guidance are front-loaded, and the field enumeration earns its length by documenting an otherwise undocumented return value. The 'Experiment support, for when you need it' preamble and the trailing :param/:returns docstring lines add some boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and zero schema coverage, so the description has to describe both inputs and returns, and it does: it names every returned field, the possible status values, and the retry path. Nothing an agent needs in order to call and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for the non-obvious parameter: it explains that replay_run_id is the run's session_replay_run_id and shows two concrete ways to obtain it. pipeline_name is only glossed as 'Name of the pipeline', which is thin but low-risk given the parameter's obviousness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Reads one replay run' gives a specific verb and resource, and the follow-up defines the tool's scope as experiment-replay debugging. It does not explicitly distinguish itself from adjacent read tools like get_experiment_run, though it clarifies the relationship by explaining that get_experiment_run supplies the id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use it (to see why an Experiment's replay failed or looks wrong), where to get the required replay_run_id (a row's session_replay_run_id in get_experiment_run, or replay_session), and names the follow-up alternative rerun_failed_experiment for FAILED runs. Routing and alternatives are explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_slice_from_object_storeA
Extract a slice from a string or list object that is stored in the object store.
:param object_id: Identifier of the object. :param start: Start index for slicing. :param end: End index for slicing (optional - leave empty to get slice from start to end of sequence). :param path: Navigation path to object to slice (optional). :return: String representation of the slice.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| path | No | ||
| start | No | ||
| object_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates the return type (string representation) but does not disclose error handling (e.g., invalid indices) or side effects. With no annotations, more details are expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and includes a structured docstring format, though the parameter tags are slightly verbose for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's functionality and parameters, but lacks information on error cases and does not differentiate from sibling tools in the object store family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are explained with purpose and defaults/optionality, adding significant value since the input schema has 0% description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (extract) and resource (slice from object store), which is distinct from siblings like get_from_object_store (whole object) and grep_object_store (search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as get_from_object_store or grep_object_store; usage context is only implied by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_templateA
Fetches detailed information for a specific pipeline or indexing template, identified by its template_name.
:param template_name: The name of the template to fetch.
:returns: Pipeline or indexing template details or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| template_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description discloses key behavioral traits: the output is automatically stored, a preview with an object ID is returned, and the ID can be used with object store tools or passed to other functions. This goes beyond just 'fetches template' and aids the agent in understanding the return format and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: main purpose first, then param explanation, return behavior, and usage tips. The docstring-style formatting is clear, and each sentence adds value. Slight room for improvement by front-loading more critical info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-template tool with one parameter and no output schema, the description covers purpose, parameter, return value (including object ID utility), and error handling (indicated by 'error message'). This is sufficiently complete for the complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It provides a basic docstring for the only parameter, 'template_name', stating 'The name of the template to fetch.' This adds meaning beyond the schema (which only gives title and type), but lacks details on format, allowed values, or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Fetches detailed information') and the resource ('specific pipeline or indexing template'), identified by a unique name. It clearly distinguishes from sibling tools like list_templates or search_templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to get details of a single template by name), but it does not explicitly state when not to use it or point to alternatives (e.g., list_templates for listing, search_templates for searching). No direct comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspaceA
Fetches detailed information for a specific workspace by name.
This tool retrieves comprehensive details about a specific workspace, including its unique ID, supported languages, and configuration settings. Use this when you need detailed information about a particular workspace. :param workspace_name: The name of the workspace to fetch details for. :returns: Workspace details or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_name | Yes |
TDQS
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 describes the output format (object ID, preview), explains how to access nested properties via object store, and mentions error messages. It implies a read-only operation, but does not explicitly state non-destructive behavior. Overall, it is transparent for a simple get operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the purpose and then detailing output and usage. It is slightly verbose with repetition (e.g., 'This tool retrieves' and 'Use this when'), but every sentence adds value. The docstring-style parameter description is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple single-parameter input, the description provides comprehensive context: return format (object ID, preview), instructions for accessing nested properties via object store, and mention of error messages. It fully compensates for missing structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description adds meaning by stating 'The name of the workspace to fetch details for.' This clarifies the parameter's purpose beyond the schema's title 'Workspace Name' and indicates it is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches detailed information for a specific workspace by name. It uses a specific verb ('Fetches') and resource ('workspace'), and distinguishes from siblings like list_workspaces (list all) and create_workspace (create).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool: 'Use this when you need detailed information about a particular workspace.' It does not explicitly exclude alternative tools like list_workspaces, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grep_object_storeA
Search for a regex pattern in a string stored in the object store.
Returns matches with surrounding context, similar to grep.
:param object_id: The id of the object to search in the format @obj_001.
:param pattern: Regular expression pattern to search for.
:param path: Navigation path to a nested string attribute (optional).
:param case_sensitive: Whether the search should be case sensitive (default: False).
:return: Matches with context, or a message if no matches found.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| pattern | Yes | ||
| object_id | Yes | ||
| case_sensitive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns matches with surrounding context (similar to grep) and explains each parameter's role. It does not mention side effects, authentication, or rate limits, but the behavior is clearly described as a read-only pattern search with optional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, starting with the main purpose and then listing parameters. It is front-loaded and each sentence adds value. The parameter list is slightly redundant with the schema but aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, 2 required, no output schema), the description is complete. It explains input format, optional parameters, and return value (matches with context or no-matches message). No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds meaningful explanations for each parameter: 'object_id' format (@obj_001), 'pattern' as regex, 'path' as navigation to nested attribute, and 'case_sensitive' default. This significantly enhances the schema's minimal definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: searching for a regex pattern in a string stored in the object store. It uses a specific verb ('search for') and resource ('string stored in the object store'), and distinguishes itself from sibling tools like 'get_from_object_store' and 'sed_object_store' by mentioning 'regex pattern' and 'similar to grep'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (search for patterns in object store strings) and includes optional parameters (path, case_sensitive) that guide usage. It does not explicitly state when not to use it or compare to alternatives, but the provided context (e.g., 'similar to grep') implies appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_component_familiesA
Lists all Haystack component families that are available on deepset.
:param haystack_version: Optional version of Haystack to use.
Pass the same version as specified in the pipeline yaml's dependencies section for the haystack-ai package.
:returns: ComponentFamilyList model or error message string
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| haystack_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses that the output is automatically stored and returns a preview with an object ID for further reference, which is a behavioral trait beyond the schema. It also notes the return type (ComponentFamilyList model or error message). While it doesn't explicitly state read-only or error conditions, the 'lists' verb implicitly indicates a safe read operation, and the storage behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by parameter and return information, then a short paragraph on output usage. It uses a structured format with :param and :returns tags, which aids scannability. While a bit lengthy, each sentence provides useful information without redundancy, earning a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description covers all necessary aspects: purpose, parameter semantics, return type, and the handling of returned object IDs. It also explains that the output is stored for later use, which is essential for the agent to understand the tool's behavior. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter (haystack_version) is thoroughly explained: 'Optional version of Haystack to use. Pass the same version as specified in the pipeline yaml's `dependencies` section for the `haystack-ai` package.' This adds crucial context beyond the raw schema, which only declares a nullable string. The description compensates fully for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Lists all Haystack component families that are available on deepset.' The verb 'lists' plus the resource 'Haystack component families' makes the purpose specific and unambiguous. It also distinguishes itself from sibling list tools (e.g., list_workspaces, list_pipelines) by targeting a unique resource category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides contextual guidance for the optional haystack_version parameter and explains how to use the returned object ID. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions. Usage is implied rather than stated, fitting the 'implied usage' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_component_installationsB
List custom component installations. :param limit: Maximum number of installations to return per page. :param after: The cursor to fetch the next page of results.
:returns: Custom component installations or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the return format (formatted preview with object ID) and mentions automatic storage for cross-function reference. However, it lacks details 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise but includes a Python-docstring style for parameters that adds length without improving clarity for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers pagination, return format, and object ID usage, compensating for lacking output schema. However, it omits error conditions and authorization requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains 'limit' as max per page and 'after' as cursor for pagination, adding meaning beyond the schema's type and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List custom component installations' as the action and resource, which is distinct from sibling tools like 'list_component_families' or 'list_indexes'. However, it does not explicitly differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, missing exclusion criteria or context about pagination limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsA
Lists the workspace's Datasets, newest first, without their test cases.
A Dataset is a named list of test cases (a recorded Session or a set of inputs, with optional
expected data) that an Experiment replays against a pipeline version. Each entry has its
dataset_id, test_case_count and the pipeline_ids its test cases belong to. Read the
test cases with get_dataset; pass dataset_id to create_experiment. The API has no
paging: a result of exactly limit Datasets may be cut off; raise limit (at most 200) or
narrow with pipeline_name.
:param pipeline_name: Only Datasets with a test case on this pipeline, when given.
:param limit: Most Datasets to return (at most 200).
:returns: The Datasets, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the newest-first ordering, that test cases are omitted, that the API has no paging so an exactly-limit result may be truncated, the hard cap of 200, and that output is auto-stored as an object reference. It omits any notion of permissions or failure modes beyond 'an error message'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded, but the text bloats with Sphinx-style ':param'/':returns' lines that duplicate the prose, plus generic object-store boilerplate repeated across tools. Several sentences could be merged without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers return shape (dataset_id, test_case_count, pipeline_ids), pagination caveat, and object-store handling. Only permission/error specifics and the limit default are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: pipeline_name is defined as a filter on Datasets having a test case on that pipeline, and limit is bounded at 200. The default of 50 from the schema is not restated, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb, resource, ordering ('newest first') and scope exclusion ('without their test cases'), and the following sentences define what a Dataset is and what fields each entry carries. An agent can distinguish it from get_dataset and list_experiments without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the agent: read test cases with get_dataset, pass dataset_id to create_experiment. That is concrete when-to-use guidance for follow-up actions, though it never states when this tool is the wrong choice (e.g., searching vs listing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deployment_activityB
Lists activation and revision activity for a deployment. :param deployment_id: ID of the deployment. :param after: The cursor to fetch the next page of results. :returns: Paginated list of activity events or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add a genuinely useful behavioral trait: output is automatically stored, returned as a preview with an @obj_ ID, and can be fed to object-store tools or other functions. However, it says nothing about permissions, result limits, or event types beyond 'activation and revision activity'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose leads, but the body mixes docstring-style :param/:returns tags with prose and then repeats the object-store workflow across three sentences. It is usable but padded, with some redundancy about passing the object ID to other functions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param, no-output-schema, no-annotation tool, the description does cover the return shape (paginated activity events/preview) and the object-store handoff, which is the main gap. It is nonetheless thin on parameter meaning and on how the activity list relates to the deployment revision tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does name both params, and 'after: the cursor to fetch the next page' usefully explains the opaque anyOf/null cursor field, but 'deployment_id: ID of the deployment' is tautological and adds nothing over the schema title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — listing activation and revision activity for a deployment — which is distinct from revision-listing siblings like list_deployment_revisions. It does not explicitly name or contrast with those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no condition that selects this tool over list_deployment_revisions, get_deployment_revision, or get_deployment_stats. The reader must infer the use case from the purpose sentence alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deployment_revisionsA
Lists revisions of a deployment, i.e. the history of pipeline configurations it has served. :param deployment_id: ID of the deployment. :param after: The cursor to fetch the next page of results. :returns: Paginated list of revisions or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose useful behavior: results are paginated via a cursor and the output is auto-stored as an object with a preview ID. However, it omits ordering, page-size limits, and permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and efficient, but the Sphinx-style param lines duplicate the schema and the four lines of object-store boilerplate add notable length. Structure is reasonable but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description still covers both parameters, the paginated return shape, and the object-store handoff mechanism. It is largely complete for a two-parameter list tool, missing only ordering and permission details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does document both parameters meaningfully ('ID of the deployment', 'cursor to fetch the next page'). It adds the needed semantics the bare schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('revisions of a deployment') and expands it concretely as 'the history of pipeline configurations it has served.' This cleanly distinguishes it from the singular sibling get_deployment_revision and the related create/activate revision tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the pagination cursor note and the object-store instructions, but the description never states when to prefer this over get_deployment_revision or list_deployments, nor any prerequisites. There is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsA
Lists deployments (AI Gateways) in the currently configured deepset workspace.
A deployment serves a pipeline behind a stable endpoint, independent of the pipeline's own draft/version history. :param after: The cursor to fetch the next page of results. :param group_label: Filter deployments by group label. :param tags: Filter deployments by tags (matches if any tag is present). :returns: Paginated list of deployments or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| after | No | ||
| group_label | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose key behavior: it is a read-style listing, results are paginated by cursor, and the output is stored in the object store with a preview object ID. It omits permission/auth requirements and any rate or scope limits, but the operational model is largely covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and parameters are front-loaded and useful, but the tail repeats itself: 'output is automatically stored and can be referenced in other functions' is restated by 'Use the returned object ID to pass this result to other functions,' so the final block does not fully earn its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description compensates by explaining the return shape (paginated list or error, formatted preview with @obj_123) and how to consume it via object store tools. Minor gaps remain on error cases and scope of the listing, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents all three parameters: after is the next-page cursor, group_label filters by group label, and tags filters with 'any tag present' semantics. That 'any match' clarification is meaning the schema alone could not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists deployments (AI Gateways)') plus the scope ('currently configured deepset workspace'), and adds a definition of what a deployment is. It distinguishes itself reasonably from siblings like get_deployment or list_deployment_revisions, though it never explicitly contrasts them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the filter parameters (group_label, tags) and cursoring suggest browsing/filtering a deployment inventory, but the description never says when to use this instead of get_deployment or create_deployment, nor states any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deployment_tagsB
Lists distinct tag strings attached to deployments in the workspace.
Useful for autocomplete when adding tags, or to see how deployments are currently grouped. :param name: Case-insensitive substring filter on tag names. :param order: Sort order for the returned tags, "ASC" or "DESC" (default "ASC"). :returns: List of distinct tag names or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| order | No | ASC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It conveys that this is a read (list) with a return shape plus a generic note that output is stored and referenceable via an object ID, which is genuinely useful. It does not disclose permission requirements or rate-limit behavior, and the object-store boilerplate is copy-pasted rather than tailored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening purpose and the :param/:returns lines are tight and front-loaded. However, four lines of generic object-store boilerplate ('The output is automatically stored...', '@obj_123', 'Use the object store tools...') are repeated filler that does not clearly apply to a tag-name list and dilutes the signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with no output schema, the description covers purpose, both params, and return type, which is adequate. But with zero annotations the behavioral profile (authorization, whether tags are workspace-scoped) is unstated, and the mismatched object-store text leaves the actual return contract ('list of distinct tag names or error message') ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document both parameters, and it does. 'name' is described as a case-insensitive substring filter on tag names, and 'order' is documented as ASC/DESC with default 'ASC' — semantic detail beyond the bare schema. Only a minor gap remains (no note that the default means omitted order sorts ascending).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Lists distinct tag strings attached to deployments in the workspace.' An agent can distinguish it from list_deployments or add_deployment_tag by the 'distinct tag strings' scope. It stops short of explicitly naming a sibling to route against, so it is clear rather than fully differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds usage context ('useful for autocomplete when adding tags, or to see how deployments are currently grouped'), which implies when it is helpful. However it never names the relevant alternatives (add_deployment_tag, delete_deployment_tag, list_deployments) or states exclusions, so routing is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_doc_sectionsA
List the main sections of the deepset AI Platform documentation.
Use this to understand what documentation is available and help users navigate
to the right section. Pass a section id to search_docs as section to limit
search results to that part of the docs.
:returns: A list of documentation sections with descriptions and URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it discloses that this is a read-only enumeration returning sections with descriptions and URLs via the ':returns:' note. It does not mention pagination or rate limits, but for a zero-argument list tool the behavioral profile is essentially complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: the purpose is front-loaded, followed by usage guidance and the return contract, with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial no-arg read tool with no output schema, the description covers purpose, when to use it, the sibling relationship, and the shape of the return value. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description doesn't need to explain parameter syntax, though it usefully notes that a returned section id is consumed elsewhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list documentation sections) with a scope qualifier ('main sections of the deepset AI Platform documentation'). It is clearly distinct from the sibling search_docs, which it references as a complementary query tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('to understand what documentation is available and help users navigate') and how it feeds into the alternative: passing a section id to search_docs as the section parameter. Both the use case and the hand-off to a sibling are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_evaluation_runsA
Lists a pipeline's Evaluation Runs, newest first: one Evaluator version judging one Session each.
Includes the runs behind a scoring run's cells and the ones run_evaluator made. Each has its
session_id, evaluator_version_id, outcome and metrics. Read one with
get_evaluation_run.
:param pipeline_name: Name of the pipeline.
:param limit: Most runs to return (at most 200). The API has no further paging: a result of exactly
this many may be cut off.
:returns: The runs, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden. It does disclose valuable behavior: newest-first ordering, the absence of further paging, and that a result of exactly `limit` may be truncated — but it says nothing about permissions, error modes beyond 'an error message', or cost of large limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and the ordering/caveat details are front-loaded and earn their place, but the docstring-style ':param'/':returns' lines and the three-sentence object-store boilerplate add bulk that is generic across tools and dilutes the high-value content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description does useful work by enumerating returned fields (session_id, evaluator_version_id, outcome, metrics) and explaining the object-ID preview workflow. It still omits guidance on how to interpret `metrics`, what `outcome` values mean, or behavior on an unknown pipeline name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for `limit`: it states the 200 cap and the paging/truncation caveat, which is meaningfully beyond the bare integer schema. `pipeline_name` is only glossed as 'Name of the pipeline', which is close to tautological for the sole required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists a pipeline's Evaluation Runs'), adds ordering ('newest first'), and defines the unit of a run ('one Evaluator version judging one Session each'). It also scopes which runs are included (scoring-run cells, run_evaluator output) and names get_evaluation_run as the single-item counterpart, so an agent can distinguish it from list_experiment_runs and other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to get_evaluation_run when it wants a single run, and clarifies which runs are covered. It lacks explicit when-not guidance versus adjacent listing tools (e.g. list_experiment_runs), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_evaluatorsA
Lists the Evaluators in the workspace.
An Evaluator is a versioned Python function that judges a Session and reports named Metrics.
Each entry carries its newest version's id and the Metrics that version declares (name, shape,
grain and, for a closed Label, its vocabulary and, if it declares one, its scale; for a
Score, its range and better), but not the source. Evaluators belong to the workspace,
not to a pipeline; a Metric Group picks which ones a scoring run judges with. The API has no
paging: a result of exactly limit Evaluators may be cut off, and Evaluators past the 200 cap
are reachable only by splitting the list with archived.
:param limit: Most Evaluators to return (at most 200).
:param archived: true for only archived Evaluators, false for only the others; omit for both.
:returns: The Evaluators, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| archived | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral load and does it well: it discloses that the API has no paging, that a result of exactly ``limit`` may be truncated, that there is a hard 200 cap, and that archived items are only reachable by splitting. It also states the response is auto-stored with an object ID token and must be resolved via object-store tools, which is non-obvious behavior. Minor gap: no auth or error-condition detail beyond "or an error message".
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is front-loaded and substantive, but the RST ``:param:``/``:returns:`` block duplicates prose already given above it, and the four-line object-store boilerplate at the end is generic filler that dilutes the message. Size is defensible for the concept density, but the structure is uneven.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating exactly which fields each entry carries (id, Metric name, shape, grain, label vocabulary, scale, range, better) plus what is omitted (source). Combined with the object-store retrieval note, an agent has enough to call and consume the result; only error/empty-case behavior is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: ``limit`` is bounded at 200 with a truncation caveat, and ``archived`` is spelled out as a tri-state (true = only archived, false = only active, omit = both) that the bare anyOf boolean schema does not convey. It stops short of stating the default behavior for ``limit`` explicitly as a number, but the semantics are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Lists the Evaluators in the workspace") and then defines what an Evaluator is (a versioned Python function judging a Session and reporting Metrics). It clearly distinguishes this from get_evaluator (single, with source) and list_evaluator_templates by noting the list carries only newest-version ids and declared Metrics, not source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it explains Evaluators belong to the workspace and that a Metric Group selects them for a scoring run, which hints at discovery workflows. It also gives concrete operational guidance for the >200 case (split with ``archived``), but never says when to prefer this over get_evaluator or list_evaluator_templates, and gives no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_evaluator_templatesA
Lists the built-in Evaluator templates: ready-made Evaluation Functions to start from.
They cover agent efficiency, agent quality, RAG quality and retrieval quality. Each has a key,
name, category, its python_code and the Metrics it declares. A template with a
judge_model asks a model per Session, so running it costs money. expected_columns are the
columns of a Dataset test case's expected data it reads. To use one, pass its name and
python_code to create_evaluator; the copy is yours and does not follow the template.
:returns: The templates, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the disclosure burden well: it names the fields returned, flags per-Session model cost for judge_model templates, warns that copies diverge from the template, and mentions error returns. The object-store boilerplate is generic but does explain the auto-stored output and @obj_ ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentences are front-loaded and informative, but the :returns: docstring line and the generic object-store paragraph are boilerplate that repeat framework conventions. The cost warning and copy-does-not-follow caveat earn their place; the trailing block does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of enumerating returned fields and explaining the object-store preview, so an agent knows what to expect. Cost implications and the create_evaluator handoff complete the picture; only an explicit when-not-to-use note is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to add and the baseline of 4 would normally apply. However, the description's field listing (key, name, category, python_code, judge_model, expected_columns) describes return values rather than parameters, so it is helpful context but not parameter guidance; a 3 reflects that neutral fit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the built-in Evaluator templates') and clarifies what a template is ('ready-made Evaluation Functions to start from'), which separates it from the user-created evaluator tools like list_evaluators. It does not explicitly name sibling list/search tools, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear follow-up path: pass a template's name and python_code to create_evaluator, and warns that the resulting copy does not track the template. It also notes judge_model templates cost money per Session. It lacks an explicit statement of when to prefer this over search_templates or list_evaluators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experiment_runsA
Lists scoring runs: a Metric Group's on one pipeline, or every one that judged a given Session.
A scoring run is a Metric Group judging chosen Sessions of one pipeline, outside any Experiment
(see start_experiment_run); the runs an Experiment makes are listed too. Give
metric_group_id for that group's runs, or session_id for the runs, of any Metric
Group, that judged that Session; each run names its Metric Group in
pipeline_experiment_id. Newest first, without their grids: status says whether the
fan-out finished, not whether every cell succeeded, window is what a window run judged
and resolved_sessions how many Sessions it had. Read one run's grid with
get_experiment_run.
:param pipeline_name: Name of the pipeline.
:param metric_group_id: List this Metric Group's runs. Give this or session_id.
:param session_id: List the runs that judged this Session. Give this or metric_group_id.
:param limit: Most runs to return (at most 200). The API has no further paging: a result of exactly
this many may be cut off.
:returns: The runs, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| session_id | No | ||
| pipeline_name | Yes | ||
| metric_group_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses ordering ('Newest first'), that grids are omitted from results, what status actually means ('whether the fan-out finished, not whether every cell succeeded'), the meaning of window and resolved_sessions, and a hard cap of 200 with no further paging and possible truncation. It does not cover authorization or permission requirements, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is dense, line-wrapped prose mixing domain definitions (what a scoring run is) with parameter documentation, followed by Sphinx-style :param: blocks and a boilerplate object-store paragraph. Several sentences, such as the explanation of what a scoring run is versus an Experiment run, could be tightened or moved after the actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does explain key return fields (status, window, resolved_sessions) plus the object-store preview, which is genuinely useful. But the boilerplate about '@obj_123' object IDs sits uneasily with a result set that also has a preview, and the definition never explains the pipeline_experiment_id field it newly introduces as where the Metric Group is named, leaving the returned record shape partly ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it explains that metric_group_id and session_id are mutually exclusive alternatives, and that limit is capped at 200 with no paging so an exactly-full result may be truncated. Only pipeline_name is handled tautologically ('Name of the pipeline'), which is the sole shortfall.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource: 'Lists scoring runs: a Metric Group's on one pipeline, or every one that judged a given Session.' It distinguishes two retrieval modes and routes single-run grid reading to get_experiment_run. The slight confusion between the tool name (list_experiment_runs) and the terminology 'scoring runs'/'pipeline_experiment_id' keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a clear selection rule between its own two modes ('Give metric_group_id for that group's runs, or session_id for ... that judged that Session') and points to get_experiment_run for grids. However, among a sibling set containing list_evaluation_runs, list_evaluation_tries, get_experiment_results and get_evaluation_run, only one alternative is named, so an agent gets no help choosing between the various list/get evaluation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experimentsA
Lists the workspace's Experiments, newest first.
An Experiment compares a candidate pipeline version against a baseline on the test cases of one
Dataset: each side gets its Sessions (reused, or replayed against its version) and is scored by
the same Metric Group. The baseline is another version, or, when recorded, the Sessions the
Dataset recorded. status and each side's status go REPLAYING, SCORING, then ENDED or
FAILED; a side's error says why it failed and scoring_counts how its evaluations ended.
Read how the candidate did against the baseline with get_experiment_results. To read one
side's scoring run cell by cell, pass its scoring_runs[].experiment_run_id, that entry's
pipeline_id resolved to a name with list_pipelines, and the Experiment's
metric_group_id to get_experiment_run. The API has no paging: a result of exactly
limit Experiments may be cut off; raise limit (at most 200) or narrow with pipeline_name.
:param pipeline_name: Only Experiments with either side on this pipeline, when given.
:param limit: Most Experiments to return (at most 200).
:returns: The Experiments, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses newest-first ordering, the absence of API paging and the resulting truncation ambiguity, the 200 cap, the REPLAYING/SCORING/ENDED/FAILED status lifecycle, the error and scoring_counts fields, and that output is auto-persisted as an object ID with a formatted preview. It omits any permission or cost considerations, and much of the status detail describes the Experiment object rather than this call's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the paging caveat are front-loaded, but the long middle paragraph reads as Experiment domain documentation and follow-up routing rather than guidance for this call. Combined with the generic object-store boilerplate at the end, a substantial fraction of the text is not load-bearing for invoking list_experiments.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema or annotations and only two optional parameters, and the description covers ordering, cap behavior, error results, and the auto-stored object-ID return, which is what an agent needs to call it correctly. Only the default limit and a contrast with list_experiment_runs are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: it explains that pipeline_name matches Experiments with *either* side on that pipeline (non-obvious semantics) and that limit is capped at 200. It never states the default limit of 50 that the schema declares, but otherwise the two parameters are meaningfully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope and ordering: 'Lists the workspace's Experiments, newest first.' It then defines what an Experiment is (candidate vs baseline on one Dataset's test cases), which lets an agent distinguish it from siblings like list_experiment_runs, get_experiment, and get_experiment_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear downstream routing: use get_experiment_results to read candidate-vs-baseline performance, and get_experiment_run with scoring_runs[].experiment_run_id plus metric_group_id for cell-by-cell detail. It also handles truncation ('a result of exactly limit may be cut off; raise limit or narrow with pipeline_name'). It does not, however, contrast this tool with the closest sibling, list_experiment_runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indexesA
Retrieves a list of all indexes available within the currently configured deepset workspace.
:param after: The cursor to fetch the next page of results.
If there are more results to fetch, the cursor will appear as next_cursor on the response.
:returns: List of indexes or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: read-only listing, pagination via cursor, automatic storage of output with object ID, and that the result is a formatted preview requiring further object store tools to explore nested properties.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is clear and front-loaded with the main purpose, but it includes some technical details about cursor and object ID that could be slightly more concise. Still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one optional parameter and no output schema, the description provides all necessary information: purpose, pagination, output format, and how to use the result with other tools. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'after' is fully explained: it is a cursor for pagination, and its usage is tied to the response field 'next_cursor'. This compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves a list of all indexes in the workspace, using a specific verb and resource. It distinguishes from siblings like create_index, get_index, and deploy_index by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied but not explicitly contrasted with alternatives like get_index for a single index. The description lacks guidance on when to choose list_indexes over other index-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metric_groupsA
Lists the workspace's Metric Groups, newest first.
A Metric Group is a named, ordered set of Evaluators. It belongs to the workspace, not to a
pipeline: a scoring run judges chosen Sessions of one pipeline with it, and an Experiment scores
both its sides with one. With pipeline_name, each entry's last_run is its newest scoring
run on that pipeline without the grid (status, selection, timing), or null when it never ran
there; read a run's results with get_experiment_run. weights says how much each Metric
counts toward the group's Composite (empty: no Composite); a weight with usable false
says in unusable_reason why it will not count in a new run. The API has no paging: a result
of exactly limit groups may be cut off (at most 200 are ever reachable).
:param pipeline_name: A pipeline to attach each Metric Group's most recent scoring run on.
:param limit: Most Metric Groups to return (at most 200). With pipeline_name each one costs a call.
:returns: The Metric Groups, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pipeline_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the lack of API paging, that a result of exactly limit may be truncated, that at most 200 groups are reachable, and that supplying pipeline_name costs one call per entry. It also explains that last_run is null when the group never ran on that pipeline and that weights flagged usable=false carry an unusable_reason.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the paragraph flows from definition to behavior to parameters, with no wasted sentences in the core prose. The trailing block about automatic object storage and object IDs is generic boilerplate that is only loosely tied to this tool, which trims a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must describe returns, and it does: last_run fields (status, selection, timing), weights and unusable_reason, and an error message on failure. It does not enumerate the rest of a group's entry shape (identifiers, name, ordering of Evaluators), leaving a modest gap for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply all parameter meaning, and it does for both: pipeline_name is described as attaching each group's most recent scoring run on that pipeline, and limit as a cap of 200 with a per-entry call cost when pipeline_name is set. It stops short of stating the default/bounds interaction beyond the 200 ceiling, but the semantics are substantive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource plus ordering: "Lists the workspace's Metric Groups, newest first." It then defines what a Metric Group is and how it relates to pipelines/experiments, which distinguishes it clearly from siblings like list_evaluators, create_metric_group, or list_experiments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context on when the tool is relevant (workspace-scoped named sets of Evaluators) and explicitly routes one follow-up need away from this tool: "read a run's results with get_experiment_run." It does not explicitly say when to prefer this over alternatives such as listing evaluators directly, or to call it before update/delete_metric_group, so a small gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipelinesA
Retrieves a list of all pipeline available within the currently configured deepset workspace.
:param after: The cursor to fetch the next page of results.
If there are more results to fetch, the cursor will appear as next_cursor on the response.
:returns: List of pipelines or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It explains pagination behavior (cursor, next_cursor) and automatic output storage with object IDs. However, it does not disclose idempotency, permissions, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient with about 6 sentences, front-loading the main purpose. Some sentences are explanatory but not overly verbose. Minor redundancy with object store instructions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional param, no output schema), the description adequately covers purpose, pagination, and output handling. Missing details on default behavior (e.g., first page without after) but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description fully explains the 'after' parameter, its role in pagination, and how to interpret the response's next_cursor. This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of all pipelines in the workspace, using specific verb 'Retrieves' and resource 'list of pipelines'. It distinguishes from siblings like 'get_pipeline' (single pipeline) and search variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing all pipelines with pagination support but does not explicitly state when to use this tool versus alternatives like search_pipeline. No exclusion or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipeline_search_historyA
Retrieves search history for a specific pipeline with pagination.
Returns past searches run with the given pipeline. Each entry includes the
search query (request.query), results (response), timing
(time/duration), status, user info, feedback, labels, and note.
Use the after parameter with next_cursor from the response to
fetch the next page.
:param pipeline_name: Name of the pipeline to get search history for.
:param limit: Maximum number of entries to return per page (default 10, max 1000).
:param after: ISO-8601 timestamp cursor to fetch entries older than this point.
Pass the value from next_cursor on the previous response.
:param query_filter: An OData filter expression to narrow down results.
Supported fields: query, client_source_path, pipeline_version_id, answer,
api_key, created_at, created_by, tags/tag_id, feedbacks, feedbacks/score,
feedbacks/comment, feedbacks/bookmarked, session_id, search_session_id,
feedbacks/result_id, request/filters, request/params, duration, labels,
status, note.
Example: "created_at ge 2024-01-01T00:00:00Z" or "status eq 'failed'".
:param sort_field: Field to sort results by. One of: created_at, query,
duration, feedbacks/score. Defaults to created_at.
:param sort_order: Sort direction — ASC (oldest first) or DESC (newest first).
Defaults to DESC.
:returns: Paginated list of search history entries or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| sort_field | No | created_at | |
| sort_order | No | DESC | |
| query_filter | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the per-entry payload shape (query, response, timing, status, user, feedback, labels, note), pagination semantics with the 10/1000 limit bounds, sort defaults, and the non-obvious side effect that results are auto-stored as an object reference (e.g. @obj_123) reusable via object-store tools. It omits permission/auth requirements, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary of what is fetched, followed by return shape, pagination instruction, then per-parameter notes — every section is scannable. The trailing object-store paragraphs are boilerplate but carry real behavioral information, so the length is mostly earned, though the query_filter field list is long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description supplies both the return-value shape and the storage/reference behavior, plus complete parameter semantics. An agent has everything needed to call it correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does for all six parameters: limit default and max, after as an ISO-8601 cursor taken from next_cursor, sort_field's allowed values plus default, sort_order direction semantics, and an enumerated field list with example OData expressions for query_filter. This is meaningfully richer than the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with a clear scope qualifier: retrieves search history for a specific (named) pipeline, with pagination. An agent can tell what it fetches, but the description never differentiates it from the sibling list_search_history, which by name covers a very similar surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Use the after parameter with next_cursor' tells how to paginate, and pipeline_name implies the scoping condition, but there is no explicit when-to-use-this-vs-list_search_history guidance and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipeline_tracesA
Lists Haystack pipeline run trace summaries for a specific pipeline.
Returns one lightweight summary per query run — query_id, query text, status,
timing (duration_s, created_at), and failure details if the run failed.
Summaries do not include spans or logs. Use this to browse runs, find slow or
failed queries, then pass a query_id to get_pipeline_trace for the full
execution trace (spans with essential tags such as component type),
get_pipeline_trace_span_tags for a single span with full tags (including input/output),
or get_pipeline_trace_logs for the logs of the trace.
Use the after parameter with next_cursor from the response to fetch
the next page.
:param pipeline_name: Name of the pipeline to retrieve traces for.
:param limit: Maximum number of trace entries to return per page (default 10).
:param after: ISO-8601 timestamp cursor from next_cursor on the previous response.
:param query_filter: An OData filter expression to narrow down results.
Supported fields: query, client_source_path, pipeline_version_id, answer,
api_key, created_at, created_by, tags/tag_id, feedbacks, feedbacks/score,
feedbacks/comment, feedbacks/bookmarked, session_id, search_session_id,
feedbacks/result_id, request/filters, request/params, duration, labels,
status, note.
Example: "status eq 'failed'" or "created_at ge 2024-01-01T00:00:00Z".
:param sort_field: Field to sort results by. One of: created_at, query,
duration, feedbacks/score. Defaults to created_at.
:param sort_order: Sort direction — ASC (oldest first) or DESC (newest first).
Defaults to DESC.
:returns: Paginated list of pipeline trace summaries or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| sort_field | No | created_at | |
| sort_order | No | DESC | |
| query_filter | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses what the summaries include (query_id, status, timing, failure details) and what they exclude ('do not include spans or logs'), and explains that the output is automatically stored and returns an object ID for later reference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and return semantics, then parameter docs. It is longer than minimal, but the length is justified by the parameter richness and usage guidance; no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six parameters, no output schema, and no annotations, the description fully covers return values, pagination, filtering, sorting, object ID handling, and differentiates from related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully with :param docs for all six parameters, including defaults, supported filter fields, enum values for sort_field, and OData filter examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Lists Haystack pipeline run trace summaries for a specific pipeline.' It clearly distinguishes itself from siblings like get_pipeline_trace, get_pipeline_trace_span_tags, and get_pipeline_trace_logs by stating it returns lightweight summaries without spans or logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use this to browse runs, find slow or failed queries, then pass a query_id to get_pipeline_trace for the full execution trace...' It also documents pagination via 'after' and 'next_cursor', and mentions alternatives for spans, tags, and logs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipeline_versionsA
Lists all versions of a pipeline, ordered by version number descending (newest first). :param pipeline_name: Name of the pipeline to list versions for. :param after: Cursor (version_id UUID) to fetch the next page of results. :returns: Paginated list of pipeline versions or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions pagination via 'after' cursor, auto-storage of output, and formatted preview with object ID. However, it lacks details on error handling, rate limits, or any destructive aspects. The read-only nature is implied but not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description includes a clear one-liner for purpose, parameter docs, and then extra sentences about auto-storage and object ID usage. While informative, it could be more concise by integrating the storage note with the return description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return format (formatted preview with object ID) and pagination. However, it does not describe the schema of each version or cover error scenarios, making it adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions for parameters (coverage 0%), so the description adds essential meaning: 'pipeline_name' as the target pipeline and 'after' as a cursor UUID for pagination. This compensates well for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Lists all versions of a pipeline' and specifies ordering 'by version number descending (newest first)'. It distinguishes this from siblings like get_pipeline_version (single version) and list_pipelines (list pipelines).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as get_pipeline_version, search_pipeline_with_filters, or list_pipeline_search_history. The description does not mention prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_search_historyA
Retrieves search history for the configured deepset workspace.
Returns past searches run in the workspace, including queries, answers, prompts, feedback, and metadata. Use this to inspect what users have searched for, analyze usage, or debug pipeline behavior.
Each entry includes:
request.query— the search query texttime/created_at— when the search randuration— how long it took (seconds)status— 'success' or 'failed'pipeline.name— which pipeline handled the queryresponse— the list of search resultsfeedback,labels,note— user annotations
Use the after parameter with the next_cursor value from the
previous response to fetch the next page.
:param limit: Maximum number of entries to return per page (default 10, max 1000).
:param after: ISO-8601 timestamp cursor to fetch entries older than this point.
Pass the value from next_cursor on the previous response.
:param query_filter: An OData filter expression to narrow down results.
Supported fields: query, client_source_path, pipeline_version_id, answer,
api_key, created_at, created_by, tags/tag_id, feedbacks, feedbacks/score,
feedbacks/comment, feedbacks/bookmarked, session_id, search_session_id,
feedbacks/result_id, request/filters, request/params, duration, labels,
status, note.
Example: "created_at ge 2024-01-01T00:00:00Z" or "query eq 'my search'".
:param sort_field: Field to sort results by. One of: created_at, query,
duration, feedbacks/score. Defaults to created_at.
:param sort_order: Sort direction — ASC (oldest first) or DESC (newest first).
Defaults to DESC.
:returns: Paginated list of search history entries or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| sort_field | No | created_at | |
| sort_order | No | DESC | |
| query_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers pagination, output storage, object ID referencing, and entry structure. It does not mention rate limits or auth but adequately communicates read-only behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, uses, entry fields, params, output). It is slightly verbose but each sentence adds value; could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 params, no annotations, no output schema), the description is remarkably complete: it explains pagination, output format, object ID usage, and parameter details thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description provides comprehensive parameter docs: limit, after, query_filter with examples, sort_field, sort_order with defaults and enumerations, adding significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves search history for the configured deepset workspace, listing past searches with detailed fields. It distinguishes itself from sibling tools like list_pipeline_search_history by focusing on workspace-level history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage scenarios (inspect searches, analyze usage, debug) and pagination guidance. However, it does not explicitly contrast with similar tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_secretsA
Lists all secrets available in the user's deepset organization or in a specific workspace.
Use this tool to retrieve a list of secrets with their names and IDs. This is useful for getting an overview of all secrets before retrieving specific ones. :param limit: Maximum number of secrets to return (default: 10) :param after: The cursor to fetch the next page of results
:returns: List of secrets or error message
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses useful traits: default limit, cursor pagination, return shape, and automatic object-store storage with an object ID. It does not mention permission requirements or rate limits, but it adds substantial context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and clear, but the description becomes repetitive around output storage and object IDs, repeating the same object-store usage guidance twice. The docstring formatting and extra return/object-store detail make it longer than needed for a two-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, but the description explains the return preview and object-store reference model well. It omits permission/auth context and mentions workspace scoping without a corresponding schema parameter, leaving a minor gap for an agent assessing whether and how to scope the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents both parameters: 'limit' as the maximum number of secrets with a default of 10, and 'after' as the cursor for the next page. It could add cursor format details, but the core semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') and resource ('secrets') and defines the scope as the user's deepset organization or a specific workspace. It also distinguishes the listing operation from retrieving individual secrets, so an agent can tell it apart from get_secret without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the tool is useful for getting an overview of all secrets before retrieving specific ones, which gives clear usage context. It does not name the sibling get_secret directly or state when-not to use this tool, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsA
Lists a pipeline's Sessions that a scoring run can judge, newest last activity first.
A Session is the turns that share a search_session_id; a run without one is a single-turn
Session named by its query_id. Only Sessions whose every turn still has its trace are
listed. session_id is the id a scoring run takes. To find Sessions that went wrong
(a failed turn, negative feedback), use list_pipeline_traces with an OData filter instead
and take each row's search_session_id, or its query_id when that is empty.
:param pipeline_name: Name of the pipeline.
:param origin: Only Sessions whose every turn came from a Service, the pipeline's own API, or the Playground.
:param deployment_id: Only Sessions whose every turn this Service served.
:param pipeline_version_id: Only Sessions whose every turn this pipeline version served.
:param revision_id: Only Sessions whose every turn this Service revision served. Exact where a
version is not: one version can be pushed to a Service more than once.
:param since: ISO-8601 time; only Sessions last active at or after it.
:param until: ISO-8601 time; only Sessions last active at or before it.
:param limit: Most Sessions per page (at most 200). A page can hold fewer and still have a next.
:param cursor: The next value of the previous page.
:returns: One page of Sessions, or an error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| until | No | ||
| cursor | No | ||
| origin | No | ||
| revision_id | No | ||
| deployment_id | No | ||
| pipeline_name | Yes | ||
| pipeline_version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations at all, so the description carries the full burden, and it discloses several non-obvious behaviors: the result is filtered to Sessions whose every turn still has its trace, paging is cursor-based and a short page can still carry a next, and the output is auto-stored as an object (@obj_123) that must be retrieved via object-store tools. It does not discuss permissions, rate limits, or what 'error message' looks like, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the concept and the key inclusion rule, then a compact param list where every line adds information. The closing four sentences about the object store are somewhat boilerplate and partly restate the same idea (use the object id to explore), which is the only real slack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description supplies the return contract itself (one page of Sessions or an error message) and explains the object-store handoff needed to read nested properties. For a 9-parameter, paged listing tool with a domain-specific inclusion rule, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all nine parameters with genuine meaning beyond types: per-parameter constraints are 'every turn' constraints (origin, deployment_id, pipeline_version_id, revision_id), revision_id is explained as exact where a version is not because one version can be redeployed, since/until are defined as last-activity bounds, limit is capped at 200, and cursor is the previous page's next value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (lists a pipeline's Sessions) plus a scope qualifier (only Sessions a scoring run can judge, newest-last-activity-first ordering). It defines what a Session even is (turns sharing a search_session_id, or a single-turn Session keyed by query_id) and names a sibling tool for a different purpose, so an agent can distinguish it from list_pipeline_traces without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this to enumerate judgeable Sessions, but to find Sessions that went wrong (failed turn, negative feedback) use list_pipeline_traces with an OData filter and take search_session_id or query_id from each row. It even distinguishes the two id fields, which is the exact confusion an agent would have.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesA
Retrieves a list of all available pipeline and indexing templates.
:param limit: Maximum number of templates to return (default: 100).
:param pipeline_type: The type of pipeline to return.
:param after: The cursor to fetch the next page of results.
If there are more results to fetch, the cursor will appear as next_cursor on the response.
:returns: List of pipeline templates or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| limit | No | ||
| pipeline_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses pagination via 'after' parameter and 'next_cursor' response, and explains that output is automatically stored and can be referenced via object ID. However, it does not mention rate limits or authorization needs, which are less critical for a read-only list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with parameter documentation and return behavior. It is concise, with each sentence adding value, though the object storage guidance could be integrated more tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return format (list, object ID, store), cursor pagination, and a note about error messages. It adequately handles three parameters, but could mention empty result cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains each parameter: limit (default 100), pipeline_type (type of pipeline), and after (cursor for pagination). It adds operational meaning beyond the schema's type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of all available pipeline and indexing templates. It uses a specific verb ('retrieves') and resource ('templates'), distinguishing it from sibling tools like list_indexes and list_pipelines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives such as search_templates. It mentions pagination but lacks explicit context for when this tool is appropriate or when to use other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesB
Retrieves a list of all workspaces available to the user.
This tool provides an overview of all workspaces that the user has access to. Each workspace contains information about its name, ID, supported languages, and default idle timeout settings. :returns: List of workspaces or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses behavioral traits such as automatic storage of output and returning an object ID for further reference, but it does not explicitly state read-only safety or any side effects. This adds moderate value beyond a simple list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose with redundancy in the first two sentences. It is structured with a clear purpose sentence followed by output details, but could be more concise. The information about object ID usage is useful but could be integrated more tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (0 parameters, no output schema, no annotations), the description covers the purpose, output fields, and how to use the result (object ID). It is fairly complete, though it could mention potential limitations like pagination or authentication requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100%. The description adds meaning by describing the output structure (fields like name, ID, languages, idle timeout) and how to use the object ID. This justifies a score above the baseline of 3, but not 5 as it could be more specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves a list of all workspaces available to the user, using specific verb 'Retrieves' and resource 'list of all workspaces'. It also enumerates the per-workspace fields (name, ID, supported languages, idle timeout). However, it does not explicitly differentiate from sibling tools like get_workspace or other list tools, settling for a score of 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as get_workspace or other list tools. It merely states what it does without contextual advice, resulting in a low score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_skillA
Loads the full content of a bundled skill guide by name.
Use this tool to read the step-by-step instructions for a specific skill supported by this server.
Available skills: - custom-code: Use this skill whenever writing, generating, reviewing, or fixing a Haystack custom component (deepset_cloud_custom_nodes.code.code_component.Code) or custom tool (deepset_cloud_custom_nodes.tools.code_tool.CodeTool) for the deepset/Haystack enterprise platform. Triggers include requests to create a custom component, a custom tool, to check custom code against the platform's structural constraints (single class/function per file, required decorators, type annotations, allowed dependencies), or to extend the existing pipeline for functionality that is not already covered by existing components.
:param skill_name: The name of the skill to load (see the list above). :returns: The skill's markdown content, or an error message listing available skills if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return format (markdown content) and error behavior (message listing available skills if not found), which gives useful behavioral expectations. It does not mention side effects or permissions, but for a read-only skill loader this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an opening definition, usage sentence, bulleted skill list, and param/returns sections. The custom-code skill explanation is somewhat lengthy but provides valuable context, earning its place. No wasted words overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, this description is complete: it covers purpose, when to use, parameter semantics, return value, and error handling. The inclusion of the available skill list makes it self-contained. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates. It explicitly states the parameter meaning ('The name of the skill to load') and provides an enumerated list of valid values (custom-code), effectively serving as an inline enum. This gives the agent everything needed to populate skill_name correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Loads the full content of a bundled skill guide by name.' This clearly distinguishes the tool from siblings like get_template or search_templates by focusing on skill guides rather than templates or generic docs. The additional detail about available skills further clarifies its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this tool to read the step-by-step instructions for a specific skill supported by this server,' providing clear context for when to invoke it. It also lists a concrete skill with trigger scenarios, but it does not explicitly mention when not to use it or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_pipeline_versionA
Updates fields of an existing pipeline version in place.
At least one of yaml_configuration, description, or is_draft must be provided. :param pipeline_name: Name of the pipeline. :param version_id: UUID of the version to update. :param yaml_configuration: New YAML configuration for the version (optional). :param description: New description for the version (optional). :param is_draft: New draft status for the version (optional). :returns: The updated pipeline version or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
patch_pipeline_version(data={'key': 'value'}, threshold=10)
# Call with references
patch_pipeline_version(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
patch_pipeline_version(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| is_draft | No | ||
| version_id | Yes | ||
| description | No | ||
| pipeline_name | Yes | ||
| yaml_configuration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It mentions that it updates in place, returns the updated pipeline version or error, and explains object reference and object store usage. However, it does not discuss permissions, atomicity, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, parameter list, reference explanation, and examples. It is appropriately sized but some redundancy exists in repeating the parameter explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers purpose, parameters, references, and output. It mentions the return is an object ID stored in object store. Could be improved by describing the structure of the updated version or common error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by listing each parameter with a brief explanation, including that they accept object references. Examples further clarify usage. Could add more detail on accepted formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates fields of an existing pipeline version in place, which distinctly differs from create (create_pipeline_version) and restore (restore_pipeline_version) siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that at least one optional field must be provided but does not explicitly compare with alternatives like create_pipeline_version or restore_pipeline_version. The context is clear but lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_test_casesA
Removes test cases from a Dataset. Destructive: the removed test cases are gone, so get a yes first.
Ids that are not in the Dataset are ignored. :param dataset_id: The Dataset's id. :param test_case_ids: The test cases to remove. :returns: The Dataset with the test cases left, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ||
| test_case_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present the description accepts the full burden and does reasonably well: it labels the operation destructive, warns that removed cases are unrecoverable, and documents the notable no-op behavior that unknown ids are silently ignored. It omits permission/auth requirements and what happens if the resulting dataset becomes empty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Behavior and the confirmation warning are front-loaded in the first two sentences, and the docstring parameter lines are short. The ':param:'/'returns' formatting is slightly mechanical but each line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description covers the destructive consequence, the idempotency edge case, and the return value ('the Dataset with the test cases left, or an error message'). Only auth/permission context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry both parameters, and it does — dataset_id as the target Dataset and test_case_ids as the cases to remove. The added note that ids absent from the Dataset are ignored gives meaningful semantics beyond the bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource plus its container ('Removes test cases from a Dataset'), which separates it from delete_dataset, add_test_cases, and update_test_case. It does not explicitly name those siblings, so an agent must infer the boundary rather than being routed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real precondition ('get a yes first') for a destructive operation, which is more than most mutation tools offer. However, it never states when to use removal versus update_test_case or how it differs from add_test_cases' inverse, so the when-to-use guidance is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replay_sessionA
Replays one Session against a pipeline version into a new Session. Costs money.
Experiment support, for when you need it: to reproduce or retry the replay of one test case
that failed or looks wrong, replay that test case's Session on the version the Experiment's side
uses. It is a paid pipeline run on the customer's models: say what it costs and get a yes first.
The replay is not linked to the Experiment, so the new Session is not added to it and changes none
of its results. To retry an Experiment's failed replays inside the Experiment, use
rerun_failed_experiment with rerun="replays". The source Session and the deployed pipeline
are untouched.
FIRST_USER_MESSAGE replays the first turn only; ALL_USER_MESSAGES replays every turn of a chat in
order. Leave it unset to use the server's default (the first turn), and say so when reporting.
The run's session_id is the new Session; judge it with try_evaluator. If status is
still CREATED or STARTED the wait ran out: poll get_session_replay with its
session_replay_run_id. When it is FAILED, read error_detail and the logs.
setup_source and cleanup_source are optional Python run around the pipeline in an isolated
worker. Setup must define exactly one public top-level function taking no arguments and returning a
mapping with optional env (dict[str, str]), inputs (dict[str, Any], keyed by the pipeline's
declared input names) and logs (list[str]); its env and inputs take precedence over the
Session's own. Cleanup runs even when the replay failed; it must define one public top-level function
taking the setup's return value (None without a setup) and returning a mapping with optional logs.
Helpers must be underscore-prefixed or imported. Omit either to skip that step.
:param pipeline_name: Name of the pipeline.
:param session_id: The Session to replay: a search_session_id, or a single-turn run's query_id.
:param pipeline_version_id: The pipeline version to replay against, e.g. the Experiment side's version.
:param replay_mode: FIRST_USER_MESSAGE or ALL_USER_MESSAGES; unset uses the server's default.
:param setup_source: Python source run before the pipeline; unset skips the step.
:param cleanup_source: Python source run after the pipeline; unset skips the step.
:param wait_seconds: How long to wait for the replay before handing back the run to poll.
:returns: The replay run, with the new Session's session_id, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| replay_mode | No | ||
| setup_source | No | ||
| wait_seconds | No | ||
| pipeline_name | Yes | ||
| cleanup_source | No | ||
| pipeline_version_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present the description carries the full burden and does: it discloses monetary cost, that the replay is unlinked from the Experiment and mutates none of its results, that the source Session and deployed pipeline are untouched, that cleanup runs even on failure, that wait_seconds can expire into CREATED/STARTED requiring get_session_replay polling, and that FAILED requires reading error_detail and logs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, cost, and the alternative before details, and most sentences earn their place. Minor waste: the trailing ':param ...' block restates replay_mode, setup_source, cleanup_source, and wait_seconds that the prose already covered, adding length without new meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, unannotated, no-output-schema mutation tool with real cost implications, this is complete: it covers return shape ('the replay run, with the new Session's session_id'), success judgment via try_evaluator, and the failure/polling paths. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and 7 parameters are undocumented structurally, yet the description defines each one meaningfully: session_id accepts either a search_session_id or a single-turn query_id, pipeline_version_id is framed as the Experiment side's version, replay_mode's two enum values are explained plus the unset default, and setup_source/cleanup_source have their full callable contract, precedence rules, and lifetime spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb, resource, and effect: 'Replays one Session against a pipeline version into a new Session.' It also explicitly names the sibling it is not (rerun_failed_experiment with rerun="replays"), so an agent can route between the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the narrow triggering scenario ('to reproduce or retry the replay of one test case that failed or looks wrong'), the exclusion ('to retry an Experiment's failed replays inside the Experiment, use rerun_failed_experiment'), and a required precondition (get user consent after stating cost).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rerun_failed_experimentA
Retries what failed in an Experiment. Costs money: judges or replays again.
rerun="evaluations" judges again the evaluations a side's scoring run left failed or
errored (see scoring_counts in get_experiment), reusing every one that succeeded; it
bills only those Evaluators again. rerun="replays" replays again the replays that failed
(run_counts.failed), reusing every Session that exists, then scores that side again, which
bills the new Sessions' replays and evaluations. hub-api refuses with a message when nothing
failed or while a side is still running. Follow progress with get_experiment.
:param experiment_id: The Experiment's id.
:param rerun: Which failures to retry: "evaluations" (default) or "replays".
:returns: The Experiment, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| rerun | No | evaluations | |
| experiment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so well: it discloses that the call costs money, exactly which units get re-billed per mode (only failed Evaluators vs new Sessions' replays plus evaluations), that successful work is reused rather than redone, and how hub-api signals an invalid request. The reference to ``scoring_counts`` / ``run_counts.failed`` tells the agent how to verify eligibility beforehand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Strong front-loading: the one-line summary and cost warning come before any detail. But there is real waste — the closing ':param experiment_id: The Experiment's id.' and ':returns:' lines duplicate structured fields, and 'Costs money: judges or replays again' is a slightly garbled restatement of points made more precisely in the paragraphs below.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough for a costly mutation: cost model, mode semantics, reuse behavior, refusal conditions, and the follow-up tool are all present, and the ':returns:' line compensates for the absent output schema. Minor gaps remain — no mention of required permissions or whether the original experiment's prior results are mutated in place versus versioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter meaning, and the body prose does explain operationally what 'evaluations' and 'replays' each re-run. However, the trailing ':param' block only restates the names and enum values already present in the schema, adding no format, length, or resolution detail for experiment_id. The genuinely additive semantics live in the prose, not the parameter block.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Retries what failed in an Experiment', and immediately qualifies it as a paid operation. The two supported modes (evaluations vs replays) are spelled out, so the agent knows exactly what class of work the tool performs. It stops short of naming the nearest sibling, rescore_experiment, which an agent could plausibly confuse with the 'evaluations' mode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete selection guidance between the two modes and states the preconditions under which the tool refuses ('when nothing failed or while a side is still running'), plus a pointer to get_experiment for progress. It does not contrast the tool with sibling operations such as rescore_experiment or list_experiment_runs, so the agent must infer which tool to reach for in overlapping scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rescore_experimentA
Scores both sides of an Experiment again with the Metric Group as it is now. Costs money.
Use it after changing the Metric Group's Evaluators or weights (update_metric_group,
update_evaluator). Every Session is judged again, so every evaluation is billed again; the
Sessions are not replayed. hub-api refuses with a message while a side is still running or if
no side has been scored. Follow progress with get_experiment, then read
get_experiment_results.
:param experiment_id: The Experiment's id.
:returns: The Experiment, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it warns that the call costs money and that every evaluation is billed again, clarifies that sessions are not replayed (so no new execution data appears), and reports that hub-api returns an error message while a side runs or when nothing has been scored. That is exactly the cost/irreversibility/error surface an agent needs before invoking a paid mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly: the action and the cost warning appear in the first two sentences, with preconditions and follow-ups after. The trailing ':param'/':returns' docstring fragments are slightly mechanical, but every sentence still carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description explicitly closes that gap ("The Experiment, or an error message"), while also covering preconditions, cost implications, and next-step tools. For a one-parameter paid mutation, nothing material needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has no schema description (0% coverage), and the description supplies only "The Experiment's id." — which identifies the field but adds no format, sourcing, or lookup guidance (e.g. how to obtain the id). Given the parameter is a plain required identifier whose meaning is largely self-evident, this is close to adequate but not fully compensating for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Scores both sides of an Experiment again") plus the scoping condition ("with the Metric Group as it is now"). It implicitly separates itself from session-replay siblings by saying "the Sessions are not replayed" and from update tools by naming update_metric_group/update_evaluator as prerequisites rather than alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ("Use it after changing the Metric Group's Evaluators or weights"), names the two tools that create that situation, and states the refusal conditions (a side still running, or no side scored). It also names the follow-up chain get_experiment then get_experiment_results, so the agent knows what to do before and after.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_pipeline_versionC
Restores a non-draft pipeline version to be editable as a new draft.
The previous draft (if any) is finalized, getting an incremented version number. :param pipeline_name: Name of the pipeline to restore. :param version_id: UUID of the version to restore. :returns: The restored pipeline version or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
restore_pipeline_version(data={'key': 'value'}, threshold=10)
# Call with references
restore_pipeline_version(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
restore_pipeline_version(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses two key behaviors: finalizing the previous draft with an incremented version number, and that the output is automatically stored in the object store. However, it does not explain potential irreversibility (finalization may be destructive) or required permissions. The side effects are mentioned but not thoroughly explored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose but includes irrelevant and incorrect examples (e.g., 'data', 'threshold' parameters) and a repetitive explanation about object references. The core purpose and side effects are front-loaded, but the extraneous content harms conciseness. Every sentence does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool modifies state and returns an object store reference, but the description does not cover edge cases (e.g., what if no previous draft exists? what if version is already a draft?). With no output schema, the return format is only partially described ('formatted preview'), lacking details. The incorrect examples further reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully explain parameters. It clarifies version_id as a UUID and pipeline_name as the name, but the examples are grossly incorrect, suggesting parameters 'data' and 'threshold' that do not exist in the schema. This undermines the parameter description and could mislead an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the tool restores a non-draft pipeline version to be editable as a new draft with side effects. However, the examples that follow are contradictory, using parameters 'data' and 'threshold' that do not match the actual schema, which confuses the intended purpose. The verb 'restore' and resource 'pipeline version' are specific, but the incorrect examples lower clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not specify when to use this tool versus alternatives like patch_pipeline_version. It lacks any guidance on prerequisites (e.g., ensuring the version is non-draft) or when not to use it. The sibling tools include patch_pipeline_version for editing drafts, but no comparison is provided, leaving an agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_componentA
Run a Haystack component with the given parameters.
This tool allows you to execute a Haystack component by providing its type
and initialization parameters, then passing input data to get results.
Use this to test components and see how they would work in your pipeline.
:param component_type: The type of component to run
(e.g., "haystack.components.builders.prompt_builder.PromptBuilder")
:param init_params: Initialization parameters for the component
:param input_data: Input data for the component
:param input_types: Optional type information for inputs (inferred if not provided). For custom types use the full
import path (e.g. haystack.dataclasses.document.Document for Document)
:param haystack_version: Optional version of Haystack to use for the component.
Pass the same version as specified in the pipeline yaml's dependencies section for the haystack-ai package.
:returns: Dictionary containing the component's outputs or error message string
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
run_component(data={'key': 'value'}, threshold=10)
# Call with references
run_component(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
run_component(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| input_data | No | ||
| init_params | No | ||
| input_types | No | ||
| component_type | Yes | ||
| haystack_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It transparently explains that outputs are stored and returned as object IDs, supports object references, and notes error message returns. It does not mention side effects or resource implications, but the execution nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear sections: purpose, parameters, examples, and output behavior. It front-loads the core purpose and uses formatting (code blocks, :param tags) to improve readability. Some redundancy exists (e.g., repetition of 'output is automatically stored') but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, no output schema) and lack of annotations, the description is remarkably complete. It covers parameter semantics, object reference syntax, output storage and retrieval via object ID, error handling, and versioning considerations. It leaves no significant gaps for an agent to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It explains each parameter (component_type, init_params, input_data, input_types, haystack_version) and provides concrete examples with object references and error handling. This far exceeds the schema's minimal type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Run a Haystack component with the given parameters' and elaborates on executing components to get results. It distinguishes itself from sibling tools by focusing on component execution/testing rather than pipeline management or object store operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context ('Use this to test components and see how they would work in your pipeline') and gives practical examples. However, it does not explicitly mention when not to use this tool or suggest alternative tools for related tasks, though the sibling list makes the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_evaluatorA
Runs one Evaluator version on one Session and keeps the result. A judged Evaluator costs money.
Unlike try_evaluator, which runs source you send and stores nothing, this runs a saved
Evaluator version and stores an Evaluation Run that shows in list_evaluation_runs and in the Metric's history
over time. Use it to judge one Session with
an Evaluator that already exists; to judge many Sessions with a Metric Group use
start_experiment_run. An Evaluator that judges with a model costs a model call per judged
turn on the customer's provider, so say so and get a yes first. Find the version id with
get_evaluator (latest_version or versions) and the Session with list_sessions.
outcome ERRORED means the Evaluator's code broke: read error_detail. metrics are
the values per address with their rationales. If status is still CREATED or STARTED the
wait ran out: poll get_evaluation_run with the evaluation_run_id.
:param pipeline_name: Name of the pipeline the Session belongs to.
:param evaluator_version_id: The exact Evaluator version to run.
:param session_id: The Session to judge: a search_session_id, or a single-turn run's query_id.
:param wait_seconds: How long to wait for the result before handing back the id to poll.
:returns: The Evaluation Run, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| wait_seconds | No | ||
| pipeline_name | Yes | ||
| evaluator_version_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does: it discloses persistence (an Evaluation Run appears in list_evaluation_runs and Metric history), the monetary cost of model-judged Evaluators with an instruction to confirm first, and the meaning of outcome=ERRORED and lingering CREATED/STARTED status with the polling fallback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and effect, then alternatives, then cost, then result semantics, then param docs — a sensible order. The cost warning is effectively stated twice (the standalone 'costs money' line and the later per-turn model-call sentence), which is mild redundancy in an otherwise dense passage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description still covers invocation prerequisites, cost/consent, return shape (metrics per address with rationales, error_detail), and the async/polling path. Nothing an agent needs to call it correctly or interpret the response is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet every one of the four parameters is explained: pipeline_name's relationship to the Session, evaluator_version_id as the exact version (with where to find it), session_id accepting either a search_session_id or a single-turn query_id, and wait_seconds as the timeout before returning an id to poll. This compensates fully for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource+effect: runs one Evaluator version on one Session and persists the result. It immediately distinguishes itself from try_evaluator (stores nothing) and start_experiment_run (many Sessions via Metric Group), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('judge one Session with an Evaluator that already exists'), explicit alternatives for adjacent cases ('to judge many Sessions with a Metric Group use start_experiment_run'), and explicit non-equivalence with try_evaluator. It even tells the agent how to obtain the required ids via get_evaluator and list_sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_component_definitionsA
Searches for components based on name or description using semantic similarity.
:param query: The search query
:param top_k: Maximum number of results to return (default: 5)
:param haystack_version: Optional version of Haystack to use.
Pass the same version as specified in the pipeline yaml's dependencies section for the haystack-ai package.
:returns: ComponentSearchResults model or error message string
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| haystack_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that output is automatically stored, returns a formatted preview with an object ID, and explains how to use the object ID with object store tools. It also notes the possibility of an error message string. This goes beyond a simple 'search' description, though it stops short of discussing permissions 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening statement, parameter docs, and return behavior. It is slightly long but every sentence conveys useful information, especially the object ID usage instructions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the search behavior, parameter usage, return type, storage mechanism, and how to reference the result via object ID. It is sufficient for an agent to correctly invoke and use the tool, though it could be even more complete by explaining the semantics of 'semantic similarity' in terms of matching behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining all three parameters: query, top_k (with default and meaning), and haystack_version (with detailed guidance on matching the pipeline yaml). This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool 'Searches for components based on name or description using semantic similarity,' which is a specific verb+resource+method. This clearly distinguishes it from sibling search tools like search_docs and search_pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (semantic search for components) and even adds a note about matching the haystack_version to the pipeline yaml. However, it does not explicitly exclude alternative tools or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsA
Search the Haystack Enterprise Platform documentation.
Use this to find information about Haystack components, pipelines, document stores, embedders, generators, retrievers, and other AI platform features. Returns relevant documentation excerpts with source URLs.
:param query: The search query. Be specific about what you're looking for.
Examples: 'How to create a RAG pipeline', 'OpenAI embedder configuration',
'document store filters'.
:param section: Optional documentation section id from list_doc_sections (for example,
how-to-guides or api). Limits results to that section.
:returns: Relevant documentation excerpts with source URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| section | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return shape ('excerpts with source URLs') and that section narrows results, but says nothing about ranking, result count limits, pagination, or empty-result behavior for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then scope, then parameters. Sphinx-style ':param:' markup is slightly verbose and the ':returns:' line restates the 'source URLs' already stated in the opening paragraph, a minor redundancy but not wasteful overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must stand alone; it covers purpose, both parameters, and the return contents, which is nearly enough for a two-parameter read tool. It stops short on result-volume and pagination behavior, the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: 'query' is explained with three concrete example queries, and the optional 'section' is defined as a section id sourced from list_doc_sections with two examples ('how-to-guides', 'api'). This resolves the meaning and provenance of both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search the Haystack Enterprise Platform documentation') and enumerates the topical scope (components, pipelines, document stores, embedders, generators, retrievers). It is implicitly distinct from sibling search tools like search_pipeline and search_templates, but never names them, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when to use it ('Use this to find information about Haystack components, pipelines...') and points to list_doc_sections as the source for valid section ids, which is a genuine routing hint. No when-not guidance or exclusion against the other search_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pipelineA
Searches using a pipeline.
Uses the specified pipeline to perform a search with the given query. Before executing the search, checks if the pipeline is deployed (status = DEPLOYED). Returns search results. :param pipeline_name: Name of the pipeline to use for search. :param query: The search query to execute.
:returns: Search results or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| pipeline_name | Yes |
TDQS
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 checks deployment status, returns search results, automatically stores output with an object ID, and can return error messages. This adds valuable context beyond a simple search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose with repetition (e.g., 'Returns search results' and 'Returns a formatted preview'). It could be more concise by merging statements, but it is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two simple parameters and no output schema, the description covers the main behavior: deployment check, object ID storage, and integration hints. Lacks details on error types or pagination, but it is mostly complete for a basic search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% parameter description coverage, but the description explicitly documents each parameter with clear meaning (pipeline_name, query). Although not exhaustive on formats, it sufficiently compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches using a pipeline with a given query. However, it does not differentiate from sibling tools like search_pipeline_with_filters or search_pipeline_with_params, which might have more specific purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a pipeline is available and deployed (checks status) but does not provide explicit guidance on when to use this tool versus alternatives. No exclusions or preferred contexts are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pipeline_with_filtersB
Searches using a pipeline with filters.
Uses the specified pipeline to perform a search with the given query and filters. Filters follow the Haystack filter syntax: https://docs.haystack.deepset.ai/docs/metadata-filtering. Before executing the search, checks if the pipeline is deployed (status = DEPLOYED). Returns search results. :param pipeline_name: Name of the pipeline to use for search. :param query: The search query to execute. :param filters: The filters to apply to the search.
:returns: Search results or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| filters | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the pre-execution deployment check and that output is stored with an object ID. However, no annotations are present, and the description does not cover permissions, rate limits, or read-only nature. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is somewhat verbose with redundant phrasing (e.g., 'Searches using...' and 'Uses the specified pipeline...'). The docstring format is structured but could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks details on return value structure; only says 'search results or error message' and mentions a formatted preview. Without an output schema, the description should specify result fields or types. Incomplete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by explaining all three parameters: pipeline_name, query, and filters (with link to syntax). Adds meaningful context beyond the schema's type and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool performs a search using a pipeline with filters (verb+resource). It distinguishes from siblings like 'search_pipeline' and 'search_pipeline_with_params' by explicitly mentioning Haystack filter syntax and the pipeline deployment check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., 'search_pipeline' or 'search_pipeline_with_params'). Does not mention when not to use or prerequisites beyond the deployment check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pipeline_with_paramsA
Searches using a pipeline with params.
Uses the specified pipeline to perform a search with the given query and params. Params can be arbitrary parameters to customize the search behavior. Filters can be used as well under the "filters" key in params. Filters follow the Haystack filter syntax: https://docs.haystack.deepset.ai/docs/metadata-filtering. Before executing the search, checks if the pipeline is deployed (status = DEPLOYED). Returns search results. :param pipeline_name: Name of the pipeline to use for search. :param query: The search query to execute. :param params: The parameters to customize the search.
:returns: Search results or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| params | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses key behaviors: it checks if the pipeline is deployed before executing, stores results in an object store for later reference, and returns a formatted preview with an object ID. It also notes potential error messages. This level of detail helps an AI agent understand side effects and output format, though it does not mention rate limits or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose and contains redundancy, e.g., the first two sentences both state the same idea: 'Searches using a pipeline with params.' and 'Uses the specified pipeline to perform a search...'. It also includes a docstring-style parameter list that could be integrated more succinctly. While it is clearly structured, it could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and low schema coverage, the description provides comprehensive context: it explains the pre-execution check, the return format (error messages or object ID preview), and the object store integration. It also hints at using object store tools to view nested properties. This covers the essential aspects needed for an AI 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well. It defines each parameter: pipeline_name ('Name of the pipeline to use'), query ('The search query to execute'), and params ('parameters to customize the search'). For params, it adds that arbitrary parameters are allowed and that filters can be specified under the 'filters' key, with a link to the Haystack filter syntax. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Searches using a pipeline with params.' It specifies the verb 'searches' and the resource 'pipeline with params', making the function distinct. However, it does not explicitly differentiate from sibling tools like search_pipeline and search_pipeline_with_filters, which could confuse an AI agent when selecting among them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention conditions for choosing this tool over search_pipeline or search_pipeline_with_filters, nor does it explain any prerequisites. The only implicit hint is the mention of arbitrary params, but this is not framed as a usage criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_templatesA
Searches for pipeline or indexing templates based on name or description using semantic similarity. :param query: The search query. :param top_k: Maximum number of results to return (default: 10). :param pipeline_type: The type of pipeline to return ('indexing' or 'query'; default: 'query').
:returns: Search results with similarity scores or error message.
The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| pipeline_type | No | query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that output is automatically stored, returns an object ID, and can be referenced in other functions. It also mentions similarity scores and error messages. This adds value beyond the lack of annotations, though it doesn't cover rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then parameter list, then return and usage hints. Each section adds value, though the docstring format is slightly verbose for the parameter count. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains input parameters, return type (search results with scores, object ID, error messages), and how to use the object ID. It covers all needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining query, top_k (default 10), and pipeline_type (default 'query', options 'indexing' or 'query'). It adds meaning beyond the schema's type and default fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for pipeline or indexing templates using semantic similarity on name or description. The verb 'searches' and resource 'templates' are specific, and it distinguishes from sibling tools like search_pipeline or list_templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for semantic similarity searches but does not explicitly state when to prefer this over exact-match tools or list_templates. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sed_object_storeA
Find and replace text in a string stored in the object store using regex.
Applies substitution (like sed s/pattern/replacement/) and stores the result
as a new object, returning its ID. The original object is not modified.
:param object_id: The id of the object to modify in the format @obj_001.
:param pattern: Regular expression pattern to find.
:param replacement: Replacement string. Supports backreferences like \1, \2.
:param path: Navigation path to a nested string attribute (optional).
:param count: Maximum number of replacements (0 = replace all, default: 0).
:param case_sensitive: Whether the pattern match should be case sensitive (default: False).
:return: New object ID with the modified string and a preview of the result.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| count | No | ||
| pattern | Yes | ||
| object_id | Yes | ||
| replacement | Yes | ||
| case_sensitive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides key behavioral details: the original object is not modified, the result is stored as a new object, and it returns the new object ID and a preview. It could mention error conditions or performance, but the core behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a brief opening sentence followed by a parameter list. It front-loads the purpose. However, the parameter list is somewhat verbose with repeated line breaks, which could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, regex substitution) and the absence of an output schema, the description fully covers what the tool does, its parameters, return value (new ID and preview), and safety (non-destructive). No critical information is missing, and it aligns with sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by explaining all six parameters: `object_id`, `pattern`, `replacement`, `path`, `count`, `case_sensitive`. It adds meaning like "Supports backreferences" for `replacement` and "Navigate to a nested string attribute" for `path`, exceeding the schema's minimal definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool "Find and replace text in a string stored in the object store using regex," specifying the verb (find and replace), resource (string in object store), and method (regex). It distinguishes from siblings like `grep_object_store` (search) and `get_from_object_store` (retrieve).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool's operation (like `sed s/pattern/replacement/`) and that it creates a new object without modifying the original. While it implies usage for regex substitution, it does not explicitly state when to use this tool versus alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_evaluator_archivedA
Archives or unarchives an Evaluator. Nothing is deleted.
An archived Evaluator keeps its versions and name, and its Metric Groups still score with it; it
only shows an archived_at time. Use it to retire an Evaluator without breaking history.
:param evaluator_id: The Evaluator's id.
:param archived: True to archive it, False to unarchive it.
:returns: The Evaluator, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| archived | Yes | ||
| evaluator_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden and does so well: it discloses that nothing is deleted, that versions and name are retained, that Metric Groups continue to score, and that only an archived_at timestamp appears. It omits permission requirements and idempotency/error specifics beyond a generic "or an error message".
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by behavior and then parameters, so an agent can stop reading early. The reStructuredText :param:/:returns: markers are slightly noisy but each line carries distinct information, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no annotations and no output schema, the description covers intent, side effects, retention semantics, and the return value (the Evaluator or an error message). What remains missing — permissions and error conditions — is modest for a low-complexity toggle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define both parameters, and it does: evaluator_id is identified as the Evaluator's id, and archived is explicitly True to archive / False to unarchive — the key ambiguity for a toggle tool. The explanations are terse but sufficient; no format or example for evaluator_id is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Archives or unarchives an Evaluator" gives a specific verb pair and resource, and "Nothing is deleted" immediately separates it from destructive siblings like delete_experiment or delete_metric_group. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to retire an Evaluator without breaking history" states the intended situation clearly, and the archive/unarchive toggle tells the agent both directions exist. It stops short of naming alternatives (e.g., delete_* or update_evaluator) or stating when not to archive, so it is context-rich but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_experiment_runA
Scores a pipeline's Sessions with a Metric Group, outside any Experiment. Costs money.
Every Evaluator of the Metric Group judges every chosen Session, so the run has Sessions times
Evaluators cells, and an Evaluator that judges with a model is billed per judged turn on the
customer's provider. Name the Sessions in session_ids (find them with list_sessions), or
give a window of time: window_from and window_to together, optionally narrowed by
origin, deployment_id, pipeline_version_id and revision_id, judge every Session
whose last activity falls in it. The server resolves the window to its Sessions when the run
starts. Give session_ids or a window, never both. A window run is always SAMPLED and cannot take
focus; it is refused when it has more Sessions or cells than the ceiling.
Preview first: preview=True with a window starts nothing and returns sessions,
evaluators and cells (the judge calls it would make) against the ceiling. Show that to
the user and get a yes before starting for real. There is no preview for named Sessions: their
cells are the number of Sessions times the Metric Group's Evaluators.
The run is queued, not finished: poll it with get_experiment_run (counts, then the grid),
and find earlier runs with list_experiment_runs. reuse REUSE_SUCCEEDED judges only
what this Metric Group has not already judged successfully, which makes re-running after a
partial failure cheap; RERUN_ALL judges everything again. selection HAND_PICKED marks Sessions
chosen because they looked wrong, which keeps the run out of trends and exports; use it
for named Sessions that are not a sample of the traffic. A focus makes it HAND_PICKED.
:param pipeline_name: Name of the pipeline whose Sessions are judged.
:param metric_group_id: The Metric Group to judge with (see list_metric_groups).
:param session_ids: The Sessions to judge: search_session_id values, or a single-turn run's query_id.
:param window_from: Window start, ISO 8601 with a timezone: last activity at or after it.
:param window_to: Window end, ISO 8601 with a timezone, not in the future: last activity at or before it.
:param origin: Window filter: only Sessions from SERVICE, PIPELINE_RUN or PLAYGROUND.
:param deployment_id: Window filter: only Sessions this Service served.
:param pipeline_version_id: Window filter: only Sessions this pipeline version served.
:param revision_id: Window filter: only Sessions this Service revision served.
:param reuse: RERUN_ALL (default) or REUSE_SUCCEEDED.
:param selection: SAMPLED (default) or HAND_PICKED.
:param focus: Per Session id, the turns to judge by query_id; a Session left out is judged on every turn.
:param preview: True counts what the window would judge and starts nothing.
:returns: The queued run (pipeline_experiment_run_id, cells), or with preview the counts, or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | ||
| reuse | No | RERUN_ALL | |
| origin | No | ||
| preview | No | ||
| selection | No | SAMPLED | |
| window_to | No | ||
| revision_id | No | ||
| session_ids | No | ||
| window_from | No | ||
| deployment_id | No | ||
| pipeline_name | Yes | ||
| metric_group_id | Yes | ||
| pipeline_version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses that the run costs money, bills per judged turn on the customer's provider, may be refused at a ceiling, runs asynchronously ('queued, not finished'), and that ``selection`` HAND_PICKED keeps runs out of trends and exports. These are exactly the non-obvious traits an agent must know before mutating state with financial impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the critical cost warning and organized logically (costs, targeting, preview, lifecycle, semantics, then params). Slightly long, and the 'Sessions times Evaluators cells' arithmetic is stated twice (in prose and again in the preview paragraph), which is minor redundancy rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, high-cost, asynchronous mutation with no annotations and no output schema, the description covers cost model, targeting modes, preview/confirmation flow, ceiling rejection, polling follow-up, and the return payload fields (``pipeline_experiment_run_id``, ``cells``). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 13 parameters, yet the description documents each one: the ISO 8601-with-timezone requirement and non-future constraint for window bounds, the meaning of each window filter (``deployment_id``, ``pipeline_version_id``, ``revision_id``), the ``reuse`` and ``selection`` enum effects, and that ``focus`` maps Session ids to turn ``query_id`` lists. It fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Scores a pipeline's Sessions with a Metric Group, outside any Experiment.' The 'outside any Experiment' clause explicitly distinguishes it from the experiment-creation siblings, and the agent can tell immediately what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: find Sessions with ``list_sessions``, give ``session_ids`` or a window but never both, preview with ``preview=True`` and get user confirmation before starting, poll with ``get_experiment_run``, find prior runs with ``list_experiment_runs``. Alternatives and sequencing are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
try_evaluatorA
Tries Evaluator source on one Session and returns what it found. Persists nothing.
Use it to check a draft before showing it as ready, and to judge a replayed Session against
its source. The source is an Evaluation Function: a Python function that reads one Session and
reports named Metrics declared with @metrics. To try a saved Evaluator, read a version's
python_code with get_evaluator and pass it. A try that
judges with a model costs a model call per judged turn on the customer's provider.
test_case_id hands the Evaluation Function that Dataset test case's expected data, so a
correctness Evaluator can be tried on any Session; leave it out to use the test case the Session
replayed, if any.
outcome ERRORED means the code broke: read error_detail and fix it. metrics are the
values per address with their rationales. trace_summary says which Session Tools the
evaluator called. If status is RUNNING the wait ran out: poll get_evaluation_try.
:param pipeline_name: Name of the pipeline the Session belongs to.
:param python_code: The Evaluation Function's source.
:param session_id: The Session to judge: a search_session_id, or a single-turn run's query_id.
:param test_case_id: A Dataset test case whose expected data the Evaluation Function receives.
:param wait_seconds: How long to wait for the result before handing back the id to poll.
:returns: The try report, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| python_code | Yes | ||
| test_case_id | No | ||
| wait_seconds | No | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so: it discloses that nothing is persisted, that a model-judging try costs a model call per judged turn on the customer's provider, and what each outcome means (ERRORED → read error_detail; RUNNING → wait expired, poll get_evaluation_try). That is unusually rich cost, side-effect, and failure-mode disclosure for a mutation-adjacent tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and information-dense, but the prose paragraphs and the trailing :param:/:returns: block restate each other (test_case_id and session_id are explained twice), which is genuine duplication. Nothing is off-topic, but a tighter version would keep one form of the parameter documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, yet the description explains the return shape (outcome, metrics per address with rationales, trace_summary, status) and the timeout/polling path. For a five-parameter execution tool with external cost implications, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (titles only), and the description compensates for every one of the five parameters: session_id is a search_session_id or a single-turn run's query_id, test_case_id supplies a test case's expected data and defaults to the replayed test case when omitted, wait_seconds is the wait budget before handing back an id to poll, plus pipeline_name and python_code. This adds meaning well beyond the bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Tries Evaluator source on one Session and returns what it found. Persists nothing.' It clarifies that the input is an Evaluation Function (Python source, not a saved Evaluator id), which is exactly the distinction an agent needs versus run_evaluator / create_evaluator among the many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use cases ('check a draft before showing it as ready', 'judge a replayed Session against its source') and routes to the right sibling workflows: get_evaluator to fetch a saved version's python_code, get_evaluation_try to poll on RUNNING. It does not explicitly state when to prefer run_evaluator instead, so the sibling differentiation is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_datasetA
Renames a Dataset. Change its test cases with the test case tools. :param dataset_id: The Dataset's id. :param name: The new name. :returns: The Dataset, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose the return value ("The Dataset, or an error message") and confirms this is a mutation, but it says nothing about permissions required, name-uniqueness constraints, whether an invalid name produces an error, or whether the change is reversible. Useful but incomplete for a write tool with zero 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is short and front-loaded with the key verb, but it is raw Sphinx docstring boilerplate (":param", ":returns:") pasted in rather than written as prose for an agent. Every sentence carries information, yet the formatting is awkward and the return-value line would read better as a sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter rename with no output schema, the description covers the essential pieces: what changes, what it returns, and where test-case edits belong. Missing are the operational details a mutation tool with no annotations should state, such as error conditions and permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does name both parameters. However, ":param dataset_id: The Dataset's id." merely restates the schema title, and ":param name: The new name." adds only the minor clarification that the value replaces the current name. No format, length, or validation semantics are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Renames a Dataset." It also delimits scope by directing test-case changes to the test case tools, which separates it from siblings like update_test_case, add_test_cases, and copy_test_cases. It falls short of a 5 only because the name (update_dataset) is broader than the stated behavior and nothing addresses other dataset fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Change its test cases with the test case tools" is an explicit when-not/alternative pointer, which is exactly the kind of routing an agent needs given the dense sibling set (update_test_case, add_test_cases, delete_dataset). There is no statement of preconditions, such as whether the dataset must exist or whether the caller needs ownership, and no explicit when-to-use beyond the implicit rename case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_deploymentB
Updates a deployment's metadata, sizing, or execution mode.
Only fields you provide are changed; omitted fields keep their current value. :param deployment_id: ID of the deployment to update. :param name: New name for the deployment. :param description: New description. :param group_label: New group label. :param deployment_mode: New execution mode, "MANAGED" or "SERVERLESS". :param service_level: New sizing tier, "PRODUCTION", "DEVELOPMENT", or "CUSTOM". :param idle_timeout_in_seconds: New idle timeout, in seconds. :param min_query_replica_count: New minimum number of query replicas. :param max_query_replica_count: New maximum number of query replicas. :param max_index_replica_count: New maximum number of index replicas. :param cpu_request: New requested CPU per replica. :param cpu_limit: New CPU limit per replica. :param memory_request: New requested memory per replica. :param memory_limit: New memory limit per replica. :param gpu_limit_gigabyte: New GPU memory limit in gigabytes. :returns: The updated deployment or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
update_deployment(data={'key': 'value'}, threshold=10)
# Call with references
update_deployment(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
update_deployment(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| cpu_limit | No | ||
| cpu_request | No | ||
| description | No | ||
| group_label | No | ||
| memory_limit | No | ||
| deployment_id | Yes | ||
| service_level | No | ||
| memory_request | No | ||
| deployment_mode | No | ||
| gpu_limit_gigabyte | No | ||
| idle_timeout_in_seconds | No | ||
| max_index_replica_count | No | ||
| max_query_replica_count | No | ||
| min_query_replica_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose meaningful patch semantics ('Only fields you provide are changed') and the return shape, but it says nothing about authorization, reversibility, or side effects. Worse, the examples reference parameters ('data', 'threshold') that do not exist on this tool, leaking generic boilerplate that could actively mislead an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and patch-semantics statements are front-loaded and efficient, and the parameter list is scannable. However, the trailing object-reference examples and object-store narrative are boilerplate that does not match this tool's parameters and dilutes the signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation tool with no annotations and no output schema, the description does a fair job covering parameters, mutation semantics, and the return value. It still omits permission requirements, error/conflict behavior, and any routing to related deployment tools, and the mismatched examples leave an agent with unresolved questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it enumerates the allowed values for deployment_mode and service_level and gives units for idle_timeout_in_seconds and gpu_limit_gigabyte. Many entries merely restate the schema titles ('New name for the deployment'), and formats for cpu/memory strings remain unstated, keeping it out of 5 territory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Updates a deployment') and names the three updateable areas (metadata, sizing, execution mode), which lets an agent distinguish it from read tools like get_deployment and lifecycle tools like activate_deployment. It does not explicitly differentiate from siblings such as create_deployment_revision or update_index, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, nor prerequisites such as required permissions or deployment state. The only contextual hint is the patch-like note that omitted fields keep their current value, which is behavioral rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_evaluatorA
Renames an Evaluator, saves new source as a new version, or both. Send only what changes.
New source adds a version; the Evaluator's Metric Groups judge with the newest version from the next
run on, and past runs keep the version they used. Validate the new code with try_evaluator
first. Source the Evaluator already had in its history adds no version, so reverting is safe.
hub-api rejects code that changes what an existing Metric measures (its shape, grain or range,
a narrowed vocabulary), and a changed declaration can make a Metric Group weight unusable: check
weights with list_metric_groups afterwards. Read the current source with get_evaluator.
:param evaluator_id: The Evaluator's id.
:param name: The new name; must not be taken.
:param python_code: The new Python source.
:returns: The Evaluator, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| python_code | No | ||
| evaluator_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it explains versioning semantics (new source adds a version, judges use the newest from the next run, past runs keep their version), that resubmitting historical source creates no version so reverting is safe, and the server-side rejection rules around changed Metric shape/grain/range/vocabulary. This is exactly the mutation-safety context an agent needs beforehand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the operation summary before the versioning consequences, and every sentence carries operational weight. It is on the long side, and the closing 'Read the current source with get_evaluator' could have been folded into the earlier validation guidance, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no annotations and no output schema, it covers behavior, preconditions, postconditions, and return value ('The Evaluator, or an error message'). Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does document all three parameters plus a constraint absent from the schema ('name ... must not be taken'). The python_code gloss stays at 'The new Python source' without format or content expectations, which is the one remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the resource (an Evaluator) and the exact operations (rename, save new source version, or both), and 'Send only what changes' makes it explicit that this is a partial update rather than a full replace. An agent can distinguish it from create_evaluator or run_evaluator without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names concrete prerequisites and follow-ups with sibling tools: validate new code with try_evaluator first, read current source with get_evaluator, and re-check weights via list_metric_groups afterwards. It also states the failure condition (a changed declaration can break a Metric Group weight), which tells the agent when not to proceed blindly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_experimentA
Renames an Experiment or changes its candidate or baseline. Changing a side costs money.
Send only what changes. A changed side is planned again as on a new Experiment: Sessions that
already exist on it are reused, the rest are replayed, and it is judged again once they have
finished; its previous scoring run is stopped and the other side is left alone. Only renaming
costs nothing. Call it first with preview=True: that changes nothing and returns, for each
changed side, reused_sessions and replays_needed (a side left alone is null). Show that
to the user and get a yes before changing for real. Follow progress with get_experiment.
:param experiment_id: The Experiment's id.
:param name: A new name.
:param candidate_pipeline_name: Pipeline of the new candidate; give it with its version id.
:param candidate_pipeline_version_id: The new candidate version.
:param baseline_pipeline_name: Pipeline of the new baseline; give it with its version id.
:param baseline_pipeline_version_id: The new baseline version.
:param recorded_baseline: True makes the baseline the Dataset's recorded Sessions, with nothing replayed.
:param preview: True returns the plan and changes nothing.
:returns: The updated Experiment, or with preview the plan, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| preview | No | ||
| experiment_id | Yes | ||
| recorded_baseline | No | ||
| baseline_pipeline_name | No | ||
| candidate_pipeline_name | No | ||
| baseline_pipeline_version_id | No | ||
| candidate_pipeline_version_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the monetary cost of changing a side, the replay/reuse/regrade lifecycle, that the previous scoring run is stopped, that the untouched side is left alone, and that preview mutates nothing and returns reused_sessions and replays_needed. This is well beyond what a bare mutation description would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The impact and cost warning is front-loaded, followed by mechanics, then the required preview workflow, then param glosses. It is dense but every sentence earns its place; the only noise is the retained docstring artifacts (':param', ':returns') and some repetition of the pipeline name/version phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains what is returned (updated Experiment, the plan under preview, or an error message). No annotations exist, yet side effects, cost, and restart semantics are covered, so nothing material is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates by glossing all eight parameters, adding real meaning for the non-obvious ones (recorded_baseline means the Dataset's recorded Sessions with nothing replayed; preview returns the plan; pipeline names must be paired with their version ids). It loses a point because the name/version pairing and any conflict/precedence rules between candidate and baseline fields are implied rather than specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource set: 'Renames an Experiment or changes its candidate or baseline,' which is precise and immediately distinguishes it from get_experiment, create_experiment, and delete_experiment in the sibling list. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit workflow guidance: call with preview=True first, show plan to the user, get a yes, then change for real, and follow progress with get_experiment. It also clarifies cost conditions ('Only renaming costs nothing') and the instruction to send only what changes, which is exactly the when-and-how guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_indexA
Updates an index in the specified workspace.
Only the fields you pass are changed; a field left as None is not touched (it is not cleared server-side).
Pass yaml_configuration to replace the index's YAML. When provided, pass the complete,
updated configuration (not just the changed parts); it is validated before being applied.
If validation fails and skip_validation_errors is False, it returns error messages.
All other parameters are index settings that can be updated independently of the YAML:
updated_index_name: rename the index.description: new description.max_allowed_batch_size: cap the number of files indexed per batch (1-500). Lower values reduce the chance that heavy files exceed the queue timeout and get retried.max_index_replica_count: maximum number of index replicas (1-10).gpu_enabled: enable or disable GPU acceleration.capture_traces: record an indexing trace for every file queued for this index.instance_size: pod size used to index files ("small", "medium", "large", or "xl").file_name_prefix_filter: prefix pattern (e.g. "myprefix*") selecting which files are indexed. Can only be updated while the index is not deployed.file_meta_filter: metadata conditions (field/operator/value, AND-combined) selecting which files are indexed. Can only be updated while the index is not deployed. :param index_name: Name of the index to update. :param updated_index_name: Optional new name for the index. :param yaml_configuration: Optional complete, updated YAML configuration for the index. :param description: Optional new description. :param max_allowed_batch_size: Optional per-pipeline cap on files indexed per batch (1-500). :param max_index_replica_count: Optional max number of index replicas (1-10). :param gpu_enabled: Optional toggle for GPU acceleration. :param capture_traces: Optional toggle for recording an indexing trace per queued file. :param instance_size: Optional pod size: "small", "medium", "large", or "xl". :param file_name_prefix_filter: Optional file-name prefix pattern filter. :param file_meta_filter: Optional metadata conditions filtering which files are indexed. :param skip_validation_errors: If True (default), updates the index even if validation fails. If False, stops update when validation fails.
:returns: Updated index or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
update_index(data={'key': 'value'}, threshold=10)
# Call with references
update_index(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
update_index(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| index_name | Yes | ||
| description | No | ||
| gpu_enabled | No | ||
| instance_size | No | ||
| capture_traces | No | ||
| file_meta_filter | No | ||
| updated_index_name | No | ||
| yaml_configuration | No | ||
| max_allowed_batch_size | No | ||
| skip_validation_errors | No | ||
| file_name_prefix_filter | No | ||
| max_index_replica_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does this well by explaining that only passed fields change, that None does not clear fields, that YAML is replaced wholesale and validated, how skip_validation_errors behaves, and that results are stored with an object ID. It does not cover permissions, reversibility, or rate limits, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and organized, but it repeats every parameter twice: once in a bullet list and again in the :param block. The examples are generic and do not use update_index's actual parameters, and the object-store paragraph adds boilerplate, though it is relevant to the return behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no annotations and no output schema, the description is complete enough to call correctly. It covers update semantics, validation behavior, deployment constraints, error returns, and the fact that output is stored as an object ID for later reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates thoroughly for all 12 parameters. It explains ranges like batch size 1-500 and replica count 1-10, enum values for instance_size, the structure and AND semantics of file_meta_filter, the prefix-filter format, and the default behavior of skip_validation_errors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Updates an index in the specified workspace.' It is clear what the tool does, but does not explicitly distinguish it from siblings such as create_index, validate_index, deploy_index, or get_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains update behavior and some constraints, such as file filters only being editable while the index is not deployed. However, it never states when to use update_index rather than create_index, validate_index, deploy_index, or other sibling tools, and gives no explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metric_groupA
Replaces a Metric Group's name and Evaluator set, and optionally its Metric weights.
This is a full replace of name and Evaluators: send every Evaluator the group keeps, in order
(read them with list_metric_groups). Past runs are unaffected; each recorded the versions it
used, and a run's Composite keeps the weights it started with, so edits change only later runs.
Leave weights out to keep the stored weights of the Evaluators that stay (those of removed
Evaluators are dropped); send an empty list to clear them all, which removes the Composite.
weights say how much each Metric counts toward the group's Composite, as
{evaluator_id, metric_key, weight} entries. weight is a number above 0 and relative: weights
are divided by their sum, so 2, 1, 1 count as 50%, 25%, 25%. Each Evaluator must be in the group,
each metric_key must be one its newest version declares with a Normalized mean (a Score
with both range and better, or a Label with a scale), and no pair may repeat; otherwise
hub-api rejects the request. Without weights a group has no Composite. A stored weight with
usable false and an unusable_reason means a newer Evaluator version dropped the Metric or
its normalization: it is kept but no longer counts in new runs.
:param metric_group_id: The Metric Group's id.
:param name: The name to keep or change to.
:param evaluator_ids: Every Evaluator the group keeps, in order (at least one).
:param weights: Replaces the stored weights; None keeps them, [] clears them.
:returns: The Metric Group, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| weights | No | ||
| evaluator_ids | Yes | ||
| metric_group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses full-replace/destructive semantics, that removed Evaluators' weights are dropped and clearing all weights removes the Composite, that past runs are unaffected because they pin versions and keep starting weights, and the exact hub-api validation conditions that cause rejection. Only permission requirements are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, leading with the replace semantics and the irreversibility note before validation detail. It loses a point for redundancy: weights are described both in the body prose and again in the ':param weights:' line, and the trailing Sphinx-style param block partially restates the paragraphs above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, unannotated, no-output-schema mutation, the description supplies returns, failure behavior, validation constraints, and downstream effects on runs. The remaining gap is purely operational — permissions/auth and exact error shapes are not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the top-level parameters, so the description must compensate and does: every parameter is explained (id, name to keep, complete ordered evaluator_ids list with a minimum of one, weights None-vs-[] behavior). It also documents weight semantics (relative, above 0, sum-normalized, no duplicate pairs, metric_key must be a Normalized mean of the newest version) and the meaning of a stored weight with usable false.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Replaces a Metric Group's name and Evaluator set, and optionally its Metric weights'), which also distinguishes it from create_metric_group and delete_metric_group. An agent knows this is a full-replace mutation rather than a patch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the workflow prerequisite ('send every Evaluator the group keeps, in order (read them with list_metric_groups)') and gives explicit rules for the optional field: omit weights to keep stored values, send [] to clear them all. It names the sibling to call for reading state, so the when-and-how of invocation is fully resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_test_caseA
Changes one test case of a Dataset. Fields you leave out are kept.
inputs replaces the inputs and works only on a test case created with inputs, not on a
Session-based one. expected replaces the expected data.
:param dataset_id: The Dataset's id.
:param test_case_id: The test case's id.
:param name: The new name.
:param inputs: The new pipeline inputs, as {name: value}.
:param expected: The new expected data.
:param setup_source: New Python source that runs before every replay.
:param cleanup_source: New Python source that runs after every replay.
:param clear: Fields to remove from the test case.
:returns: The test case, or an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| clear | No | ||
| inputs | No | ||
| expected | No | ||
| dataset_id | Yes | ||
| setup_source | No | ||
| test_case_id | Yes | ||
| cleanup_source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it: it discloses merge-not-replace semantics, that ``inputs`` and ``expected`` replace rather than merge, that ``clear`` removes fields, and that the call returns the test case or an error. Gaps remain around permissions and side effects on stored experiment replays.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the two facts an agent needs (what it changes, and that omitted fields are kept), then a compact per-parameter list. The Sphinx-style ``:param:`` formatting is a little mechanical but each line carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An 8-parameter mutation tool with no annotations and no output schema needs strong prose, and this supplies semantics, a constraint, and a return description. It could say more about error cases and access requirements, but nothing essential for calling the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document all 8 parameters and it does: it explains the id params, the ``{name: value}`` shape of ``inputs``, that setup/cleanup are Python source run before/after every replay, and that ``clear`` removes fields. This adds meaning well beyond bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Changes one test case of a Dataset" gives a specific verb and resource, and "one test case" separates it from batch siblings like add_test_cases, remove_test_cases and copy_test_cases. It does not name any sibling explicitly as an alternative, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the partial-update model ("Fields you leave out are kept") and an explicit precondition/exclusion: ``inputs`` works only on a test case created with ``inputs``, not a Session-based one. That is real when-to-use guidance, though it never names an alternative tool for the Session-based case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_indexA
Validates the provided index YAML configuration against the deepset API. :param yaml_configuration: The YAML configuration to validate. :returns: Validation result with original YAML or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
validate_index(data={'key': 'value'}, threshold=10)
# Call with references
validate_index(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
validate_index(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| yaml_configuration | Yes |
TDQS
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 mentions validation, return of original YAML or error, automatic output storage, and object reference substitution, but does not disclose potential side effects (likely none).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose with docstring-style tags and multiple examples. It could be more succinct while retaining key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter validation tool with no output schema, the description covers purpose, parameter format, object references, and output handling. It's complete but could mention that it's specifically for index configurations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates. It explains the yaml_configuration parameter's purpose and demonstrates object reference usage, adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it validates YAML configuration against the deepset API. It distinguishes from siblings like create_index or validate_pipeline by focusing on validation of index configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Examples illustrate usage with direct values and object references, but it does not explicitly compare with validate_pipeline or other siblings. The reference mechanism is well explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_pipelineB
Validates the provided pipeline YAML configuration against the deepset API. :param yaml_configuration: The YAML configuration to validate. :returns: Validation result with original YAML or error message.
All parameters accept object references in the form @obj_id or @obj_id.path.to.value.
Examples::
# Direct call with values
validate_pipeline(data={'key': 'value'}, threshold=10)
# Call with references
validate_pipeline(data='@obj_123', threshold='@obj_456.config.threshold')
# Mixed call
validate_pipeline(data='@obj_123.items', threshold=10)The output is automatically stored and can be referenced in other functions.
Returns a formatted preview with an object ID (e.g., @obj_123).
Use the object store tools in combination with the object ID to view nested properties of the object.
Use the returned object ID to pass this result to other functions.
| Name | Required | Description | Default |
|---|---|---|---|
| yaml_configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the output is automatically stored and can be referenced in other functions, and that it returns a formatted preview with an object ID. It also explains object reference syntax. Since there are no annotations, this behavioral context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a param/returns block and examples, but it is somewhat verbose. It could be more concise by removing the docstring-style formatting and redundancy about object references.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and no output schema, the description covers the input, return format, object references, and output storage. However, it lacks details on error handling, expected success/failure conditions, and potential validation outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining the yaml_configuration parameter ('The YAML configuration to validate') and describing the object reference pattern. With 0% schema description coverage, this compensation is significant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates pipeline YAML configuration against the deepset API. It specifies the resource (pipeline YAML) and action (validate), giving a clear purpose. However, it does not explicitly distinguish from sibling tools like validate_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples of calling the tool but gives no guidance on when to use it versus alternatives. It lacks explicit context for when to use or not use this tool, and does not mention when it should be preferred over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yq_object_storeA
Query or transform structured data stored in the object store using a jq filter expression.
Use this to filter, map, select, or rewrite nested data without pulling the whole object into
context, e.g. {"object_id": "@obj_001", "filter": ".items[] | select(.active) | .name"}.
Transforming filters work the same way, e.g. .config.timeout = 30.
If the targeted value is a JSON or YAML string (e.g. a pipeline's YAML config), it is parsed before the filter runs so you can navigate into its fields; a transformed result is re-serialized back to that same format.
By default, the result is stored as a new object and returned with a preview, so you can reference
it further (e.g. get_from_object_store) or feed it back into another yq_object_store call. Set
store=False if you just want the full result inline and don't need it stored, e.g. for a small
lookup you'll act on immediately.
:param object_id: The id of the object to query in the format @obj_001.
:param filter: jq filter expression to apply, e.g. .field, .items[], .[] | select(.status=="done"),
or a transformation like .field = "value".
:param path: Navigation path to a nested attribute to query instead of the whole object (optional).
:param store: Whether to store the result as a new object (default: True). Set to False to get the
full result inline instead of a preview, without writing anything to the object store.
:return: New object ID and a preview of the result, the full result if store is False, or a message
if the filter is invalid or produced no results.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| store | No | ||
| filter | Yes | ||
| object_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior fully. It explains JSON/YAML parsing, re-serialization, the default store behavior, return types (preview vs. full result), and error messages. It does not explicitly state read-only nature but implies it by storing new objects. No contradictions with missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with purpose, then usage guidelines, then detailed parameter explanations. It uses examples and front-loads key information. No redundant sentences; every sentence adds value. Appropriate length for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 0% schema coverage, the description covers purpose, parameters, return values, and behavior with JSON/YAML. It mentions error conditions but lacks details on performance or size limits. Overall complete for a data query/transform tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates fully. It provides :param explanations for all four parameters: object_id (format with @obj_001), filter (jq expressions), path (optional nested attribute), and store (default True vs. inline). This adds crucial meaning beyond schema titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: querying or transforming structured data using a jq filter. It specifies the action (query/transform), resource (object store data), and method (jq filter). It differentiates from siblings like grep_object_store (text search) and sed_object_store (text substitution) by focusing on structured data transformation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'filter, map, select, or rewrite nested data without pulling the whole object into context.' It includes examples and explains the default behavior. However, it does not explicitly state when not to use or mention alternatives beyond implicit differentiation from siblings.
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.
34 tool updates
v0.1.44- Added
add_test_cases - Added
copy_test_cases - Added
create_dataset - Added
create_evaluator - Changed
create_experiment2 fields changed- added
Input schema / properties / previewAdded value: +{ + "default": false, + "title": "Preview", + "type": "boolean" +} - added
Input schema / properties / reuse_sessionsAdded value: +{ + "default": true, + "title": "Reuse Sessions", + "type": "boolean" +}
- Added
create_metric_group - Added
delete_dataset - Added
delete_experiment - Added
delete_metric_group - Added
get_dataset - Added
get_evaluation_run - Added
get_experiment - Changed
get_experiment_run4 fields changed- added
Input schema / properties / deployment_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deployment Id" +} - added
Input schema / properties / originAdded value: +{ + "anyOf": [ + { + "enum": [ + "SERVICE", + "PIPELINE_RUN", + "PLAYGROUND" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Origin" +} - added
Input schema / properties / pipeline_version_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pipeline Version Id" +} - added
Input schema / properties / session_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" +}
- Added
list_datasets - Added
list_evaluation_runs - Added
list_evaluator_templates - Changed
list_evaluators2 fields changed- added
Input schema / properties / archivedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Archived" +} - added
Input schema / properties / limitAdded value: +{ + "default": 200, + "title": "Limit", + "type": "integer" +}
- Added
list_experiment_runs - Changed
list_experiments1 field changed- added
Input schema / properties / limitAdded value: +{ + "default": 50, + "title": "Limit", + "type": "integer" +}
- Changed
list_metric_groups1 field changed- added
Input schema / properties / limitAdded value: +{ + "default": 200, + "title": "Limit", + "type": "integer" +}
- Changed
list_sessions1 field changed- added
Input schema / properties / revision_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Revision Id" +}
- Added
remove_test_cases - Changed
replay_session2 fields changed- added
Input schema / properties / cleanup_sourceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cleanup Source" +} - added
Input schema / properties / setup_sourceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Setup Source" +}
- Added
rerun_failed_experiment - Added
rescore_experiment - Added
run_evaluator - Added
set_evaluator_archived - Added
start_experiment_run - Changed
try_evaluator1 field changed- added
Input schema / properties / test_case_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Test Case Id" +}
- Added
update_dataset - Added
update_evaluator - Added
update_experiment - Added
update_metric_group - Added
update_test_case
5 tool updates
v0.1.40- Changed
get_cost_breakdown3 fields changed- added
Input schema / properties / api_keysAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Api Keys" +} - added
Input schema / properties / providersAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Providers" +} - added
Input schema / properties / servicesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Services" +}
- Changed
get_cost_over_time3 fields changed- added
Input schema / properties / api_keysAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Api Keys" +} - added
Input schema / properties / providersAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Providers" +} - added
Input schema / properties / servicesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Services" +}
- Changed
get_cost_totals3 fields changed- added
Input schema / properties / api_keysAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Api Keys" +} - added
Input schema / properties / providersAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Providers" +} - added
Input schema / properties / servicesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Services" +}
- Changed
get_models1 field changed- added
Input schema / properties / include_priceAdded value: +{ + "default": false, + "title": "Include Price", + "type": "boolean" +}
- Changed
update_index14 fields changed- added
Input schema / $defsAdded value: +{ + "MetaFilterCondition": { + "description": "A single metadata condition controlling which files an index processes.", + "properties": { + "field": { + "title": "Field", + "type": "string" + }, + "operator": { + "enum": [ + "==", + "!=" + ], + "title": "Operator", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Value" + } + }, + "required": [ + "field", + "operator", + "value" + ], + "title": "MetaFilterCondition", + "type": "object" + } +} - added
Input schema / properties / capture_tracesAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Capture Traces" +} - added
Input schema / properties / descriptionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" +} - added
Input schema / properties / file_meta_filterAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/MetaFilterCondition" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Meta Filter" +} - added
Input schema / properties / file_name_prefix_filterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Name Prefix Filter" +} - added
Input schema / properties / gpu_enabledAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gpu Enabled" +} - added
Input schema / properties / instance_sizeAdded value: +{ + "anyOf": [ + { + "enum": [ + "small", + "medium", + "large", + "xl" + ], + "type": "string" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instance Size" +} - added
Input schema / properties / max_allowed_batch_sizeAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Allowed Batch Size" +} - added
Input schema / properties / max_index_replica_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Index Replica Count" +} - added
Input schema / properties / updated_index_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Updated Index Name" +} - added
Input schema / properties / yaml_configuration / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / yaml_configuration / defaultAdded value: +null - removed
Input schema / properties / yaml_configuration / typeRemoved value: -"string" - changed
Input schema / requiredPrevious value: -[ - "index_name", - "yaml_configuration" -]New value: +[ + "index_name" +]
1 tool update
v0.1.38- Changed
update_index4 fields changed- removed
Input schema / properties / original_config_snippetRemoved value: -{ - "title": "Original Config Snippet", - "type": "string" -} - removed
Input schema / properties / replacement_config_snippetRemoved value: -{ - "title": "Replacement Config Snippet", - "type": "string" -} - added
Input schema / properties / yaml_configurationAdded value: +{ + "title": "Yaml Configuration", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "index_name", - "original_config_snippet", - "replacement_config_snippet" -]New value: +[ + "index_name", + "yaml_configuration" +]
2 tool updates
v0.1.33- Added
create_experiment - Added
get_experiment_results
6 tool updates
v0.1.31- Added
get_cost_breakdown - Added
get_cost_over_time - Added
get_cost_totals - Changed
get_experiment_run3 fields changed- removed
Input schema / properties / experiment_idRemoved value: -{ - "title": "Experiment Id", - "type": "string" -} - added
Input schema / properties / metric_group_idAdded value: +{ + "title": "Metric Group Id", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "pipeline_name", - "experiment_id", - "run_id" -]New value: +[ + "pipeline_name", + "metric_group_id", + "run_id" +]
- Changed
list_experiments4 fields changed- added
Input schema / properties / pipeline_name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / pipeline_name / defaultAdded value: +null - removed
Input schema / properties / pipeline_name / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "pipeline_name" -]
- Added
list_metric_groups
9 tool updates
v0.1.29- Added
get_evaluation_try - Added
get_evaluator - Added
get_experiment_run - Added
get_session_replay - Added
list_evaluators - Added
list_experiments - Added
list_sessions - Added
replay_session - Added
try_evaluator
19 tool updates
v0.1.27- Added
activate_deployment - Added
activate_deployment_revision - Added
add_deployment_tag - Added
create_deployment - Added
create_deployment_revision - Added
deactivate_deployment - Added
delete_deployment - Added
delete_deployment_tag - Added
get_deployment - Added
get_deployment_metrics - Added
get_deployment_revision - Added
get_deployment_stats - Added
list_deployment_activity - Added
list_deployment_revisions - Added
list_deployment_tags - Added
list_deployments - Added
list_doc_sections - Changed
search_docs1 field changed- added
Input schema / properties / sectionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Section" +}
- Added
update_deployment
5 tool updates
v0.1.25- Changed
get_component_definition1 field changed- added
Input schema / properties / haystack_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Haystack Version" +}
- Changed
get_custom_components1 field changed- added
Input schema / properties / haystack_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Haystack Version" +}
- Changed
list_component_families1 field changed- added
Input schema / properties / haystack_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Haystack Version" +}
- Changed
run_component1 field changed- added
Input schema / properties / haystack_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Haystack Version" +}
- Changed
search_component_definitions1 field changed- added
Input schema / properties / haystack_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Haystack Version" +}
1 tool update
v0.1.22- Added
debug_pipeline
1 tool update
v0.1.16- Added
yq_object_store
1 tool update
v0.1.14- Added
load_skill
1 tool update
v0.1.13- Changed
get_models3 fields changed- added
Input schema / $defsAdded value: +{ + "ModelProvider": { + "description": "Well-known providers of models.\n\nThis is not an exhaustive list of all providers a model may report. Other provider values\n(e.g. from custom or newly added integrations) are still valid and accepted as plain strings.", + "enum": [ + "aws-bedrock", + "openai", + "gemini", + "anthropic" + ], + "title": "ModelProvider", + "type": "string" + } +} - added
Input schema / properties / modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" +} - added
Input schema / properties / providerAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ModelProvider" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" +}
3 tool updates
v0.1.11- Added
get_models - Added
get_pipeline_trace_logs - Added
get_pipeline_trace_span_tags
1 tool update
v0.1.10- Changed
deploy_pipeline1 field changed- added
Input schema / properties / version_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Version Id" +}
5 tool updates
v0.1.9- Added
get_pipeline_trace - Changed
list_pipeline_search_history2 fields changed- added
Input schema / properties / sort_fieldAdded value: +{ + "default": "created_at", + "enum": [ + "created_at", + "query", + "duration", + "feedbacks/score" + ], + "title": "Sort Field", + "type": "string" +} - added
Input schema / properties / sort_orderAdded value: +{ + "default": "DESC", + "enum": [ + "ASC", + "DESC" + ], + "title": "Sort Order", + "type": "string" +}
- Added
list_pipeline_traces - Changed
list_search_history2 fields changed- added
Input schema / properties / sort_fieldAdded value: +{ + "default": "created_at", + "enum": [ + "created_at", + "query", + "duration", + "feedbacks/score" + ], + "title": "Sort Field", + "type": "string" +} - added
Input schema / properties / sort_orderAdded value: +{ + "default": "DESC", + "enum": [ + "ASC", + "DESC" + ], + "title": "Sort Order", + "type": "string" +}
- Changed
list_templates1 field changed- added
Input schema / properties / afterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "After" +}
2 tool updates
v0.1.5- Added
grep_object_store - Added
sed_object_store
TDQS
Scored across 109 tools
Most tools target a distinct resource+action, but several clusters overlap heavily: search_pipeline, search_pipeline_with_params and search_pipeline_with_filters are near-duplicates, and list_search_history, list_pipeline_search_history, list_pipeline_traces and list_sessions all describe browsing past runs with subtly different semantics from the same OData fields. The cost trio (get_cost_over_time/totals/breakdown) and the evaluator/experiment run tools (get_experiment_run, list_experiment_runs, list_evaluation_runs, get_evaluation_run) require careful reading to distinguish.
The surface is overwhelmingly a predictable snake_case verb_noun pattern (list_pipelines, create_deployment, get_experiment_results, delete_dataset). Deviations are minor and readable: object-store helpers follow a noun_object_store shape (yq_object_store, grep_object_store, sed_object_store), and a few verbs are nonstandard (load_skill, try_evaluator, rerun_failed_experiment). No camelCase or chaotic mixing.
109 tools is far beyond a well-scoped set and forces the agent to sift many near-adjacent options. The breadth spans genuinely different domains (pipelines, deployments, indexes, costs, datasets, experiments, evaluators, components, docs, object store, workspaces, secrets), but the volume plus per-domain granularity (e.g. three search variants, five object-store helpers, four deployment-tag/revision tools) makes discovery costly.
Coverage is unusually deep: full pipeline version lifecycle (create/patch/restore/validate/deploy), deployment revisions/activation/tags/stats, index create/update/deploy/validate, dataset and experiment CRUD, evaluator versioning and scoring runs. Gaps remain: no delete for pipelines, indexes or workspaces, and secrets are only list/get with no create/update/delete, so some lifecycle work is a dead end.
Maintenance
Related MCP Connectors
Build and manage data pipelines, add custom connectors, and chat with your data.
Backend platform for AI agents: one agentstack.execute tool runs batched steps over +700 actions (hosting, storage, auth, payments, CRM, app builder).
Build, validate, and deploy multi-agent AI solutions from any AI environment.
The AI orchestration agent for modern software teams.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceDeploys and serves Haystack Pipelines and Agents as REST APIs and MCP tools, enabling AI assistants to interact with custom NLP pipelines for tasks like RAG, document processing, and intelligent agents through natural language.10,785 PyPI156Apache 2.0
- AlicenseBqualityDmaintenanceEnables AI agents to interact with Dagster instances, explore data pipelines, monitor runs, and manage assets.925Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables document Q&A and knowledge retrieval through hybrid semantic and keyword search, with tools for document ingestion, chunking, summarization, PII redaction, and RAGAS-based evaluation.-
- FlicenseAqualityBmaintenanceEnables Claude to inspect, configure, run, and modify individual RAG/agent pipeline stages (retrieve, rerank, generate, eval) as structured typed tool calls, and execute the full pipeline end to end.5-