Skip to main content
Glama

CDISC Library MCP Server โ€” Query clinical data standards (SDTM, ADaM, CDASH, CT) directly from AI assistants.

Python FastMCP License: MIT Tests API

๐ŸŒ Translations: ไธญๆ–‡ README ยท ๆ—ฅๆœฌ่ชž README


What is This?

The CDISC MCP Server connects AI assistants (Claude, VS Code Copilot, Cursor, etc.) to the CDISC Library REST API, exposing 11 structured tools for querying clinical trial data standards. Ask your AI assistant questions like:

"What variables are in the SDTM AE domain?"/m "Show me the ADSL variables in ADaM IG 1.3" "List all available Controlled Terminology packages"

For full setup instructions, see the User Manual โ†’. See Examples โ†’ for real conversation samples.


Related MCP server: snowstorm-mcp-server

Quick Start

0 ยท One-Line AI Install

Have an AI assistant install everything for you:

curl -fsSL https://raw.githubusercontent.com/Teninq/cdisc-mcp/main/install.md

Paste the output into Claude, Copilot, or any AI chat โ€” it will read the guide and walk you through the full setup interactively.


1 ยท Get a CDISC Library API Key

Register at https://library.cdisc.org and obtain a personal API key.

2 ยท Install

# Runtime only
pip install -e .

# With dev dependencies
pip install -e ".[dev]"

# With web explorer
pip install -e ".[web]"

3 ยท Set API Key

# Linux / macOS
export CDISC_API_KEY=your_key_here

# Windows โ€” Command Prompt
set CDISC_API_KEY=your_key_here

# Windows โ€” PowerShell
$env:CDISC_API_KEY = "your_key_here"

4 ยท Run

# Start MCP server (for AI assistant integration)
cdisc-mcp

# OR: Start Web Explorer (quick interactive testing)
python web/app.py

Web Explorer โ€” Quick Interactive Testing

The fastest way to verify your setup and explore tools without any AI client.

# 1. Install web dependencies
pip install -e ".[web]"

# 2. Set your API key
export CDISC_API_KEY=your_key_here   # Linux/macOS
set CDISC_API_KEY=your_key_here      # Windows CMD
$env:CDISC_API_KEY = "your_key_here" # Windows PowerShell

# 3. Start the bridge server
python web/app.py

# 4. Open in browser
#    โ†’ http://localhost:8080

The explorer provides:

  • Sidebar navigation โ€” all 11 tools organized by standard (SDTM / ADaM / CDASH / Terminology)

  • Auto-generated forms โ€” dropdowns for versions and domains, text inputs for variables

  • Live JSON responses โ€” syntax-highlighted, copyable output with response time

  • Bridge status indicator โ€” confirms your API key and connectivity

Tip: Use version strings with dashes โ€” 3-4 not 3.4, 1-3 not 1.3. Example: SDTM-IG 3-4, ADaM-IG 1-3, CDASH-IG 2-0


Available Tools

#

Tool

Standard

Description

1

list_products

โ€”

List all available CDISC standards and published versions

2

get_sdtm_domains

SDTM

List all datasets in a SDTM-IG version

3

get_sdtm_domain_variables

SDTM

List all variables in an SDTM domain/dataset

4

get_sdtm_variable

SDTM

Get full definition of a specific SDTM variable

5

get_adam_datastructures

ADaM

List all data structures in an ADaM-IG version

6

get_adam_variable

ADaM

Get definition of a specific ADaM variable

7

get_cdash_domains

CDASH

List all domains in a CDASH-IG version

8

get_cdash_domain_fields

CDASH

Get all data collection fields for a CDASH domain

9

list_ct_packages

CT

List all available Controlled Terminology packages

10

get_codelist

CT

Get definition and metadata of a CT codelist

11

get_codelist_terms

CT

List all valid terms in a CT codelist

Version Reference

Standard

Available Versions (use dashes)

SDTM-IG

3-4 ยท 3-3 ยท 3-2 ยท 3-1-3

ADaM-IG

1-3 ยท 1-2 ยท 1-1 ยท 1-0

