Shiranui
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., "@Shiranuisearch for adverse events controlled terminology"
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.
Shiranui
Shiranui is the Model Context Protocol(MCP) Server for retreiving the clinical standard contents in the CDISC Library.
This MCP server is built with Python FastMCP.
https://github.com/user-attachments/assets/9cd7e1a6-2750-4910-bb03-763c323b9f22
Support CDISC Library API
v2 Biomedical Concept Endpoints
v2 Dataset Specialization Endpoints
Controlled Terminology Codelist Endpoints
ADaM Variable Metadata Endpoints
SDTM Metadata Endpoints
CDASH Metadata Endpoints
SEND Metadata Endpoints
Search Tool
Related MCP server: Medical Terminologies MCP
Requirements
Python v3.13 and UV were installed on your device.
You have the CDISC Library API Key.
Installation
Download Shiranui from the Releases Page.
Mac and Linux
cd /your/shiranui/dir
uv syncSet your API key as an environment variable named CDISC_LIBRARY_API_KEY.
Windows
Use back slash "\" for path separator charactor.
cd C:\your\shiranui\dir
uv syncSet your API key as an environment variable named CDISC_LIBRARY_API_KEY.
Configure mcp client
LM Studio
Mac and Linux
{
"mcpServers": {
"Shiranui": {
"command": "uv",
"args": [
"run",
"/full/path/to/shiranui/dir/.venv/bin/shiranui"
]
}
}
}Windows
Use slash"/" for path separator charactor.
{
"mcpServers": {
"Shiranui": {
"command": "uv",
"args": [
"run",
"C:/full/path/to/shiranui/dir/.venv/Scripts/shiranui"
]
}
}
}You need to replace "/full/path/to/shiranui/dir" to match your own environment.
In addition to LM Studio, it may also work with Claude Desktop, Codename Goose, and other MCP Clients.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
31 toolsget_adam_dataset_structureB
Get the structure and variables for a specific ADaM dataset
Args: dataset: The ADaM dataset name (e.g., ADSL, ADAE, OCCDS) adamig_version: ADaMIG version (e.g., "1-3" or "1.3"). Default is "1-3".
Usage: get_adam_dataset_structure("ADSL") get_adam_dataset_structure("ADAE", "1-3")
Returns: Dictionary with dataset structure and list of variables
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | ||
| headers_ | No | ||
| adamig_version | No | 1-3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It indicates this is a read-only lookup and states the return type: a dictionary with dataset structure and variable list. It also discloses the default version behavior, but it does not mention error conditions, access requirements, or the behavior of the hidden headers_ parameter. Moderate disclosure, with gaps.
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 concise sections for summary, Args, Usage, and Returns, and the one-sentence summary is front-loaded. The usage examples duplicate some argument information but are useful for disambiguation. No filler or unnecessary detail.
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 low-complexity lookup tool, the description covers the main dataset and version parameters, shows concrete usage examples, and states the return type since no output schema exists. It falls short only in not describing the exact dictionary shape, the headers_ parameter, or error/edge-case behavior, but these are minor for this tool's scope.
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 does for the two main parameters: dataset is explained with concrete examples (ADSL, ADAE, OCCDS), and adamig_version is given with accepted formats and a default. Usage examples reinforce parameter syntax. However, the third parameter headers_ appears in the schema but is never mentioned in the description, leaving an unexplained 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?
The opening sentence clearly states the action and resource: 'Get the structure and variables for a specific ADaM dataset.' The ADaM scope distinguishes it from sibling SDTMM/SEND/CDASH domain-structure tools, though it does not explicitly contrast with the similarly named get_adam_variable_details. It is clear and specific, but slight sibling ambiguity keeps it below 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides call syntax and usage examples, but no guidance on when to choose this tool versus alternatives like get_adam_variable_details or the other domain-structure getters. There is no mention of when-not-to-use or which sibling handles related but different cases, so selection 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.
get_adam_variable_detailsA
Retrieve ADaM variable metadata including label, datatype, and associated codelists
Args: adam_variable: The ADaM variable name (e.g., TRT01P, PARAMCD, AVAL) adamig_version: ADaMIG version (e.g., "1-3" or "1.3"). Default is "1-3".
Usage: get_adam_variable_details("TRT01P") get_adam_variable_details("PARAMCD", "1-3") get_adam_variable_details("AVAL", "1-2")
Returns: Dictionary with variable details, label, datatype, core status, and associated codelists
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| adam_variable | Yes | ||
| adamig_version | No | 1-3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. 'Retrieve' indicates a read-only lookup, and it explicitly states the default ADaMIG version and the returned dictionary contents. It does not cover error handling or edge cases, but for a simple metadata lookup it is appropriately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with Purpose, Args, Usage, and Returns sections, and the main purpose is front-loaded. The usage examples add value, though the Returns line partly repeats the initial metadata list, creating slight redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity lookup tool with no output schema, the description provides the essential operational information: what it returns, which parameter is required, what the version default is, and how to call it. It could be more complete by naming sibling alternatives for SDTM/SEND variable metadata, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for adam_variable (with ADaM-specific examples) and adamig_version (accepted formats and default). The headers_ parameter is not mentioned, which is a minor gap, but the two operational parameters are well documented with usage 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?
States a specific verb ('Retrieve') and resource ('ADaM variable metadata'), with concrete output fields (label, datatype, codelists). The 'ADaM' qualifier distinguishes it from sibling SDTM/SEND variable-detail tools without needing to open 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?
The description clearly implies use for ADaM variable metadata and provides usage examples, but it does not explicitly state when to choose this tool over sibling alternatives like get_sdtm_variable_details or search_cdisc_library. There is no when-not-to-use guidance or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bc_for_packageC
Get a specific Biomedical Concept from a specific package
Args: package (str): The ID of the package to retrieve biomedical concepts from. biomedicalconcept_id (str): The ID of the Biomedical Concept to retrieve.
Usage: get_bc_for_package("PACKAGE", "BIOM EDICALCONCEPT_ID")
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | ||
| headers_ | No | ||
| biomedicalconcept_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 of behavioral disclosure. It indicates a read operation through the word "Get," but discloses nothing about return shape, potential errors, authorization requirements, or how packages/versions are resolved. The typo in the usage example also slightly undermines its reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with a clean Args section and usage example. It is mostly efficient, but the usage example contains a formatting typo ("BIOM EDICALCONCEPT_ID") and repeats information already present in the Args list, so it is not flawless.
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 single-item retrieval with two required parameters, the description is minimally viable: it gives the purpose, the required IDs, and an invocation example. However, with no output schema and no mention of the optional headers_ parameter or return behavior, an agent is left without complete context for confidently using the tool against several similar 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%, so the description must compensate. It clarifies the two required parameters well: package is "the ID of the package" and biomedicalconcept_id is "the ID of the Biomedical Concept to retrieve." However, the optional headers_ parameter is entirely undocumented, leaving a gap in the parameter surface.
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: "Get a specific Biomedical Concept from a specific package." This clearly conveys what the tool does and distinguishes it from list-returning siblings by emphasizing specificity, though it does not explicitly name alternatives like get_bc_list_for_package.
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 an argument list and usage example but gives no guidance on when to use this tool versus siblings such as get_latest_bc or get_bc_list_for_package. It does not state conditions, prerequisites, or exclusions, so the agent must infer the right context from the name and one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bc_list_for_packageC
Get Biomedical Concept list for a specific Package
Args: package(str): The ID of the Package to retrieve biomedical concept list from.
Usage: get_bc_package("PACKAGE")
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | ||
| headers_ | 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 of behavioral disclosure, but it only says the tool 'gets' a list and provides no details about authentication, errors, pagination, output shape, or side effects. The read-only nature is implied by the verb but not explicitly 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 reasonably short and the main purpose is front-loaded. However, the Usage line contains an incorrect function name, which reduces clarity and makes part of the description untrustworthy.
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 output schema and no annotations, the description lacks important context such as return format, optional header behavior, and how it differs from sibling tools like get_bc_for_package or get_latest_bc_list. An agent could make a basic call using the required parameter, but would have no guidance for edge cases or alternatives.
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 meaningful context for the required 'package' parameter by explaining it is the ID of the Package, which goes beyond the bare schema title 'Package'. However, the optional 'headers_' parameter is not described at all, and with 0% schema description coverage, the description only partially compensates.
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 Biomedical Concept list for a specific Package, naming both the verb and the resource. However, it does not differentiate among similar siblings like get_bc_for_package or get_latest_bc_list, which leaves some ambiguity about which tool to prefer.
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 this tool versus the many sibling tools, such as get_latest_bc_list or get_bc_for_package. The usage example is also misleading because it calls 'get_bc_package' rather than the actual tool name 'get_bc_list_for_package'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bc_package_listC
Get Biomedical Concept Package List from CDISC Library
Usage: get_bc_package_list()
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | 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 of behavioral disclosure. It only says 'Get,' implying read-only retrieval, but does not reveal authentication/header needs, return format, or whether the result is scoped to latest or all packages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with the core purpose in the first sentence and no filler. It is appropriately concise, though the minimal content is penalized more heavily in other dimensions.
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 30 similar sibling tools, no annotations, no output schema, and one undocumented optional parameter, a single sentence is insufficient for an agent to confidently select and invoke this tool. It does not clarify how this differs from get_bc_list_for_package or get_latest_bc_list.
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 one parameter, headers_, with 0% schema description coverage, and the description never mentions it. Even the usage line shows get_bc_package_list() with no arguments, so an agent cannot infer what headers_ means or whether it 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 gives a clear verb ('Get'), resource ('Biomedical Concept Package List'), and source ('CDISC Library'), so the general purpose is understandable. However, it does not distinguish this from similar siblings such as get_bc_list_for_package or get_latest_bc_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance or comparison to alternatives. The 'Usage' line is only a bare call signature, which says how to invoke the tool but not when it is preferable to any sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cdashig_domains_listA
Get list of all CDASH domains for a specific CDASHIG version.
Args: cdashig_version (str, optional): CDASHIG version (e.g., "2-3" or "2.3"). If not provided, uses latest version. headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains CDASHIG version and list of all domains with metadata.
Example: get_cdash_domains_list("2-3") Returns list of domains like AE, CM, DM, VS, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| cdashig_version | 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 discloses the return shape (dict with version and list of domains with metadata) and the default-version behavior, which is helpful. However, it does not describe behavior for invalid versions, how headers_ affects the request, or what metadata the domains include.
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 docstring structure with Args, Returns, and Example is clear and front-loaded with the main purpose. It is concise and contains no filler. The example typo (get_cdash_domains_list instead of get_cdashig_domains_list) slightly detracts from an otherwise clean structure.
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, read-only listing tool it covers arguments, default behavior, and return type. Still, with no annotations and no output schema, more detail about headers_ formatting and domain metadata would be needed for fully self-contained invocation. The example typo and schema/description mismatch also 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 description coverage is 0%, so the description must compensate. It does explain cdashig_version with format examples and the latest-version default, and it identifies headers_ as custom headers. However, headers_ is underspecified, and the description says it is a dict while the schema declares string, creating ambiguity.
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 starts with a specific verb and resource: 'Get list of all CDASH domains for a specific CDASHIG version.' This clearly distinguishes it from siblings like get_cdashig_domain_structure and get_cdashig_field_details, which focus on structure or field details rather than the domain list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful usage context for the version argument and the default-latest behavior, but never explicitly says when to choose this tool over alternatives or when not to use it. Among many CDASHIG and library siblings, there is no pointer to a more appropriate tool for structure or field queries, so 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_cdashig_domain_structureA
Get complete domain structure with all fields for a CDASH domain.
Args: domain (str): CDASH domain code (e.g., "DM", "AE", "VS", "CM"). cdashig_version (str, optional): CDASHIG version (e.g., "2-3" or "2.3"). If not provided, uses latest version. include_codelists (bool, optional): If True, retrieves full codelist terms for fields. Default False for faster response. headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains domain metadata and complete list of fields with their attributes.
Example: get_cdash_domain_structure("CM", "2-3") Returns concomitant medications domain with all data collection fields
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| headers_ | No | ||
| cdashig_version | No | ||
| include_codelists | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It transparently explains that omitting cdashig_version uses the latest version, that include_codelists defaults to False for faster responses, and that enabling it retrieves full codelist terms. It also states the return shape as a dict with domain metadata and field lists. Missing auth/rate-limit details are minor for this kind of read-oriented 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 description is compact, front-loaded, and well-organized with Args, Returns, and Example sections. It loses a point because the example function name omits 'ig' (get_cdash_domain_structure instead of get_cdashig_domain_structure), which could mislead an agent despite the overall 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?
For a tool with sparse schema descriptions, no annotations, and no output schema, the description provides enough to invoke it correctly: required domain, optional version behavior, codelist toggle, return format, and an example. More detail on headers_ or the exact field attribute structure would improve it, but nothing essential 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 mostly does: domain gets concrete examples, cdashig_version gets format examples, and include_codelists gets behavior and performance rationale. The main weakness is that headers_ is described as a dict while the schema types it as a string, creating ambiguity for that 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?
The first sentence uses a specific verb and resource: 'Get complete domain structure with all fields for a CDASH domain.' This makes the tool's scope clear and implies it is for whole-domain retrieval rather than field-level lookup, though it does not explicitly contrast with sibling tools like get_cdashig_field_details or get_sdtm_domain_structure.
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 phrase 'complete domain structure with all fields' implies when the tool should be used, and the example shows a realistic call. However, there is no explicit statement about when to prefer this tool over related sibling tools, nor any exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cdashig_field_detailsA
Get detailed metadata for a specific CDASH field.
Args: field (str): Field name (e.g., "USUBJID", "AESTDTC", "CMTRT"). domain (str, optional): CDASH domain code (e.g., "DM", "AE", "CM"). If not provided, will search common domains. cdashig_version (str, optional): CDASHIG version (e.g., "2-3" or "2.3"). If not provided, uses latest version. include_codelist (bool, optional): If True, retrieves full codelist terms. Default True. headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains field metadata including name, label, datatype, core, definition, prompt, and optionally associated codelist terms.
Example: get_cdash_field_details("CMTRT", "CM", "2-3") Returns metadata for Concomitant Medication Name field
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | ||
| domain | No | ||
| headers_ | No | ||
| cdashig_version | No | ||
| include_codelist | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It reveals default behavior for version selection and include_codelist, explains what include_codelist does, and describes the returned dict structure. It does not mention errors or authentication, but for a read-only metadata lookup the stated behavior is clear enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured and appropriately sized: a one-line summary, per-parameter Args, a Returns section, and a concrete example. Every part earns its place and there is no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no annotations and no output schema, the definition provides defaults, optional-behavior explanations, return field names, and an example. An agent has enough information to call the tool correctly without external 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%, and the Args section compensates well by explaining each parameter, giving concrete examples, and stating defaults. However, headers_ is described as a dict in the description while the schema declares it as a string, which is a confusing type mismatch and prevents a perfect 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?
Opens with a specific verb-object sentence 'Get detailed metadata for a specific CDASH field' and further details the returned metadata in the Returns section. This clearly distinguishes it from sibling variable-detail tools for SDTM, ADaM, and SEND.
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 clear usage context by specifying the target resource and explaining optional fallback behavior such as searching common domains when domain is omitted and using the latest version when cdashig_version is omitted. It does not explicitly name alternatives or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cdashig_latest_versionA
Get the latest CDASH-IG version from the CDISC Library API.
Args: headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains latest version, all available versions, and display version.
Example: get_cdash_latest_version() Returns: {"latest_version": "2-3", "display_version": "CDASHIG v2.3", ...}
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | 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 does indicate an external API call, optional custom headers, and the returned fields ('latest version, all available versions, and display version'). However, it doesn't disclose auth expectations, failure behavior, or that the call is read-only beyond the verb 'Get'.
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 docstring is tight and well-organized with Args, Returns, and an Example, front-loading the purpose in the first line. The example is helpful but has a name typo ('get_cdash_latest_version' instead of 'get_cdashig_latest_version'), which slightly reduces trust.
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-optional-parameter retrieval tool, the description covers the main input, return shape, and an example, so an agent can call it without opening the schema. The gap is the unresolved type mismatch and the absence of any note about API errors or required authentication, which matters because no annotations or output schema exist.
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 that headers_ is optional and holds custom headers for the API request, which is meaning beyond the bare schema. But it contradicts the schema by typing it as 'dict' while the input schema declares type string, which can mislead an agent into sending an invalid value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb ('Get'), a specific resource ('latest CDASH-IG version'), and the source API, so an agent knows exactly what the tool returns. This is distinct from sibling tools like get_ct_latest_version or get_sdtm_latest_version, which target other CDISC standards.
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 CDASH-IG version retrieval, but it never explicitly states when to choose it over get_ct_latest_version, get_sdtm_latest_version, or other siblings. There is no when-not-to-use guidance or exclusion, so routing must be inferred from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cdisc_codelistA
Retrieve CDISC Controlled Terminology codelist with terms and metadata
Args: codelist_value: The codelist name (e.g., AGEU, PARAMCD, ACN, DTYPE) codelist_type: Match by 'ID' or 'CodelistCode'. Default is 'ID'. standard: CDISC standard (SDTM, ADAM, CDASH, etc.). Default is 'SDTM'. version: CT version in YYYY-MM-DD format. If not provided, fetches latest.
Usage: get_cdisc_codelist("AGEU") get_cdisc_codelist("ACN", standard="SDTM") get_cdisc_codelist("DTYPE", standard="ADAM") get_cdisc_codelist("AGEU", version="2024-12-20") get_cdisc_codelist("C66734", codelist_type="CodelistCode")
Returns: Dictionary containing codelist metadata and all terms with their decoded values
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | ||
| headers_ | No | ||
| standard | No | SDTM | |
| codelist_type | No | ID | |
| codelist_value | 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 of behavioral disclosure. It explains default values for standard and codelist_type, the 'fetches latest' behavior when version is omitted, and the return shape. It does not cover error behavior or undocumented headers_, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded summary, Args, Usage, and Returns sections. The usage examples are slightly repetitive but provide valuable call variations, and no filler sentences are present.
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 5 parameters, no annotations, and no output schema, the description covers most inputs and the return type well. However, headers_ is completely undocumented, and there is no guidance on edge cases, errors, or how this tool relates to the many sibling search/package functions.
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 by explaining codelist_value with examples, codelist_type matching modes, standard defaults, and version format. The main gap is headers_, which is not described anywhere in the schema or 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 opens with a specific verb and object: 'Retrieve CDISC Controlled Terminology codelist with terms and metadata.' This clearly identifies the tool's purpose and differentiates it from sibling functions that focus on packages, domains, or dataset specializations, though it does not explicitly name a sibling.
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 usage examples provide concrete calling patterns for different parameters, implying when the tool is useful. However, it does not explicitly say when to prefer this tool over alternatives like search_cdisc_library or get_ct_package_codelists, 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.
get_ct_latest_versionB
Get the latest Controlled Terminology version for a CDISC standard
Args: standard: The CDISC standard (SDTM, ADAM, CDASH, etc.). Default is SDTM.
Usage: get_ct_latest_version_tool("SDTM") get_ct_latest_version_tool("ADAM")
Returns: Dictionary with standard, latest version, display version, and all available versions
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| standard | No | SDTM |
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 states that the tool returns a dictionary with standard, latest version, display version, and available versions, which is useful. However, it does not disclose error behavior for invalid standards, case sensitivity, or any other side-effect-relevant traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized with labeled Args, Usage, and Returns sections. The purpose is front-loaded and every line contributes useful information without 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 simple getter with no annotations and no output schema, the description covers the core return shape and the main parameter. It is incomplete around the undocumented `headers_` parameter, invalid-input behavior, and how this tool relates to sibling latest-version getters.
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 explains the `standard` parameter with valid examples and notes the SDTM default, compensating for the 0% schema coverage for that parameter. However, the `headers_` parameter in the schema is completely undocumented in both the description and schema, leaving one of two parameters unexplained.
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 line states a specific action and resource: 'Get the latest Controlled Terminology version for a CDISC standard.' It names example standards and describes the return value. It does not explicitly contrast with sibling tools like get_sdtm_latest_version, but the 'Controlled Terminology' resource focus is distinct enough.
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 'Usage' section gives call examples but no guidance on when to choose this tool over sibling tools such as get_sdtm_latest_version, get_cdashig_latest_version, or get_sendig_latest_version. There are no exclusions, prerequisites, or alternative-selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ct_package_codelistsA
Get all codelists available in a CDISC Controlled Terminology package
Args: standard: CDISC standard (SDTM, ADAM, CDASH, etc.). Default is 'SDTM'. version: CT version in YYYY-MM-DD format. If not provided, fetches latest.
Usage: get_ct_package_codelists("SDTM") get_ct_package_codelists("ADAM", "2024-12-20")
Returns: Dictionary containing all codelists with their IDs and names
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | ||
| headers_ | No | ||
| standard | No | SDTM |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose the latest-version behavior and the return shape (dictionary of codelist IDs and names). It does not mention error handling, whether results are limited, or the purpose of the headers_ parameter, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-sentence purpose, Args section, Usage examples, and Returns section. Every section adds useful information and nothing is redundant or padded.
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 is adequate for a read-only listing tool: it explains the core parameters, gives examples, and states the return type. It lacks details on the undocumented headers_ parameter and possible error conditions, but these are minor given the tool's simple contract and 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 description coverage is 0%, so the description must compensate. It explains standard's meaning and default, and version's format and optionality. It does not document the headers_ parameter, but the two meaningful parameters are clearly covered with 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 and resource: 'Get all codelists available in a CDISC Controlled Terminology package.' The word 'all' clearly distinguishes this from singular sibling tools like get_cdisc_codelist, and the package context separates it from dataset/domain-focused 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 gives clear invocation context: standard defaults to SDTM, version must be YYYY-MM-DD, and latest is fetched if version is omitted. It includes concrete usage examples. However, it does not explicitly name alternatives or situations where a different sibling tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_bcC
Get latest Biomedical Concept specified by concept_id from CDISC Library
Args: concept_id (str): The ID of the Biomedical Concept to retrieve.
Usage: get_latest_bc_cat("C105585")
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| concept_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 of behavioral disclosure. It implies a read-only retrieval with 'Get', but it does not clarify how 'latest' is determined, whether authentication is needed, what the response contains, or any error or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the main action, and the Args section is compact. However, the Usage line appears copied from a sibling tool and adds confusion rather than earning 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 annotations and no output schema, the description leaves important context missing: what the tool returns, what 'latest' means, and how this tool differs from get_latest_bc_list or get_latest_bc_cat. The incorrect usage example further undermines 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 description coverage is 0%, so the description must document the parameters itself. It explains concept_id and provides an example value, but it entirely omits headers_, leaving one of the two parameters undocumented.
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 clear action and resource: 'Get latest Biomedical Concept ... from CDISC Library', and the concept_id parameter identifies the target. However, it does not differentiate this single-concept lookup from similar siblings like get_latest_bc_list or get_latest_bc_cat.
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 is given about when to use this tool versus the many sibling tools. The only usage line is actively misleading because it calls get_latest_bc_cat, a different sibling tool, rather than get_latest_bc, so an agent following it would invoke the wrong function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_bc_catC
Get Latest Biomedical Concept Categories from CDISC Library
Usage: get_latest_bc_cat()
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | 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 of behavioral disclosure. 'Get' implies a read operation, but the description does not explain what the returned categories look like, whether headers_ affects behavior, or any other runtime characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and gets to the point, but the 'Usage: get_latest_bc_cat()' line is redundant with the tool name and adds no information. It is concise yet under-specified.
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, no annotations, and many closely related sibling tools, the description is too thin. It does not clarify what 'categories' returns, how it differs from sibling tools, or what context warrants 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 description does not mention the headers_ parameter at all. An agent has no indication of what headers_ means, what values are acceptable, or why it would be used.
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 and resource: 'Get Latest Biomedical Concept Categories from CDISC Library'. It is clear that the tool fetches BC categories, but it does not distinguish this from closely related siblings like get_latest_bc_list or get_latest_bc.
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 any of the many sibling tools. It only shows a usage example, which does not help an agent decide between get_latest_bc_cat and get_bc_list_for_package or get_latest_bc.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_bc_dataset_specializationsB
Get latest Biomedical Concept Dataset Specializations List from CDISC Library
Args: biomedicalconcept (str): The biomedical concept to retrieve dataset specializations for.
Usage: get_latest_bc_dataset_specializations("C105585")
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| biomedicalconcept | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full behavioral burden. It conveys that the operation is a read-like retrieval of the latest list, but it does not describe output format, pagination, error behavior, or external dependency caveats. This is adequate for a simple getter but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose, an Args section, and a concrete usage example. Every part contributes useful information, and the example with 'C105585' helps disambiguate expected input format.
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 two parameters and no output schema, the description provides the essential required argument and an invocation example. However, it omits details about the return value, the optional headers_ parameter, and how this tool relates to its many siblings, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides a useful semantic for the required parameter biomedicalconcept: 'The biomedical concept to retrieve dataset specializations for.' However, the optional headers_ parameter is entirely unexplained, leaving one parameter without any semantic 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?
The description states a specific action and resource: 'Get latest Biomedical Concept Dataset Specializations List from CDISC Library.' This clearly identifies what the tool returns and distinguishes it from SDTM-focused or BC-list siblings, though it does not explicitly name an alternative.
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 usage example demonstrates a concrete invocation, and the purpose implies when the tool is needed. However, it provides no guidance about when not to use it or which sibling tool to choose instead, which is relevant given the large set of similar CDISC Library tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_bc_listC
Get Latest Biomedical Concept List from CDISC Library
Usage: get_latest_bc_list()
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. The verb 'Get' implies a read operation, but nothing is disclosed about output shape, pagination, version resolution, authentication, errors, 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 text is short and front-loaded, but the minimalism is more under-specification than effective concision. The usage line adds little beyond the schema and obscures the one optional parameter, so it doesn't 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?
Given no annotations, no output schema, a single undocumented parameter, and a large family of similar BC tools, this description is far too sparse for an agent to invoke the tool correctly or disambiguate it from 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?
The single parameter headers_ has no schema description and 0% schema coverage. The description does not mention headers_ at all and even shows usage as 'get_latest_bc_list()', leaving the agent to guess whether headers should be supplied and what format they take.
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 identifies a specific verb and resource: getting the latest Biomedical Concept List from the CDISC Library. However, it doesn't distinguish whether 'list' means concept terms, packages, or categories, and it doesn't differentiate from siblings such as get_latest_bc, get_latest_bc_cat, and get_bc_list_for_package.
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 is given about when to call this tool instead of the many BC/SDTM/CT siblings, nor about what 'latest' resolution entails. The 'Usage:' line merely shows an empty call and does not provide context, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_sdtm_dataset_specializations_listB
Get Latest SDTM Dataset Specializations List for a specific domain
Args: domain (str): The domain to retrieve dataset specializations for.
Usage: get_latest_sdtm_dataset_specializations("DM")
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| headers_ | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must carry the behavioral burden. 'Get' and 'List' indicate a read-only retrieval operation returning a list, and 'latest' conveys a version-selection behavior. However, it does not disclose output shape, error cases, or any special constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, purpose-first, and includes an example invocation. The usage example drops '_list' from the function name ('get_latest_sdtm_dataset_specializations' vs the tool name), which is a minor consistency flaw in an otherwise compact definition.
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 getter with one required parameter, the description is adequate for making a basic call with a domain. But with no output schema, no annotations, many similar siblings, and an unexplained headers_ parameter, the agent gets limited help understanding what will be returned or when this tool is the correct choice.
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 domain parameter is explained ('The domain to retrieve dataset specializations for') and supported by a concrete usage example ('DM'). The optional headers_ parameter is not described at all, and with 0% schema description coverage the description only partially compensates for that 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 states a clear action ('Get') and resource ('Latest SDTM Dataset Specializations List') and adds a meaningful scope ('for a specific domain'). It is not purely tautological because it clarifies the domain-based scope, but it does not explicitly contrast closely related sibling tools such as get_latest_sdtm_specialization.
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 'use this when' or 'instead of X' guidance. The phrase 'for a specific domain' weakly implies a use case, but the description never tells an agent when to choose this tool over package-scoped or singular-specialization siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_sdtm_specializationB
Get Latest SDTM Specialization for a specific specialization ID
Args: dataset_specialization_id (str): The specialization ID to retrieve details for.
Usage: get_latest_sdtm_specialization("SYSBP")
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| dataset_specialization_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It indicates this is a read-style retrieval operation and that it fetches the 'latest' specialization, which is useful, but it does not explain what 'latest' means, what happens on missing IDs, or whether any special context is required.
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 compact, front-loads the purpose, and includes a useful code example. Every section adds value and there is no filler, though the term 'specialization' is repeated heavily.
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 output schema and a large group of sibling tools, the description does not explain what the returned details look like, what 'latest' refers to, or how this tool relates to the sibling list/fetch tools. This makes it under-specified for reliable agent selection and result interpretation.
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 documents the required dataset_specialization_id parameter with a type and a clear explanation, and it shows a realistic usage example. However, the optional headers_ parameter is not described anywhere, and schema description coverage is 0%, so the compensation is incomplete.
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 ('Get') and the resource ('Latest SDTM Specialization for a specific specialization ID') and includes a concrete usage example with 'SYSBP'. It does not explicitly distinguish itself from sibling tools such as get_latest_sdtm_dataset_specializations_list, so an agent may need to infer the distinction from the wording.
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 an invocation example but no guidance about when to choose this tool over related siblings. There is no mention of alternatives, exclusions, or prerequisites, leaving the agent to guess based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_classesA
Get SDTM domain classes (Findings, Events, Interventions, etc.) from CDISC Library.
Args: sdtmig_version (str, optional): SDTM-IG version (e.g., "3-4" or "3.4"). If not provided, uses latest version. headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains SDTM classes with their domains or error information.
Example: get_sdtm_classes("3-4") Returns list of classes: FINDINGS, EVENTS, INTERVENTIONS, SPECIAL PURPOSE, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| sdtmig_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the default-version behavior and states that a dict with classes or error information is returned, but it omits authentication, rate-limit, or response-structure details, and it conflicts with the schema by describing headers_ as a dict while the schema types it as a string.
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 clearly with Args, Returns, and Example sections. No sentence is wasted, and the example illustrates a realistic call and expected 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?
Given no output schema, no annotations, and sparse parameter schemas, the description provides the essential call pattern and return type but does not fully disambiguate from the many sibling tools or explain error/authentication behavior. It is minimally viable for simple retrieval use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates by explaining sdtmig_version's purpose, example formats, optionality/default, and headers_' purpose. However, the headers_ guidance is unreliable because the schema declares it as a string, so the extra meaning is useful but not fully trustworthy.
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 a specific action and resource: getting SDTM domain classes (Findings, Events, Interventions, etc.) from CDISC Library. The SDTM qualifier and 'classes' resource separate it from sibling tools like get_sendig_classes and get_sdtm_domain_structure.
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 guidance about when to choose this tool over sibling tools such as get_sdtm_domain_structure or get_sdtm_latest_version. The only usage-related note is the parameter-level default behavior for sdtmig_version, which does not help with tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_dataset_specialization_domain_listC
Get SDTM Dataset Specialization Domain List from CDISC Library
Usage: get_sdtm_dataset_specialization_domain_list()
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | 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 of behavioral disclosure. It only says 'Get... from CDISC Library,' implying a read operation, but reveals nothing about authentication, rate limits, response shape, or what 'domain list' concretely returns. The description does not contradict annotations, but it also adds no behavioral detail beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but the 'Usage:' block is redundant with the tool's own signature and does not add informative content. The main sentence is essentially the tool name reworded, so brevity is achieved at the expense of substance. This reads as under-specification rather than effective conciseness.
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 large set of similar sibling tools, no output schema, and no annotations, this description is insufficient for an agent to confidently select and invoke the tool. It does not clarify what dataset specialization domains are, how this list differs from other list-returning siblings, or what the caller should do with the result. For a seemingly simple no-required-parameter tool, the contextual gaps still matter because the identifier alone is 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%, and the sole parameter 'headers_' is completely unexplained. The description does not compensate for this gap; the Usage line shows no arguments, which suggests the parameter is irrelevant but does not clarify its purpose or accepted values. With the schema providing no documentation and the description providing none either, this is effectively an undocumented 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?
The description states a clear action and resource: 'Get SDTM Dataset Specialization Domain List from CDISC Library.' This is more than a tautology because it names the source and the object. However, it does not differentiate this tool from closely named siblings like get_latest_sdtm_dataset_specializations_list or get_sdtm_dataset_specialization_list_for_package.
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 this tool versus the many similar sibling tools. The 'Usage:' section only repeats the function call signature, which adds no decision-making value. No alternatives, prerequisites, or exclusion conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_dataset_specialization_for_packageC
Get SDTM Dataset Specialization for a specific package and dataset specialization
Args: package (str): The ID of the package to retrieve dataset specializations from. datasetspecialization (str): The ID of the dataset specialization to retrieve.
Usage: get_sdtm_dataset_specialization_for_package("PACKAGE", "DATASET_SPECIFICATION")
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | ||
| headers_ | No | ||
| datasetspecialization | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are available, so the description carries the full burden. It only repeats get/retrieve semantics without disclosing return format, error behavior, permissions, or side effects. It does not contradict annotations because none exist, but it adds little behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary is front-loaded and the Args/Usage sections are compact. The usage example is somewhat redundant but does not waste significant space.
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 not state what the returned dataset specialization contains or what the API returns. It also fails to address the undocumented headers_ parameter or clarify when this tool should be preferred over the many similar sibling retrieval 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?
The Args section explains package and datasetspecialization as IDs, which adds meaning beyond the bare input schema titles. However, the optional headers_ parameter is entirely undocumented, so the description only partially compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get SDTM Dataset Specialization' for a specific package and dataset specialization. It is not a tautology and the singular 'specific' weakly distinguishes it from list-oriented siblings, 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?
No when-to-use or when-not-to-use guidance is provided. The 'Usage' line is just a call example, not guidance about when to select this tool over get_sdtm_dataset_specialization_list_for_package or the latest-specialization siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_dataset_specialization_list_for_packageC
Get SDTM Dataset Specializations List for a specific Package
Args: package(str): The ID of the package to retrieve dataset specializations list from.
Usage: get_sdtm_dataset_specialization_list_for_package("PACKAGE")
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | ||
| headers_ | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It only says 'Get' a list, which implies a read operation, but it does not disclose what the list contains, response shape, error behavior, or any constraints. The description adds no behavioral context beyond the operation itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose. The Args and Usage sections are short and easy to scan, though the Usage example is largely redundant with the tool name and Args.
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?
Without annotations, output schema, or sibling differentiation, the description is too thin for confident selection and invocation. It explains the main argument but not what the returned dataset specializations list will look like, why this differs from sibling tools, or how to use the optional headers_ parameter.
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 for the required 'package' parameter by identifying it as 'The ID of the package', which is more than the schema provides. However, the optional 'headers_' parameter is completely undocumented in both the schema and the description, so the parameter guidance is only partial.
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 a specific verb and resource: 'Get SDTM Dataset Specializations List for a specific Package'. It is immediately understandable, though it does not explicitly differentiate itself from similarly named siblings like get_sdtm_dataset_specialization_for_package.
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 only an invocation example ('Usage: get_sdtm_dataset_specialization_list_for_package("PACKAGE")'), not guidance on when to choose this tool over the many sibling tools. There are no exclusions, alternatives, or decision criteria provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_dataset_specialization_package_listC
Get SDTM Dataset Specialization Package List from CDISC Library
Usage: get_sdtm_dataset_specialization_package_list()
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden for behavioral disclosure. It only says the call retrieves a list from CDISC Library; it does not describe return format, optional header behavior, failure modes, pagination, rate limits, or the read-only nature beyond the verb 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and the first sentence is useful, but the usage line is largely a redundant restatement of the tool name. It is compact yet under-specified, so the brevity is not fully 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?
With no annotations, no output schema, and an undocumented optional parameter, the description is too minimal for reliable agent use. It leaves unclear what the returned package list contains, how 'headers_' is used, and how this tool differs from siblings like get_sdtm_dataset_specialization_list_for_package.
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 does not mention the 'headers_' parameter at all. The usage line even suggests a zero-argument call, leaving the agent unable to infer what 'headers_' is for or whether it affects the request.
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 clear verb ('Get') and a specific resource ('SDTM Dataset Specialization Package List') from 'CDISC Library'. This is not a tautology and gives the agent the basic domain context, though it does not explicitly differentiate from similarly named sibling 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?
There is no guidance on when to use this tool versus the many sibling tools. The 'Usage:' line only repeats the call syntax, which is not selection criteria; no alternatives, exclusions, or contextual triggers are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_domain_structureA
Get complete domain structure with all variables for an SDTM domain.
Args: domain (str): SDTM domain code (e.g., "DM", "AE", "VS", "LB"). sdtmig_version (str, optional): SDTM-IG version (e.g., "3-4" or "3.4"). If not provided, uses latest version. include_codelists (bool, optional): If True, retrieves full codelist terms for variables. Default False for faster response. headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains domain metadata and complete list of variables with their attributes.
Example: get_sdtm_domain_structure("DM", "3-4") Returns demographics domain with all required/expected/permissible variables
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| headers_ | No | ||
| sdtmig_version | No | ||
| include_codelists | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses the return type, the 'latest version' fallback behavior, and the performance trade-off of include_codelists. It does not mention errors, authentication, or response size, but for a read-oriented structure getter this is reasonable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear first sentence, Args, Returns, and Example sections. It is slightly longer than necessary and the example partially restates the first sentence, but every section adds practical value for invoking the 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?
Given there is no output schema and no annotations, the description covers the main needs: what the tool returns, how to specify parameters, and a concrete call example. It is complete enough for basic use, though it could add a bit more detail about what variable attributes are included or how errors are surfaced.
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 explain every parameter, and it does. It gives concrete examples for domain ('DM', 'AE', 'VS', 'LB'), version format ('3-4' or '3.4'), the default behavior for version and codelists, and the purpose of headers_.
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: 'Get complete domain structure with all variables for an SDTM domain.' It clearly distinguishes itself from sibling tools like get_sdtm_variable_details (which is singular/variable-level) and get_sendig_domain_structure (which is for SENDIG rather than SDTM).
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 useful invocation context, such as the default for sdtmig_version and include_codelists, but does not explicitly state when to prefer this tool over alternatives or when another sibling would be more appropriate. Usage is implied by the name and first sentence rather than directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_latest_versionA
Get the latest SDTM-IG version from CDISC Library.
Returns: dict: Contains the latest SDTM-IG version or error information.
Example: get_sdtm_latest_version() Returns: {"latest_version": "3-4", "display_version": "3.4"}
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the tool returns a dict with the latest version or error information, and shows an example output. However, it does not mention network/auth/rate-limit behavior or the optional headers_ parameter, leaving some behavioral context unspecified.
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 compact and front-loaded. The purpose statement, return type, and example are all relevant and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no required parameters and no output schema, the description provides the essential return contract and an example. It is incomplete because it never addresses the existing headers_ parameter or explicitly routes the agent away from sibling 'latest version' tools, but the core callable behavior is sufficiently clear.
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 is one parameter, headers_, with 0% schema description coverage, and the description does not explain it. The example does show a zero-argument call, which hints that headers_ is optional, but the description adds no real semantic meaning for the 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?
The description opens with a specific verb and resource: 'Get the latest SDTM-IG version from CDISC Library.' It clearly distinguishes this tool from siblings like get_ct_latest_version and get_sendig_latest_version by naming the exact SDTM-IG resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you need the latest SDTM-IG version. However, there is no explicit when-to-use versus alternatives guidance, and the many siblings are not mentioned or differentiated beyond the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdtm_variable_detailsA
Get detailed metadata for a specific SDTM variable.
Args: variable (str): Variable name (e.g., "USUBJID", "AESTDTC", "LBORRES"). domain (str, optional): SDTM domain code (e.g., "DM", "AE", "VS"). If not provided, will search common domains. sdtmig_version (str, optional): SDTM-IG version (e.g., "3-4" or "3.4"). If not provided, uses latest version. include_codelist (bool, optional): If True, retrieves full codelist terms. Default True. headers_ (dict, optional): Custom headers for API request.
Returns: dict: Contains variable metadata including name, label, datatype, core, role, and optionally associated codelist terms.
Example: get_sdtm_variable_details("AESTDTC", "AE", "3-4") Returns metadata for AE Start Date/Time variable
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ||
| headers_ | No | ||
| variable | Yes | ||
| sdtmig_version | No | ||
| include_codelist | 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 of behavioral disclosure. It clearly explains defaults, such as searching common domains when domain is omitted and using the latest version when sdtmig_version is not provided, and describes the return value. It does not mention error behavior, authentication, or rate limits, but for a read-only metadata lookup the provided detail is solid.
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 a clear one-sentence purpose, followed by an organized parameter list and a helpful example. It is somewhat verbose with the docstring-style format, but every section earns its place and no irrelevant content 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?
For a metadata lookup tool with no output schema and no annotations, the description is quite complete: all parameters are explained, return contents are listed, and defaults are specified. It could be more complete with explicit sibling differentiation and examples of response structure, but it gives an agent sufficient detail to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully for the lack of parameter documentation. It does so by explaining each parameter, providing concrete examples for variable and sdtmig_version, stating defaults for domain and include_codelist, and clarifying headers_ as custom API headers. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get detailed metadata') for a specific resource ('a specific SDTM variable'), which identifies the tool's core purpose. It is distinct from sibling tools like get_adam_variable_details and get_sendig_variable_details because it explicitly names SDTM, though it does not explicitly differentiate itself from those 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 intended usage is implied by the description: an agent would use this when it needs metadata for an SDTM variable. However, there are no explicit instructions about when to choose this over sibling tools such as get_sdtm_domain_structure or search_cdisc_library, and no 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.
get_sendig_classesB
Get list of all SEND domain classes (Findings, Events, Interventions, etc.)
Args: sendig_version (str): SENDIG version (e.g., "3-1-1" or "3.1.1"). If not specified, uses latest version. headers_: Optional custom headers
Returns: dict: Domain classes information
Example: get_sendig_classes() get_sendig_classes("3-1-1")
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No | ||
| sendig_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose that the version defaults to latest and that the return is a dict. However, it does not mention potential errors, authentication requirements, or any details about what the dict actually contains beyond 'Domain classes information'.
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 compact, front-loaded with the purpose, and includes Args, Returns, and Example sections. The only minor inefficiency is that the Returns line largely repeats the opening sentence's 'Domain classes 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 simple listing tool with two optional parameters, the description is minimally viable: it documents the version format, defaults, and provides example call signatures. However, with no annotations and no output schema, it lacks richer context about return structure, headers_ semantics, error behavior, or how this tool relates to sibling SEND 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 explains sendig_version with format examples and default behavior, but headers_ is only described as 'Optional custom headers', adding little beyond its property name and default null. Partial compensation is present, but one parameter remains underspecified.
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: 'Get list of all SEND domain classes' with concrete examples (Findings, Events, Interventions). This clearly distinguishes it from sibling tools like get_sendig_domain_structure and get_sendig_variable_details, even without naming 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?
No guidance is given about when to use this tool versus the many sibling tools for SEND domains. The only usage-related note is that omitting sendig_version uses the latest version, which is more a behavioral default than a selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sendig_domain_structureA
Get complete SEND domain structure with all variables and metadata
Args: domain (str): SEND domain name (e.g., "DM", "EX", "LB", "MI") sendig_version (str): SENDIG version (e.g., "3-1-1" or "3.1.1"). If not specified, uses latest version. headers_: Optional custom headers
Returns: dict: Complete domain structure including variables with metadata
Example: get_sendig_domain_structure("DM") get_sendig_domain_structure("LB", "3-1-1")
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| headers_ | No | ||
| sendig_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It calls the operation a 'Get', implying a read-only retrieval, and transparently states that an unspecified sendig_version uses the latest version. It also describes the return type as a dict with variables and metadata.
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 a one-sentence summary, followed by structured Args, Returns, and Examples. It is compact and informative, with only minor redunancy between the summary and the Returns 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?
Given three parameters, no output schema, and no annotations, the description provides enough for an agent to select and invoke the tool correctly: domain required, version optional with default, and return shape summarized. Lacking details about headers_ format keeps this from being fully 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?
Schema description coverage is 0%, so the description must explain parameters. It does so for domain with concrete examples, for sendig_version with format and default behavior, and marks headers_ as optional custom headers. The headers_ parameter remains somewhat vague, keeping this below 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?
The description opens with 'Get complete SEND domain structure with all variables and metadata', which states a specific verb, resource, and scope. It clearly differentiates from sibling tools like get_sendig_variable_details by emphasizing the complete domain structure rather than a single variable.
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 clear context for when to use the tool: whenever the complete SEND domain structure is needed. It does not explicitly mention alternatives or exclusions, but the purpose and required domain argument imply the use case strongly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sendig_latest_versionC
Get the latest SEND Implementation Guide version from CDISC Library
Args: headers_: Optional custom headers
Returns: dict: Latest SENDIG version information
Example: get_sendig_latest_version()
| Name | Required | Description | Default |
|---|---|---|---|
| headers_ | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It indicates a read operation through 'Get' and states the return type as dict, but it does not disclose authentication needs, side effects, error behavior, or interaction with the CDISC Library API beyond that.
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 compact and front-loaded with the main purpose. The Args, Returns, and Example sections are concise and useful, with no redundant or filler 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?
For a simple retrieval tool with one optional parameter, the description is minimally adequate: it names the source, the target, the return type, and provides an example call. However, without an output schema, annotations, or more details on headers and API behavior, it leaves some gaps for an agent to infer.
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 and only one optional parameter. The description adds meaning by calling headers_ 'Optional custom headers,' which helps an agent understand its role, but it does not explain what headers might be needed or how they should be formatted.
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 clear verb and resource: 'Get the latest SEND Implementation Guide version from CDISC Library.' This is specific enough to distinguish it from siblings like get_sendig_classes or get_sendig_domain_structure, though it does not explicitly contrast with other 'latest version' siblings such as get_sdtm_latest_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?
No guidance is given about when to choose this tool over alternatives. The description implies its use when the latest SENDIG version is needed, but it does not mention exclusions, preconditions, or related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sendig_variable_detailsA
Get detailed metadata for a SEND variable with optional codelist integration
Args: variable (str): Variable name (e.g., "USUBJID", "LBTESTCD", "MISPEC") domain (str): SEND domain name. If not specified, will attempt to auto-detect. sendig_version (str): SENDIG version (e.g., "3-1-1"). If not specified, uses latest version. include_codelist (bool): If True and variable has controlled terminology, retrieve the codelist headers_: Optional custom headers
Returns: dict: Variable details including label, datatype, core status, and optional codelist
Example: get_sendig_variable_details("USUBJID") get_sendig_variable_details("LBTESTCD", "LB", include_codelist=True)
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ||
| headers_ | No | ||
| variable | Yes | ||
| sendig_version | No | ||
| include_codelist | 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 discloses important behaviors: domain auto-detection is only attempted, the latest version is used when unspecified, and codelist retrieval is conditional on controlled terminology. It does not mention error behavior, but for a read-only metadata lookup the disclosed behavior is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a clean, scannable docstring with Args, Returns, and Example sections. Every section contributes useful information, and the purpose statement is front-loaded. There is no filler or repetition.
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-parameter tool with no output schema and no annotations, the description is largely complete: it documents all parameters, gives two examples, and describes the return shape. It stops short of perfect completeness by not covering failure modes, ambiguous auto-detection, or the exact purpose of headers_, but it is still sufficient for most calls.
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 every parameter: variable with concrete examples, domain with auto-detection semantics, sendig_version with a default, include_codelist with conditional behavior, and headers_ as optional custom headers. This goes well beyond the bare schema types 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 starts with 'Get detailed metadata for a SEND variable,' which names a specific verb and resource, and adds the optional codelist qualifier. This clearly distinguishes it from sibling tools like get_sdtm_variable_details and get_adam_variable_details, which target different domains or data types.
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 argument-level usage context, such as domain auto-detection and defaulting to the latest SENDIG version, and the examples show valid call patterns. However, it does not explicitly state when to prefer this tool over alternatives like get_sdtm_variable_details or when not to use it, so the usage guidance is mostly implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cdisc_libraryA
Search across all CDISC Library content (variables, domains, codelists, BC, etc.)
Args: query (str): Search query string limit (int): Maximum number of results to return (default: 100, max: 500) headers_: Optional custom headers
Returns: dict: Search results with hits, totalHits, and hasMore
Example: search_cdisc_library("blood pressure") search_cdisc_library("USUBJID", limit=50)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| headers_ | 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. It does disclose the return shape (hits, totalHits, hasMore) and the default/max limit, but it does not explain pagination semantics, expectations for custom headers_, error handling, or what happens if the limit is exceeded. This is adequate but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a concise summary followed by clearly separated Args, Returns, and Example sections. There is no redundant filler or repeated schema information, and every section contributes operational 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?
Even without an output schema, the description defines the return contract (hits, totalHits, hasMore) and documents the important limit constraint. The only gaps are minor: how to interpret hasMore for further paging and what format custom headers_ should take. Overall, an agent has enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% parameter descriptions, but the Args section compensates by explaining query, limit (default: 100, max: 500), and optional headers_, and includes concrete usage examples. The query and headers_ descriptions are still thin, so it does not fully maximize semantic clarity, but it goes well 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 opening sentence 'Search across all CDISC Library content (variables, domains, codelists, BC, etc.)' clearly describes a specific action and broad resource. It is distinguishable from the sibling get_* tools that retrieve specific packages or domains, though it does not explicitly name that distinction.
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 a general-purpose search tool through the phrase 'Search across all CDISC Library content' and the examples, but it never directly states when to use this tool versus a specific sibling getter. There is no explicit when-to-use or when-not-to-use guidance, so the agent must infer the intended scope.
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.
31 tool updates
v0.1.0- First observed
get_adam_dataset_structure - First observed
get_adam_variable_details - First observed
get_bc_for_package - First observed
get_bc_list_for_package - First observed
get_bc_package_list - First observed
get_cdashig_domain_structure - First observed
get_cdashig_domains_list - First observed
get_cdashig_field_details - First observed
get_cdashig_latest_version - First observed
get_cdisc_codelist - First observed
get_ct_latest_version - First observed
get_ct_package_codelists - First observed
get_latest_bc - First observed
get_latest_bc_cat - First observed
get_latest_bc_dataset_specializations - First observed
get_latest_bc_list - First observed
get_latest_sdtm_dataset_specializations_list - First observed
get_latest_sdtm_specialization - First observed
get_sdtm_classes - First observed
get_sdtm_dataset_specialization_domain_list - First observed
get_sdtm_dataset_specialization_for_package - First observed
get_sdtm_dataset_specialization_list_for_package - First observed
get_sdtm_dataset_specialization_package_list - First observed
get_sdtm_domain_structure - First observed
get_sdtm_latest_version - First observed
get_sdtm_variable_details - First observed
get_sendig_classes - First observed
get_sendig_domain_structure - First observed
get_sendig_latest_version - First observed
get_sendig_variable_details - First observed
search_cdisc_library
TDQS
Scored across 31 tools
Many tools form near-duplicate clusters, especially the five SDTM dataset specialization tools and the Biomedical Concept tools (get_latest_bc vs get_latest_bc_cat vs get_latest_bc_list). Several descriptions even reference the wrong function name, e.g., get_latest_bc's usage calls get_latest_bc_cat, increasing confusion.
Tools consistently use get_ prefix and snake_case, but word order and qualifier placement vary unpredictably: get_sdtm_dataset_specialization_list_for_package vs get_sdtm_dataset_specialization_package_list, and get_ct_latest_version vs get_sdtm_latest_version. Singular/plural forms are also mixed, and abbreviations like bc, ct, cdashig are inconsistently placed.
31 tools is excessive for what is essentially a read-only metadata retrieval API. Many tools could be consolidated with standard and version parameters, and the count exceeds the reasonable upper bound for a coherent tool set.
The set covers SDTM, ADaM, CDASH, SEND, Controlled Terminology, Biomedical Concepts, dataset specializations, and search, so major workflows are supported. Minor gaps exist, such as no direct ADaM-IG version tool or general package list, but these are workable.
Maintenance
Related MCP Connectors
MCP server for AI access to Swagger by SmartBear.
Hosted MCP server for finding authoritative primary data sources and official portals.
ClinicalTrials MCP — wraps ClinicalTrials.gov API v2 (free, no auth)
MCP server for medicare-coverage
Related MCP Servers
- FlicenseAqualityDmaintenanceA TypeScript MCP server for interacting with CDISC Define-XML 2.0 and 2.1 files, enabling users to load, search, and retrieve clinical data metadata including datasets, variables, and codelists. It supports local file processing with document caching and provides responses in both JSON and Markdown formats.13-
- AlicenseAqualityAmaintenanceUnified MCP server providing LLMs with reliable lookup access to ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10, and (optionally) SNOMED CT.33133 npm12MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying and browsing SNOMED CT medical terminology concepts, including search, details, and hierarchy navigation via MCP tools.3MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides SNOMED CT clinical terminology lookup via any FHIR R4 terminology server supporting SNOMED CT and ECL. Offers tools for searching by term, fetching by code, and navigating the concept hierarchy.21Apache 2.0