CDASH-IG

2-1 ยท 2-0 ยท 1-1-1


Connect to an AI Assistant

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "cdisc": {
      "command": "cdisc-mcp",
      "env": {
        "CDISC_API_KEY": "your_key_here"
      }
    }
  }
}

VS Code / Cursor

Add to .vscode/mcp.json or equivalent MCP config:

{
  "servers": {
    "cdisc": {
      "command": "cdisc-mcp",
      "env": {
        "CDISC_API_KEY": "your_key_here"
      }
    }
  }
}

Claude Code (CLI)

Claude Code supports MCP servers at two scopes: user (global, all projects) and project (local, current project only).

Option A โ€” CLI command (recommended)

# Add globally (available in all projects)
claude mcp add cdisc-mcp -e CDISC_API_KEY=your_key_here -- python -m cdisc_mcp.server

# Add for the current project only
claude mcp add cdisc-mcp --scope project -e CDISC_API_KEY=your_key_here -- python -m cdisc_mcp.server

# Verify the server was registered
claude mcp list

Option B โ€” Edit ~/.claude.json directly

{
  "mcpServers": {
    "cdisc-mcp": {
      "command": "python",
      "args": ["-m", "cdisc_mcp.server"],
      "env": {
        "CDISC_API_KEY": "your_key_here"
      }
    }
  }
}

Tip: If CDISC_API_KEY is already in your system environment, omit the env block entirely โ€” Claude Code inherits it automatically.

Once registered, confirm with /mcp in any Claude Code session, then use the tools conversationally:

User: What SDTM domains are defined in version 3.4?
Claude: [calls get_sdtm_domains with version="3-4"] ...

Using in Your Own Python Tools

You can call CDISC MCP tools programmatically from any Python script using the official MCP client SDK.

Install the client

pip install mcp

Minimal example

import asyncio
import os
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

SERVER = StdioServerParameters(
    command="python",
    args=["-m", "cdisc_mcp.server"],
    env={"CDISC_API_KEY": os.environ["CDISC_API_KEY"]},
)

async def main():
    async with stdio_client(SERVER) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # List all available tools
            tools = await session.list_tools()
            print([t.name for t in tools.tools])

            # Call a tool
            result = await session.call_tool(
                "get_sdtm_domains",
                arguments={"version": "3-4"},
            )
            print(result.content[0].text)

asyncio.run(main())

Reusable helper

import asyncio, os, json
from contextlib import asynccontextmanager
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

_SERVER = StdioServerParameters(
    command="python",
    args=["-m", "cdisc_mcp.server"],
    env={"CDISC_API_KEY": os.environ["CDISC_API_KEY"]},
)

@asynccontextmanager
async def cdisc_session():
    """Async context manager that yields an initialised MCP session."""
    async with stdio_client(_SERVER) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            yield session

async def call(tool: str, **kwargs) -> dict:
    async with cdisc_session() as s:
        result = await s.call_tool(tool, arguments=kwargs)
        return json.loads(result.content[0].text)

# --- Usage examples ---
async def demo():
    # Fetch SDTM domains
    domains = await call("get_sdtm_domains", version="3-4")

    # Fetch all variables in the AE domain
    variables = await call("get_sdtm_domain_variables", version="3-4", domain="AE")

    # Look up a single variable
    aeterm = await call("get_sdtm_variable", version="3-4", domain="AE", variable="AETERM")

    print(aeterm)

asyncio.run(demo())

Available tool signatures (quick reference)

# Products / versions
await session.call_tool("list_products", {})

# SDTM
await session.call_tool("get_sdtm_domains",          {"version": "3-4"})
await session.call_tool("get_sdtm_domain_variables", {"version": "3-4", "domain": "AE"})
await session.call_tool("get_sdtm_variable",         {"version": "3-4", "domain": "AE", "variable": "AETERM"})

# ADaM
await session.call_tool("get_adam_datastructures",   {"version": "1-3"})
await session.call_tool("get_adam_variable",         {"version": "1-3", "data_structure": "ADSL", "variable": "USUBJID"})

# CDASH
await session.call_tool("get_cdash_domains",         {"version": "2-0"})
await session.call_tool("get_cdash_domain_fields",   {"version": "2-0", "domain": "AE"})

# Controlled Terminology
await session.call_tool("list_ct_packages",          {})
await session.call_tool("get_codelist",              {"package_id": "sdtmct-2024-03-29", "codelist_id": "C66781"})
await session.call_tool("get_codelist_terms",        {"package_id": "sdtmct-2024-03-29", "codelist_id": "AGEU"})

Version format: Always use dashes, not dots โ€” "3-4" not "3.4".


Architecture

MCP Client (Claude / VS Code / Cursor)
        โ”‚
        โ”‚  MCP protocol (stdio)
        โ–ผ
   server.py  โ”€โ”€โ”€โ”€ FastMCP tool registration
        โ”‚
        โ–ผ
   tools/  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ domain functions (sdtm, adam, cdash, terminology, search)
        โ”‚
        โ–ผ
   client.py  โ”€โ”€โ”€โ”€โ”€ CDISCClient (async HTTP ยท TTL cache ยท retry)
        โ”‚
        โ”‚  HTTPS
        โ–ผ
   library.cdisc.org/api  โ”€โ”€โ”€โ”€ CDISC Library REST API

Key design decisions:

  • CDISCClient is a singleton async HTTP client with 1-hour TTL in-memory cache

  • Only 429 and 5xx responses are retried; 4xx raise immediately

  • Tool functions are pure async โ€” independently testable without patching

  • format_response() strips HAL _links metadata, extracts structured data for LLM consumption


Development

Development workflow (devel-first, branch & merge SOP): See Contributing Guide.

Running Tests

# Full suite with coverage (โ‰ฅ80% required)
pytest

# Specific modules
pytest tests/test_tools.py tests/test_client.py -v

# Single test
pytest tests/test_tools.py::test_list_products -v

Code Quality

ruff check src/ tests/    # Linting
mypy src/                 # Type checking

GitHub Branch Protection (Required Checks)

Configure main branch protection to require:

  • CI Tests / tests

  • CI Lint / lint

  • CI Types / types

Project Structure

src/cdisc_mcp/
โ”œโ”€โ”€ server.py              # FastMCP server + tool registration
โ”œโ”€โ”€ client.py              # Async HTTP client (cache, retry)
โ”œโ”€โ”€ config.py              # Config dataclass + env loader
โ”œโ”€โ”€ errors.py              # AuthenticationError, ResourceNotFoundError, RateLimitError
โ”œโ”€โ”€ response_formatter.py  # HAL response normalization
โ””โ”€โ”€ tools/
    โ”œโ”€โ”€ search.py          # list_products (product catalog)
    โ”œโ”€โ”€ sdtm.py            # SDTM domain/variable tools
    โ”œโ”€โ”€ adam.py            # ADaM datastructure/variable tools
    โ”œโ”€โ”€ cdash.py           # CDASH domain/field tools
    โ”œโ”€โ”€ terminology.py     # CT package/codelist tools
    โ””โ”€โ”€ _validators.py     # Path traversal guards
web/
โ”œโ”€โ”€ app.py                 # FastAPI bridge server
โ””โ”€โ”€ index.html             # Single-file browser explorer
tests/
โ”œโ”€โ”€ test_config.py
โ”œโ”€โ”€ test_client.py
โ”œโ”€โ”€ test_response_formatter.py
โ”œโ”€โ”€ test_tools.py
โ”œโ”€โ”€ test_errors.py
โ””โ”€โ”€ test_server.py

License

MIT license.


Built for clinical data professionals working with CDISC standards.

User Manual ยท Examples ยท CDISC Library ยท API Docs

Available Tools

12 tools
get_adam_datastructuresB

List all ADaM data structures for a given version.

Args: version: ADaM version, e.g. "1.3", "2.1"

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the tool lists data structures but doesn't disclose behavioral traits like whether it's read-only, requires authentication, has rate limits, or what the output format entails. This is a significant gap for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by a concise parameter explanation. Every sentence adds value without redundancy, making it efficiently structured and appropriately sized.

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

Completeness4/5

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

Given the tool has an output schema, the description doesn't need to explain return values. It covers the purpose and parameter semantics adequately, but lacks behavioral details and usage guidelines, which are notable gaps despite the schema support.

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

Parameters4/5

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

The description adds meaningful context for the single parameter 'version' by providing examples ('e.g. "1.3", "2.1"'), which compensates for the 0% schema description coverage. This clarifies the expected format beyond the basic type in the schema.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'all ADaM data structures', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_adam_variable' or 'get_sdtm_domains', which might handle related but different resources.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It mentions a version parameter but doesn't specify prerequisites, exclusions, or compare it to sibling tools such as 'get_adam_variable' or 'search_cdisc', leaving usage context unclear.

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

get_adam_variableB

Get the definition of a specific ADaM variable.

Args: version: ADaM version, e.g. "1.3" data_structure: Data structure name, e.g. "ADSL", "ADAE" variable: Variable name, e.g. "USUBJID", "AVAL"

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes
data_structureYes
variableYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves a definition, implying a read-only operation, but does not address potential errors (e.g., invalid inputs), rate limits, authentication needs, or the format of the returned definition. This leaves significant gaps for an AI agent.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, with the purpose stated clearly in the first sentence. The parameter explanations are concise and use examples efficiently. However, the structure could be slightly improved by integrating usage context or behavioral details more seamlessly.

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

Completeness4/5

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

Given the tool's moderate complexity (3 required parameters) and the presence of an output schema, the description is reasonably complete. It explains the parameters well and relies on the output schema for return values. However, it lacks behavioral context (e.g., error handling) and usage guidelines, which are minor gaps.

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

Parameters4/5

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

The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains each parameter with examples (e.g., 'version: ADaM version, e.g. "1.3"'), clarifying their roles and expected formats. This compensates well for the schema's lack of documentation, though it could benefit from more detail on constraints or valid values.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get the definition of a specific ADaM variable.' It specifies the verb ('Get') and resource ('ADaM variable'), making the function unambiguous. However, it does not explicitly differentiate this tool from its siblings (e.g., 'get_sdtm_variable'), which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It lacks context about prerequisites, such as needing to know the ADaM version and data structure beforehand, and does not mention sibling tools like 'get_adam_datastructures' or 'get_sdtm_variable' for related tasks.

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

get_cdash_domain_fieldsB

Get all data collection fields for a CDASH domain.

Args: version: CDASH version, e.g. "2.0" domain: Domain code, e.g. "DM", "AE", "VS"

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes
domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Get[s] all data collection fields,' implying a read-only operation, but does not cover aspects like error handling, rate limits, authentication needs, or response format. For a tool with no annotations, this is a significant gap in transparency.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, with the purpose stated clearly in the first sentence. The parameter explanations are brief but informative, avoiding unnecessary details. However, the structure could be slightly improved by integrating the parameter info more seamlessly, rather than as a separate 'Args:' section.

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

Completeness4/5

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

Given the tool's low complexity (2 required parameters) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the purpose and parameter semantics adequately. However, it lacks behavioral details (e.g., error cases) and usage guidelines, which are minor gaps in an otherwise sufficient context.

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

Parameters4/5

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

The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'version' is a 'CDASH version, e.g. "2.0"' and 'domain' is a 'Domain code, e.g. "DM", "AE", "VS"', providing concrete examples and context. This compensates well for the schema's lack of descriptions, though it could be more detailed (e.g., explaining valid ranges).

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get all data collection fields for a CDASH domain.' It specifies the verb ('Get') and resource ('data collection fields for a CDASH domain'), making it easy to understand. However, it does not explicitly differentiate from siblings like 'get_cdash_domains' (which likely lists domains) or 'get_sdtm_domain_variables' (which is for SDTM, not CDASH), so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention siblings such as 'get_cdash_domains' (for listing domains) or 'get_sdtm_domain_variables' (for SDTM data), leaving the agent to infer usage based on context alone. This lack of explicit direction reduces its effectiveness in tool selection.

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

get_cdash_domainsB

List all CDASH domains for a given version.

Args: version: CDASH version, e.g. "2.0", "1.1"

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool lists domains, implying a read-only operation, but does not cover critical aspects such as authentication requirements, rate limits, error handling, or pagination. For a tool with no annotations, this leaves significant gaps in understanding its behavior and constraints.

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

Conciseness5/5

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

The description is concise and well-structured, with a clear purpose statement followed by parameter details in a separate 'Args' section. Every sentence earns its place by providing essential information without redundancy. It is appropriately sized for the tool's complexity and front-loaded with the main functionality.

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

Completeness4/5

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

Given the tool has an output schema (which handles return values), one parameter with low schema coverage, and no annotations, the description is reasonably complete. It explains the purpose and parameter semantics effectively. However, it lacks usage guidelines and behavioral details, which are minor gaps given the output schema reduces the need for return value explanation. Overall, it provides a solid foundation but could be more comprehensive.

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

Parameters4/5

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

The schema description coverage is 0%, so the description must compensate. It adds meaningful context by explaining the 'version' parameter as 'CDASH version, e.g. "2.0", "1.1"', which clarifies the expected format and provides examples. This goes beyond the bare schema, effectively documenting the single required parameter. Since there is only one parameter, the description adequately covers its semantics.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'List all CDASH domains for a given version.' It specifies the verb ('List'), resource ('CDASH domains'), and scope ('for a given version'), which is clear and specific. However, it does not explicitly differentiate from sibling tools like 'get_cdash_domain_fields' or 'get_sdtm_domains', which might have overlapping or related functions, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools such as 'get_cdash_domain_fields' (which might list fields within domains) or 'get_sdtm_domains' (for a different standard), nor does it specify prerequisites or exclusions. The only implied context is the need for a version parameter, but this is insufficient for effective tool selection.

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

get_codelistA

Get a specific Controlled Terminology codelist definition.

Args: package_id: CT package identifier, e.g. "sdtmct-2024-03-29" codelist_id: Codelist concept ID or submission value, e.g. "C66781", "AGEU"

ParametersJSON Schema
NameRequiredDescriptionDefault
package_idYes
codelist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves a definition (implying a read-only operation) but does not mention authentication needs, rate limits, error conditions, or the format of the returned definition. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by a structured 'Args:' section with clear parameter explanations and examples. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.

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

Completeness4/5

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

Given the tool has an output schema (which handles return values), 2 parameters with good semantic clarification in the description, and no complex nested structures, the description is largely complete. However, the lack of behavioral details (e.g., error handling) and explicit usage guidelines relative to siblings slightly reduces completeness for optimal agent operation.

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

Parameters4/5

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

The description adds meaningful context beyond the input schema, which has 0% description coverage. It explains that 'package_id' is a 'CT package identifier' and 'codelist_id' is a 'Codelist concept ID or submission value', providing examples like 'sdtmct-2024-03-29' and 'C66781', 'AGEU'. This clarifies the semantics and expected formats, compensating well for the schema's lack of descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'Controlled Terminology codelist definition', making the purpose specific and unambiguous. It distinguishes this tool from siblings like 'get_codelist_terms' (which retrieves terms within a codelist) and 'list_ct_packages' (which lists packages rather than retrieving a specific codelist).

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

Usage Guidelines3/5

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

The description implies usage by specifying what it retrieves (a codelist definition), but does not explicitly state when to use this tool versus alternatives like 'get_codelist_terms' or 'search_cdisc'. No guidance is provided on prerequisites or exclusions, leaving the agent to infer context from the tool name and parameter examples.

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

get_codelist_termsB

List all valid terms in a CT codelist (max 100 shown, check has_more).

Args: package_id: CT package identifier codelist_id: Codelist concept ID or submission value

ParametersJSON Schema
NameRequiredDescriptionDefault
package_idYes
codelist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it lists terms, has a max limit of 100 shown, and requires checking 'has_more' for pagination. However, it lacks details on permissions, rate limits, error handling, or what 'has_more' entails, leaving gaps in transparency for a read operation.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, with the main purpose stated first followed by parameter details. Every sentence adds value, but the structure could be slightly improved by integrating the parameter explanations more seamlessly or adding bullet points for clarity.

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

Completeness3/5

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

Given the complexity (a read operation with pagination), no annotations, and an output schema exists (which likely covers return values), the description is moderately complete. It covers the purpose, parameters, and key behavior (limit, has_more), but lacks context on errors, authentication, or how to interpret results beyond the output schema, leaving room for improvement.

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

Parameters4/5

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

The schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'package_id' is a 'CT package identifier' and 'codelist_id' is a 'Codelist concept ID or submission value', clarifying the semantics beyond the bare schema. Since there are only 2 parameters and the description covers both adequately, it scores well but not perfectly due to lack of format or example details.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'valid terms in a CT codelist', making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'get_codelist' or 'search_cdisc', which might have overlapping functionality, so it lacks sibling differentiation for a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_codelist' or 'search_cdisc'. It mentions a limit of 100 terms and checking 'has_more', which implies usage for pagination, but does not specify contexts, prerequisites, or exclusions, leaving the agent without clear direction.

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

get_sdtm_domainsA

List all SDTM domains for a given version.

Args: version: SDTM-IG version, e.g. "3.4", "3.3". Use list_products() first.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes a read operation ('List') but doesn't mention other traits like rate limits, error handling, or response format. While it hints at a dependency on 'list_products()', it lacks details on permissions or data sensitivity, leaving significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is highly concise and well-structured: the first sentence states the purpose, and the 'Args' section efficiently explains the parameter with an example and prerequisite. Every sentence adds value without redundancy, making it easy for an agent to parse quickly.

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

Completeness4/5

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

Given the tool's low complexity (1 parameter) and the presence of an output schema (which handles return values), the description is mostly complete. It covers purpose, parameter semantics, and usage guidance. However, with no annotations, it could benefit from more behavioral context (e.g., read-only nature, potential errors), slightly reducing completeness.

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

Parameters4/5

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

The schema description coverage is 0%, so the description must compensate. It adds meaningful semantics by explaining that 'version' is an 'SDTM-IG version' with examples ('3.4', '3.3'), which clarifies beyond the schema's generic string type. However, it doesn't detail all possible values or constraints, preventing a perfect score.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'List all SDTM domains for a given version.' It specifies the verb ('List'), resource ('SDTM domains'), and scope ('for a given version'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_sdtm_domain_variables' or 'get_cdash_domains', which prevents a score of 5.

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

Usage Guidelines4/5

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

The description provides clear usage guidance by stating to 'Use list_products() first' to determine valid versions, which helps the agent understand prerequisites. It implies when to use this tool (for SDTM domains) but doesn't explicitly contrast with alternatives like 'get_cdash_domains' or specify when not to use it, so it falls short of a 5.

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

get_sdtm_domain_variablesB

Get all variables defined in an SDTM domain.

Args: version: SDTM-IG version, e.g. "3.4" domain: Two-letter domain code, e.g. "DM", "AE", "LB"

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes
domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves data ('Get all variables'), implying a read-only operation, but does not mention potential side effects, authentication needs, rate limits, or error handling. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is highly concise and well-structured, with a clear main sentence followed by bullet-pointed parameter explanations. Every sentence adds value without redundancy, making it easy to scan and understand quickly.

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

Completeness4/5

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

Given the tool's low complexity (2 required parameters) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the purpose and parameter basics, but could improve by addressing behavioral aspects and sibling differentiation, which holds it back from a perfect score.

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

Parameters3/5

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

The description adds basic semantics for both parameters by providing examples (e.g., 'SDTM-IG version, e.g. "3.4"' and 'Two-letter domain code, e.g. "DM", "AE", "LB"'), which clarifies their expected formats. However, with 0% schema description coverage, it does not fully compensate by explaining constraints like valid version ranges or domain codes, keeping it at the baseline for partial enhancement.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('all variables defined in an SDTM domain'), making it easy to understand what the tool does. However, it does not explicitly differentiate from sibling tools like 'get_sdtm_variable' or 'get_sdtm_domains', which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as how it differs from 'get_sdtm_variable' (which might fetch a single variable) or 'get_sdtm_domains' (which lists domains). Without any context on prerequisites, exclusions, or comparisons to siblings, usage is implied but not clarified.

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

get_sdtm_variableB

Get the full definition of a specific SDTM variable.

Args: version: SDTM-IG version, e.g. "3.4" domain: Domain code, e.g. "AE" variable: Variable name, e.g. "AETERM", "AEDECOD"

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes
domainYes
variableYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Get' implies a read-only operation, it doesn't specify whether this requires authentication, has rate limits, returns structured data, or handles errors. For a tool with no annotation coverage, this leaves significant behavioral aspects unclear.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement followed by a well-formatted parameter explanation. Every sentence earns its place by adding value, and it's front-loaded with the core functionality. No wasted words or redundancy.

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

Completeness4/5

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

Given the tool's moderate complexity (3 required parameters), 0% schema description coverage, and the presence of an output schema (which handles return values), the description does a good job of explaining the tool's purpose and parameters. However, it lacks behavioral context (e.g., error handling) and usage guidelines relative to siblings, leaving some gaps.

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

Parameters4/5

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

The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains what each parameter represents (e.g., 'SDTM-IG version', 'Domain code', 'Variable name') and provides concrete examples (e.g., '3.4', 'AE', 'AETERM'), effectively compensating for the schema's lack of documentation.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('full definition of a specific SDTM variable'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_sdtm_domain_variables' or 'get_adam_variable', which might provide related but different information.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_sdtm_domain_variables' (which might list variables for a domain) or 'get_adam_variable' (which handles a different standard). It only describes what the tool does, not when it's the appropriate choice among similar siblings.

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

list_ct_packagesA

List all available CDISC Controlled Terminology packages with release dates.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It implies a read-only operation ('List') but doesn't specify details like pagination, rate limits, authentication needs, or error handling. The mention of 'release dates' adds some context about output content, but overall behavioral traits are minimally covered.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's function and key output detail ('release dates'). It's front-loaded with the core purpose and contains no wasted words, making it optimally concise for a zero-parameter tool.

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

Completeness4/5

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

Given the tool's simplicity (zero parameters, output schema exists), the description is reasonably complete. It covers the purpose and hints at output content, though it could benefit from more behavioral context (e.g., data format or limitations). The existence of an output schema reduces the need for detailed return value explanation.

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

Parameters4/5

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

The tool has zero parameters, and schema description coverage is 100%, so there's no need for parameter explanation in the description. The description appropriately focuses on the tool's purpose without redundant parameter details, earning a high baseline score for this dimension.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('CDISC Controlled Terminology packages'), making the purpose specific and understandable. It adds useful detail about what's included ('release dates'), but doesn't explicitly differentiate from sibling tools like 'list_products' or 'search_cdisc', which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'search_cdisc' or 'list_products'. It doesn't mention prerequisites, exclusions, or specific contexts for usage, leaving the agent with minimal direction beyond the basic purpose.

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

list_productsA

List all available CDISC standards and their published versions. Use this first to discover available versions before querying specific content.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only operation by using 'List' and 'discover', which is consistent with typical listing behavior, but does not disclose details like pagination, rate limits, or authentication needs. The description adds some context about its role in a workflow but lacks comprehensive behavioral traits.

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

Conciseness5/5

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

The description is two sentences with zero waste: the first states the purpose, and the second provides usage guidance. It is front-loaded with the core function and efficiently adds context without unnecessary details, making it highly concise and well-structured.

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

Completeness4/5

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

Given the tool's simplicity (0 parameters, output schema exists), the description is complete enough for its purpose. It explains what the tool does and when to use it, which is sufficient for a listing tool. However, without annotations, it could benefit from more behavioral details, but the output schema likely covers return values, reducing the need for further explanation.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing instead on the tool's purpose and usage, which aligns with the baseline for zero parameters.

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

Purpose5/5

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

The description clearly states the verb ('List') and resource ('CDISC standards and their published versions'), making the purpose specific and unambiguous. It distinguishes from siblings like 'list_ct_packages' or 'search_cdisc' by focusing on standards overview rather than specific content or search.

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

Usage Guidelines5/5

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

The description explicitly provides when to use this tool ('Use this first to discover available versions before querying specific content'), offering clear guidance on its role as a discovery step. This helps differentiate it from sibling tools that retrieve detailed content, such as 'get_sdtm_domains' or 'get_codelist'.

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

search_cdiscB

Search across all CDISC standards by keyword.

Args: query: Search keyword, e.g. "adverse event", "AEDECOD", "demographics"

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool searches by keyword but doesn't describe how results are returned (e.g., format, pagination), what happens on no matches, or any limitations (e.g., rate limits, authentication needs). For a search tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a concise 'Args' section with a clear example. Every sentence earns its place by providing essential information without redundancy or fluff, making it easy to scan and understand.

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

Completeness3/5

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

Given the tool's low complexity (one parameter) and the presence of an output schema (which handles return values), the description is moderately complete. It covers the basic purpose and parameter semantics but lacks behavioral details and usage guidelines. For a simple search tool, this is adequate but leaves room for improvement in guiding the agent effectively.

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

Parameters4/5

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

The description adds meaningful context beyond the input schema, which has 0% description coverage. It explains the 'query' parameter as a 'Search keyword' and provides examples ('adverse event', 'AEDECOD', 'demographics'), clarifying its purpose and usage. With only one parameter and no schema descriptions, this compensates well, though it doesn't detail constraints like length or special characters.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Search across all CDISC standards by keyword.' This specifies the verb (search), resource (CDISC standards), and scope (all standards). It distinguishes from siblings like get_codelist or get_sdtm_domains by emphasizing cross-standard search rather than retrieving specific structured data. However, it doesn't explicitly contrast with potential similar search tools (none listed), keeping it from a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over sibling tools like get_codelist (for code lists) or get_sdtm_domains (for specific domain data), nor does it specify prerequisites or exclusions. Usage is implied by the search functionality, but explicit context is lacking.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedget_adam_datastructures
    • First observedget_adam_variable
    • First observedget_cdash_domain_fields
    • First observedget_cdash_domains
    • First observedget_codelist
    • First observedget_codelist_terms
    • First observedget_sdtm_domain_variables
    • First observedget_sdtm_domains
    • First observedget_sdtm_variable
    • First observedlist_ct_packages
    • First observedlist_products
    • First observedsearch_cdisc

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific CDISC standards (ADaM, CDASH, SDTM, Controlled Terminology) with no overlap. The tools are organized by standard type and operation level (list domains vs. get specific variables), making them easily distinguishable.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with clear prefixes indicating the standard (get_adam_, get_cdash_, get_sdtm_, get_codelist_, list_, search_). The naming is highly predictable and follows the same snake_case convention throughout.

Tool Count5/5

12 tools is well-scoped for a CDISC standards lookup server, covering multiple standards (ADaM, CDASH, SDTM, CT) with appropriate granularity. Each tool serves a specific purpose without redundancy, and the count supports comprehensive querying without being overwhelming.

Completeness4/5

The toolset provides excellent coverage for querying CDISC standards metadata, with list operations for discovery and get operations for detailed information. Minor gaps exist (e.g., no update/create/delete tools, but that's appropriate for a read-only reference server), and the search tool helps bridge any remaining gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides AI agents with instant access to 10M+ OMOP medical vocabulary concepts for searching, mapping, and navigating clinical codes across SNOMED, ICD-10, RxNorm, LOINC, and more.
    11
    116
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to look up, search, validate, navigate hierarchies, and expand value sets for SNOMED CT clinical terminology through the Model Context Protocol.
    8
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Teninq/cdisc-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server