MCP Server for OSCAL
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., "@MCP Server for OSCALShow me the required fields for an OSCAL Component Definition."
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.
MCP Server for OSCAL
A Model Context Protocol (MCP) server that provides AI assistants (Claude, Cline, Kiro, Claude Code, etc.) with tools to work with NIST's Open Security Controls Assessment Language (OSCAL). Like many early adopters, we needed help implementing OSCAL proofs-of-concept to demonstrate value to business stakeholders. Perhaps due to limited availability of examples in the public domain, we found that most AI agents/LLMs alone produced inconsistent results related to OSCAL. The tools in this MCP server minimized that problem for our use-case and we hope it does the same for you.
To get started, seeInstallation below.
Features
Together, the tools provided by this MCP server are meant to enable your preferred AI assistant to provide accurate, authoritative guidance about OSCAL architecture, models, use-cases, requirements, and implementation. You don't need to understand the tools to use them, but details are in the tools directory.
The server is lightweight and meant to run locally without additional setup. By default, it uses stdio protocol for MCP transport. Do not attempt to use the server with streamable-http transport, as we've not yet implemented transport security or authentication.
The default tools should not connect to any remote services or resources - all required content is bundled with the server. As a security measure, we've implemented basic file integrity verification for bundled content. At build-time we generate manifests including SHA-256 hashes of all content files. Each time the server starts, all content files are verified against the hash manifests. Any mismatch should produce an error and prevent startup.
In addition to the MCP server, the package includes a standalone OSCAL agent built with Strands Agents. See the OSCAL Agent section below.
Related MCP server: nist-mcp
What is OSCAL?
OSCAL (Open Security Controls Assessment Language) is a set of framework-agnostic, vendor-neutral, machine-readable schemas developed by NIST that describe the full life cycle of GRC (governance, risk, compliance) artifacts, from controls to remediation plans. OSCAL enables automation of GRC workflows by replacing digital paper (spreadsheets, PDFs, etc.) with a standard-based structured data format. To learn more about OSCAL, install this MCP server then ask your AI. Or see the official OSCAL website.
What is MCP?
MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect electronic devices, MCP provides a standardized way to connect AI applications to external systems.
How to use / examples
Examples below were created with kiro-cli, but should work with any AI assistant that supports MCP servers.
Example 1: Learn about available OSCAL models
% kiro-cli
> /tools trust get_oscal_schema list_oscal_models list_oscal_resources
Tools '@oscal/get_oscal_schema', '@oscal/list_oscal_models', '@oscal/list_oscal_resources' are now trusted. I will not ask for confirmation before running these tools.
> How many GA OSCAL models are there?
> I'll check the available OSCAL models to find out how many are in GA (Generally Available) status.
Running tool list_oscal_models with the param (from mcp server: oscal)
⋮ {}
- Completed in 0.1s
> There are 8 GA OSCAL models:
Control Layer (3):
- Catalog
- Profile
- Mapping Collection
Implementation Layer (2):
- Component Definition
- System Security Plan (SSP)
Assessment Layer (3):
- Assessment Plan (SAP)
- Assessment Results (SAR)
- Plan of Action and Milestones (POA&M)
All of these models have "GA" (Generally Available) status, meaning they are stable and ready for production use.
▸ Time: 8sExample 2: OSCAL template generation
> generate a minimum, valid, OSCAL mapping in JSON for use as a template.
> I'll help you create a minimal, valid OSCAL mapping in JSON. Let me first check what OSCAL models are available to understand the structure.
Running tool list_oscal_models with the param (from mcp server: oscal)
⋮ {}
- Completed in 0.1s
> Now let me get the schema for the mapping-collection model to understand its structure:
Running tool get_oscal_schema with the param (from mcp server: oscal)
⋮ {
⋮ "model_name": "mapping-collection",
⋮ "schema_type": "json"
⋮ }
- Completed in 0.14s
> Based on the schema, I'll create a minimal, valid OSCAL mapping collection template. Here's the absolute minimum required structure:
I'll create the following file: ./oscal-mapping-template.json (using tool: write)
Purpose: Create minimal OSCAL mapping collection template
+ 1: {
+ 2: "mapping-collection": {
+ 3: "uuid": "12345678-1234-4567-8901-123456789012",
+ 4: "metadata": {
+ 5: "title": "Sample Mapping Collection",
+ 6: "last-modified": "2026-01-06T20:46:28.034Z",
+ 7: "version": "1.0",
+ 8: "oscal-version": "1.2.0"
+ 9: },
+ 10: "provenance": {
+ 11: "method": "human",
+ 12: "matching-rationale": "semantic",
+ 13: "status": "draft",
+ 14: "mapping-description": "Sample mapping between two control frameworks"
+ 15: },
+ 16: "mappings": [
+ 17: {
+ 18: "uuid": "87654321-4321-7654-1098-210987654321",
+ 19: "source-resource": {
+ 20: "type": "catalog",
+ 21: "href": "https://example.com/source-catalog.json"
+ 22: },
+ 23: "target-resource": {
+ 24: "type": "catalog",
+ 25: "href": "https://example.com/target-catalog.json"
+ 26: },
+ 27: "maps": [
+ 28: {
+ 29: "uuid": "11111111-2222-3333-4444-555555555555",
+ 30: "relationship": "equivalent",
+ 31: "sources": [
+ 32: {
+ 33: "type": "control",
+ 34: "id-ref": "ac-1"
+ 35: }
+ 36: ],
+ 37: "targets": [
+ 38: {
+ 39: "type": "control",
+ 40: "id-ref": "access-control-policy"
+ 41: }
+ 42: ]
+ 43: }
+ 44: ]
+ 45: }
+ 46: ]
+ 47: }
+ 48: }
Creating: ./oscal-mapping-template.json
- Completed in 0.8s
> I've created a minimal, valid OSCAL mapping collection template at ./oscal-mapping-template.json. This template includes:
Required elements:
- uuid: Unique identifier for the mapping collection
- metadata: Document metadata with title, last-modified timestamp, version, and OSCAL version
- provenance: Mapping methodology information including method, matching rationale, status, and description
- mappings: Array containing at least one mapping with:
- uuid: Mapping identifier
- source-resource and target-resource: References to the catalogs being mapped
- maps: Array with mapping entries showing relationships between controls
Key features:
- Uses placeholder UUIDs (replace with actual UUIDs in production)
- Maps a source control "ac-1" to target control "access-control-policy" with "equivalent" relationship
- Includes minimal required fields only
- Valid JSON structure conforming to OSCAL 1.2.0 schema
You can customize this template by:
- Replacing placeholder UUIDs with real ones
- Updating the resource URLs to point to actual catalogs
- Adding more mapping entries in the maps array
- Modifying control IDs and relationships as needed
▸ Time: 21s
Example 3: Discover open source OSCAL catalogs
> What are some open source OSCAL catalogs?
Running tool list_oscal_resources with the param (from mcp server: oscal)
⋮ {}
- Completed in 0.51s
> Based on the OSCAL community resources, here are some notable open source OSCAL catalogs:
## Government/Official Catalogs
Australian Cyber Security Centre (ACSC)
- Information Security Manual (ISM) controls in OSCAL format
- Essential Eight Maturity Levels (ML1, ML2, ML3)
- Available at: https://www.cyber.gov.au/ism/oscal
CMS Acceptable Risk Safeguards (ARS)
- Tailored NIST SP 800-53 controls for Centers for Medicare and Medicaid Services
- Available at: https://github.com/CMSgov/ars-machine-readable
GovTech Singapore
- ICT&SS Policy catalog and profile for low-risk systems
- Available at: https://github.com/GovtechSG/tech-standards
## Industry/Standards Organizations
Center for Internet Security (CIS)
- CIS Critical Security Controls (formerly Top 18/20)
- Available at: https://github.com/CISecurity/CISControls_OSCAL/
Cloud Security Alliance (CSA)
- Cloud Controls Matrix v4 in OSCAL format
- Available at: https://cloudsecurityalliance.org/artifacts/ccm-machine-readable-bundle-json-yaml-oscal/
NIST SP 800-171 (Community)
- Maintained by Fathom5
- Available at: https://github.com/FATHOM5/oscal/tree/main/content/SP800-171/oscal-content
## Community Collections
CivicActions Component Definitions
- Cloud services, software, security and privacy controls
- Available at: https://github.com/CivicActions/oscal-component-definitions
RedHat OSCAL Content
- Component definitions: https://github.com/RedHatProductSecurity/oscal-component-definitions
- Custom profiles: https://github.com/RedHatProductSecurity/oscal-profiles
Brad Hards ISM Catalog
- Australian Government ISM controls (community version)
- Available at: https://github.com/bradh/ism-oscal
These catalogs provide ready-to-use OSCAL content for various compliance frameworks and can serve as templates or starting points for your own OSCAL implementations.
▸ Time: 15sExample 4: Query component definitions for information about AWS services
[OSCAL] > what components are available for Cognito?
Running tool list_components with the param (from mcp server: oscal-dev)
⋮ {}
- Completed in 0.49s
> There are 3 Cognito-related components available:
1. Cognito Identity - from "Cognito Identity Pools" component definition
2. Cognito Sync - from "Amazon Cognito Sync" component definition
3. Cognito Identity Provider - from "Amazon Cognito Identity User Pools" component definition
▸ Time: 7s
[OSCAL] > show me the names and IDs from all 3 components
Running tool query_component_definition with the param (from mcp server: oscal-dev)
⋮ {
⋮ "query_type": "by_uuid",
⋮ "query_value": "7fd5d354-6ec4-4f8e-8c5f-2904086bb597"
⋮ }
Running tool query_component_definition with the param (from mcp server: oscal-dev)
⋮ {
⋮ "query_type": "by_uuid",
⋮ "query_value": "a1d82e1d-3733-41f4-bc09-90ab47b9e82f"
⋮ }
Running tool query_component_definition with the param (from mcp server: oscal-dev)
⋮ {
⋮ "query_type": "by_uuid",
⋮ "query_value": "2519deaf-4612-4c70-aba2-d9080ae3c816"
⋮ }
- Completed in 0.13s
- Completed in 0.6s
- Completed in 0.6s
> 1. Cognito Sync
- Service ID: Cognito Sync
- API Endpoint Prefix: cognito-sync
- ARN Namespace: cognito-sync
2. Cognito Identity Provider
- Service ID: Cognito Identity Provider
- API Endpoint Prefix: cognito-idp
- ARN Namespace: cognito-idp
3. Cognito Identity
- Service ID: Cognito Identity
- API Endpoint Prefix: cognito-identity
- ARN Namespace: cognito-identity
▸ Time: 12s
[OSCAL] > show me everything in the EC2 component definition
Running tool query_component_definition with the param (from mcp server: oscal-dev)
⋮ {
⋮ "component_definition_filter": "Elastic Compute Cloud (EC2)",
⋮ "query_type": "all"
⋮ }
- Completed in 0.14s
> The EC2 component definition contains 1 component:
Component: EC2
- UUID: 66345eb9-7c0d-435c-b2b5-675fd977de80
- Type: service
- Description: Empty
Properties:
- Service ID: EC2
- Version: 2016-11-15
- Availability: REGIONAL and ZONAL
- Full Name: Elastic Compute Cloud (EC2)
- API Endpoint Prefix: ec2
- ARN Namespace: ec2
Regional Availability (34 regions):
Africa (Cape Town), Asia Pacific (Hong Kong, Tokyo, Seoul, Osaka, Mumbai, Hyderabad, Singapore, Sydney, Jakarta, Melbourne, Malaysia), Canada (Central, Calgary), China (Beijing, Ningxia),
Europe (Frankfurt, Zurich, Stockholm, Milan, Spain, Ireland, London, Paris), Israel (Tel Aviv), Middle East (UAE, Bahrain), South America (Sao Paulo), US East (N. Virginia, Ohio), AWS
GovCloud (US-East, US-West), US West (N. California, Oregon)
▸ Time: 10s
[OSCAL] > what's the ID of the Jakarta region?
> Based on the EC2 component data I just retrieved, the Jakarta region's resource fragment ID is:
8041109b-0a0b-46cc-bddb-91d703667637
This is the UUID for the "Asia Pacific (Jakarta)" region component.
▸ Time: 3s
[OSCAL] > get the region ID from that component
Running tool query_component_definition with the param (from mcp server: oscal-dev)
⋮ {
⋮ "query_type": "by_uuid",
⋮ "query_value": "8041109b-0a0b-46cc-bddb-91d703667637"
⋮ }
- Completed in 0.13s
> The region ID for Jakarta is: ap-southeast-3
▸ Time: 7s
[OSCAL] > /quitInstallation
Follow these instructions to setup the MCP server for use with your preferred IDE, AI agent, chatbot, etc. The server is published as Python package on PyPI. The uvx command (shown below) automatically downloads the latest version of the server from PyPI on startup.
To setup for development instead, seeDEVELOPING.md
Prerequisites
uvpackage manager for Python (Installation instructions)Python 3.11 or higher (
uv install python 3.12). The server may work with later versions of Python, but we only test 3.11 & 3.12 for now.
Configuring IDEs and AI Tools
This server communicates via stdio (standard input/output) and can be integrated with various IDEs and agentic tools that support the Model Context Protocol. The configuration examples shown below are for your preferred IDE / chatbot / agent.
Configuration Format
Most MCP-compatible tools use a JSON configuration format described in the FastMCP documentation. Here's the basic structure:
{
"mcpServers": {
"oscal": {
"command": "uvx",
"args": ["mcp-server-for-oscal@latest"]
}
}
} For typical, runtime use of the MCP server, additional configuration should not be required. If needed, runtime environment variables can be configured in an "env": {} object as described in the FastMCP documentation. See the file dotenv.example for available options.
[!Note] A dotenv file is only needed in a development environment.
Kiro Configuration
See Kiro's MCP documentation for additional options. Add to your .kiro/settings/mcp.json:
{
"mcpServers": {
"oscal": {
"command": "uvx",
"args": ["mcp-server-for-oscal@latest"],
"env": {},
"disabled": false,
"autoApprove": [
"*"
]
}
}
}Claude Desktop
Add to your ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"oscal": {
"command": "uvx",
"args": ["mcp-server-for-oscal@latest"]
}
}
}VS Code
Run the MCP: Open User Configuration command, which opens the mcp.json file in your user profile. You can then manually add the server configuration to the file. See the VSCode/Copilot docs for additional options and details.
{
"servers": {
"oscal": {
"command": "uvx",
"args": ["mcp-server-for-oscal@latest"]
}
}
}Using your own OSCAL Content
By default, the server ships with bundled OSCAL content (AWS component definitions, OSCAL documentation, and schemas). You can also point the server at a directory of your own OSCAL JSON files — catalogs, SSPs, profiles, assessment plans, assessment results, POA&Ms, or mapping collections. The server indexes them at startup and makes them available through all query and list tools.
Set the OSCAL_DOCUMENTS_DIR environment variable to the path of your OSCAL content directory. The path can be absolute or relative to the server's package directory. For example, in your MCP configuration:
{
"mcpServers": {
"oscal": {
"command": "uvx",
"args": ["mcp-server-for-oscal@latest"],
"env": {
"OSCAL_DOCUMENTS_DIR": "/path/to/your/oscal/files"
}
}
}
}The server scans the directory recursively for .json files and indexes any valid OSCAL documents it finds. Your content is merged with the bundled content — both are queryable in the same session.
Two additional environment variables control the OSCAL store behavior:
Variable | Default | Description |
| (empty) | Directory containing your OSCAL JSON files. Not scanned when empty. |
| (empty) | Path to a persistent SQLite database. When set, the index is reused across server restarts instead of being rebuilt each time. |
|
| Maximum number of parsed OSCAL documents to keep in the in-memory LRU cache. |
SettingOSCAL_STORE_DB_PATH is recommended if you have a large collection of OSCAL documents. The server only needs to index new or changed files on subsequent startups.
OSCAL Agent
In addition to the MCP server, the package includes a standalone OSCAL agent built with Strands Agents. The agent uses the same tools as the MCP server and can be run directly:
# Via entry point
oscal-agent
# Or via module
python -m mcp_server_for_oscal.oscal_agentThe agent requires AWS Bedrock access and uses the same configuration environment variables as the MCP server.
Session Persistence
The agent supports session persistence so that conversation history and agent state survive across invocations. Choose between local filesystem or Amazon S3 storage:
# File-based session storage (new session)
oscal-agent --session-storage file
# Resume a previous session
oscal-agent --session-storage file --session-id <your-session-id>
# S3-based session storage
oscal-agent --session-storage s3 --session-s3-bucket my-bucketWhen session storage is enabled without a --session-id, a UUID is auto-generated and displayed so you can resume later. Session defaults can also be set via environment variables (see DEVELOPING.md).
Conversation Management
For long-running workflows, you can select a conversation manager to control how the agent's context window is maintained:
# Summarize older messages to keep context manageable
oscal-agent --session-storage file --conversation-manager summarizing
# Sliding window (SDK default behavior)
oscal-agent --conversation-manager sliding-window
# No conversation management
oscal-agent --conversation-manager nullExisting tools and features cover a variety of use-cases but are far from comprehensive. Please share your feedback, feature requests, questions, or bug reports in a GitHub issue. Direct contributions are wanted and welcome.
Development
See DEVELOPING to get started.
Security
See CONTRIBUTING for more information.
Known limitations
It's not yet possible to use this MCP server with ChatGPT due to limited MCP support by ChatGPT.
The
streamable-httptransport does not yet implement authentication or transport security. Usestdiofor production workloads.
Related projects
Experimental Component Definitions for AWS services are bundled with this MCP server. You can find that content in the AWS Labs project OSCAL Content for AWS Services.
MCP Server for OSCAL uses compliance-trestle for certain capabilities, including OSCAL content validation.
License
This project is licensed under the Apache-2.0 License.
Available Tools
40 toolsaboutA
Get metadata about the server itself
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states the tool retrieves server metadata without mentioning side effects or specifics. Without annotations, the description carries full burden; it adds basic purpose but lacks details on what 'metadata' includes.
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?
Single short sentence, no wasted words. Information is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and simple purpose, the description is nearly complete. However, it does not specify what metadata fields are returned, which could be improved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema description coverage is 100%. Baseline score of 3 applies as the description adds no parameter-specific meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get metadata about the server itself' uses a specific verb ('Get') and resource ('metadata about the server'), clearly distinguishing it from sibling tools that focus on OSCAL objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives, but as the only tool for server metadata, usage is implied. No exclusions or alternative suggestions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capabilityA
Retrieve a single Capability by UUID, returning its full OSCAL representation.
A Capability groups related Components and may include control implementations, description, and a list of incorporated Components. Use list_capabilities() to discover available UUIDs.
Args: ctx: MCP server context (injected automatically by MCP server) uuid: UUID of the Capability to retrieve.
Returns: dict | None: Full OSCAL Capability object as a dict, or None if the UUID is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies a read operation (retrieve) and documents return values including None for not found. Lacks explicit statement of no side effects or permissions needed.
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?
Concise yet complete description with clear sections for purpose, usage, args, and returns. No superfluous text.
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?
Has output schema, so return structure detail is unnecessary. Description covers the tool's purpose and parameter adequately for typical use. Could mention that the operation is non-destructive, but not critical.
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 explains the uuid parameter as 'UUID of the Capability to retrieve', adding meaning beyond the schema's type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Retrieve a single Capability by UUID' and explains what a Capability is. Distinguishes from sibling list_capabilities by noting it returns full OSCAL representation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs user to list_capabilities() for discovering UUIDs. Does not enumerate when not to use, but context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_child_elementA
Retrieve a single child element by its identifier.
OSCAL uses two identifier schemes:
UUIDs (globally unique) for most elements such as tasks, activities, results, findings, POA&M items, mappings, and system-components.
Token IDs (e.g.
ac-1,sc) for catalog controls and groups — these are human-readable but only unique within their containing document.
For elements with token-based IDs, parent_doc_uuid should be
provided to disambiguate. For elements with UUIDs,
parent_doc_uuid is optional.
If parent_doc_uuid is omitted and the element_id matches
elements in more than one document, an error dict is returned with
error: "ambiguous_element_id" and a list of matching parent
document UUIDs so the caller can retry with disambiguation.
Args: ctx: MCP server context (injected automatically). element_id: The element identifier (UUID or token ID). parent_doc_uuid: Optional parent document UUID to scope the lookup using the composite key (element_id, parent_doc_uuid).
Returns: A dict with keys: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid, raw_json — or None if not found. Returns an error dict if the element_id is ambiguous across documents.
| Name | Required | Description | Default |
|---|---|---|---|
| element_id | No | ||
| parent_doc_uuid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully discloses behavior: it returns a dict or None, details the error response for ambiguous IDs, and explains the composite key lookup. The read-only nature is implied by 'retrieve'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: starts with core purpose, explains identifier schemes, then parameter usage, error case, and ends with formal Args/Returns. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description still covers return format and error handling. It thoroughly explains parameter behavior and identifier types, making it fully self-contained 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 coverage is 0%, but the description provides detailed semantics for both parameters: element_id (UUID or token ID) and parent_doc_uuid (optional, for disambiguation with examples). This adds significant meaning beyond type/default alone.
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 'Retrieve a single child element by its identifier,' specifying the verb and resource. It distinguishes from sibling list/query tools by focusing on a single element and includes details about identifier 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 explicitly explains when to use the optional parent_doc_uuid (for token-based IDs to disambiguate) and notes the error case for ambiguous IDs. It implicitly differentiates from list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oscal_schemaA
A tool that returns the schema for specified OSCAL model. Try this tool first for any questions about the structure of OSCAL models.
By default we return a JSON schema, but schema_type parameter can change that behavior. You can use the list_models tool to get
a list of valid model names. Request the complete schema only as a last resort - it's very large and may overflow your context window.
Args:
ctx: MCP server context (should be injected automatically by MCP server)
model_name: The name of the OSCAL model. If no value is provided, then we return a "complete" schema including all models, which is large.
schema_type: If json (default) then return the JSON schema for the specified model. Otherwise, return its XSD (XML) schema.
Returns: str: The requested schema as JSON string
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | No | complete | |
| schema_type | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains default behavior (returns JSON schema, default model_name='complete' returns all-models schema) and warns about large context consumption. However, it does not mention error handling for invalid model names or prerequisites, though these are minor omissions.
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 concisely structured: first sentence states purpose, then usage guidance, then warning, then parameter details. Every sentence adds value; no fluff. It's appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (schema retrieval with two parameters and large outputs), the description covers all essential aspects: purpose, parameters, defaults, a critical warning, and cross-reference to list_models. The output schema is provided separately, so return format needs no further detail. Complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds critical meaning. It explains that model_name defaults to 'complete' (returning all models, large), and schema_type controls format (json vs XSD). It also suggests using list_models for valid model names, which is not in the schema. This far exceeds the schema's minimal info.
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 returns the schema for a specified OSCAL model, with a verb 'returns' and resource 'schema for specified OSCAL model'. It distinguishes itself by suggesting using list_models for valid model names, and no sibling tool performs the same function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Try this tool first for any questions about the structure of OSCAL models.' It warns against requesting the 'complete' schema unless necessary due to size, and directs users to list_models for valid names. This gives clear when-to-use and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assessment_plan_activitiesA
List activity elements within OSCAL Assessment Plan documents.
Activities describe the methods and procedures used to assess controls. Each activity is identified by a UUID.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single assessment plan. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It discloses that the operation is a list with pagination, but does not add significant non-obvious behavior beyond what the schema implies.
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 concise with a brief introduction followed by structured parameter and return details. It is front-loaded but could be slightly more compact without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters with no output schema, the description covers all necessary elements: purpose, parameters, and return structure (Page_Response dict). It is fully sufficient for an agent to understand and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions (0% coverage), but the description compensates by explaining each parameter: parent_doc_uuid for scoping, offset for pagination start, and limit for results cap. This adds 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 clearly states that the tool lists activity elements within OSCAL Assessment Plan documents, with a specific definition of activities. It distinguishes from sibling tools by its focus on assessment plan activities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context but does not explicitly indicate when to use this tool versus alternatives like list_assessment_plans or list_assessment_plan_tasks. Usage is 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.
list_assessment_plansA
List loaded OSCAL Assessment Plans with summary metadata.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility. It only mentions listing with pagination, but does not disclose any behavioral traits such as authorization needs, side effects, or the nature of 'summary metadata.' This is insufficient for a list tool without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, followed by Args and Returns sections. Every sentence adds value with no 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 list tool with pagination, the description covers purpose, parameter semantics, and return format (Page_Response dict with keys). It lacks details on error handling or authentication, but these are not critical for a read-only listing. The absence of an output schema is mitigated by describing the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides defaults and types, with 0% schema description coverage. However, the description compensates by clearly explaining offset ('Zero-based pagination offset') and limit ('Maximum items to return, 1-100'), adding 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 explicitly states 'List loaded OSCAL Assessment Plans with summary metadata,' clearly identifying the resource and action. This distinguishes it from sibling tools like list_assessment_plan_activities and list_assessment_plan_tasks which focus on sub-elements.
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 pagination details but offers no guidance on when to use this tool versus alternatives like query_assessment_plan or other list_ tools. No explicit context for selection is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assessment_plan_tasksA
List task elements within OSCAL Assessment Plan documents.
Tasks define the specific assessment activities to be performed. Each task is identified by a UUID.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single assessment plan. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains pagination (offset, limit, hasMore) and return items structure (id, title, etc.), which is sufficient for a read-only list operation. No contradictory or missing behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured: first sentence states purpose, followed by clarification, then explicit Args and Returns sections. No redundant 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?
Given no output schema, description adequately covers return format and item structure. Missing mention of prerequisites (e.g., parent document must exist) or error scenarios, but sufficient for a typical list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description fully compensates by explaining each parameter: parent_doc_uuid as optional scope, offset as zero-based pagination, limit with range 1-100 and default 10. Adds meaning beyond schema 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?
Description clearly states it lists task elements within OSCAL Assessment Plan documents, with a specific verb ('List') and resource ('task elements'). It differentiates from siblings like list_assessment_plans and list_assessment_plan_activities by specifying 'task elements' rather than activities or plans, but does not explicitly contrast with 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?
Description mentions optional parameter parent_doc_uuid to scope results, implying usage context. However, no explicit guidance on when to use this tool vs alternatives like list_assessment_plan_activities or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assessment_resultsB
List loaded OSCAL Assessment Results with summary metadata.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions return structure but does not disclose read-only nature, authentication needs, or any side effects. Lacks behavioral 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?
Description is well-structured with Args and Returns sections. Every sentence is informative, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters, the description covers parameter details and return format. Missing usage guidelines but otherwise 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?
Description adds some meaning beyond the schema, e.g., 'Maximum items to return, 1-100' for limit, but mostly repeats default values. Schema coverage is 0%, so description compensates slightly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists OSCAL Assessment Results with summary metadata. Verb and resource are specific, but does not differentiate from sibling tools like list_assessment_plans or list_assessment_results_findings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No context provided for prerequisites or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assessment_results_findingsA
List finding elements within OSCAL Assessment Results documents.
Findings document specific determinations about control implementation status. Each finding is identified by a UUID.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single assessment results document. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully covers behavior. It states the tool lists findings, describes pagination, and details the return format. No side effects are mentioned, which is acceptable for a read-like operation, though it could explicitly note it's read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear purpose statement, a brief explanation of findings, a bulleted Args section, and a Returns section. Every sentence is informative and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and no output schema, the description addresses both inputs and outputs comprehensively. It explains pagination and the structure of returned items, making it fully self-contained for an AI 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?
The input schema has no descriptions (0% coverage), but the description provides clear parameter explanations: parent_doc_uuid (optional UUID for scoping), offset (default 0), and limit (default 10, range 1-100). This adds significant value over 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 first sentence clearly states the tool lists finding elements within OSCAL Assessment Results documents. It explains what findings are (determinations about control implementation status), and the tool name is distinct from siblings like list_assessment_plans or list_catalogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the context (within assessment results documents) and parameters like parent_doc_uuid for scoping. However, it does not provide explicit guidance on when to use this tool over alternatives, such as when to use list_assessment_results instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assessment_results_resultsA
List result elements within OSCAL Assessment Results documents.
Results capture the outcome of an assessment, including observations and risk determinations. Each result is identified by a UUID.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single assessment results document. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It does not state whether the operation is read-only, any authentication requirements, or side effects. It implies a safe list operation but lacks explicit disclosure of such 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 concise and well-structured: a brief purpose statement, parameter descriptions, and return format in a few sentences. Every sentence adds value without 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?
The description covers the return structure (Page_Response with keys) despite no output schema, and explains all three optional parameters. It could mention sorting or filtering, but overall it is reasonably complete for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds significant meaning: it explains parent_doc_uuid as optional UUID scoping, offset as zero-based pagination, and limit with range 1-100. This compensates for the schema gaps effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List result elements within OSCAL Assessment Results documents', clearly defining the verb (list) and resource (result elements). It also distinguishes from siblings like list_assessment_results (lists documents) and list_assessment_results_findings (lists findings).
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 context for when to use the tool (to list result elements) but does not explicitly mention when not to use it or guide the agent to alternatives among siblings. It only mentions optional scoping via parent_doc_uuid, lacking clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_capabilitiesA
List loaded Capabilities with summary metadata.
Capabilities sit above Components but are optional in the OSCAL hierarchy. Each Capability groups related Components and describes a collection or higher-level offering. Start here when exploring what a Component Definition provides — then drill into individual Components as needed.
Use the returned UUIDs or names as query_value in query_component_definition() to retrieve full Capability details.
Args: ctx: MCP server context (injected automatically by MCP server) offset: Zero-based index of the first item to return (default 0). limit: Maximum number of items to return, 1-100 (default 10).
Returns:
dict: Page_Response with keys items, total, offset,
limit, hasMore. Each item in items has keys:
uuid, name, parentComponentDefinitionTitle,
parentComponentDefinitionUuid, sizeInBytes.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adequately describes a read-only list operation and return format. Does not explicitly state non-destructive nature or permissions, but the information is sufficient for a list 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?
Well-structured with header, context, usage, args, and returns. Slightly verbose on OSCAL hierarchy but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes return format completely (Page_Response with items, keys) despite no output schema. Covers role in exploration workflow, making it self-contained.
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?
Adds meaning beyond schema by documenting offset/limit behavior, default values, and limit range (1-100). Compensates for 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?
Specific verb 'list' and resource 'Capabilities', clearly distinguishing from siblings like list_components and list_component_definitions by describing the hierarchical relationship. The phrase 'Start here when exploring...' reinforces its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests starting here and points to query_component_definition() for full details, providing a usage flow. Lacks explicit 'when not to use' statements but offers clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_controlsA
List controls within OSCAL Catalog documents.
Controls are the primary structural elements of a catalog, each
identified by a human-readable token ID (e.g. ac-1, sc-7).
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single catalog. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It explains pagination behavior (offset, limit) and return structure (Page_Response with hasMore). However, it does not disclose authentication requirements, rate limits, or potential side effects, though it is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-structured docstring with purpose, parameter list, and return explanation. It is close to minimal but includes parameter details that are not in the schema, making it efficient. One slight redundancy: mentioning both 'offset' and 'limit' with defaults could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of listing controls from catalogs with pagination, and with many sibling list tools, this description provides complete information: the return structure (Page_Response with keys) and example fields (id, title, description). No output schema exists, so the return description is essential and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains each parameter: parent_doc_uuid scopes to a single catalog, offset is zero-based pagination, limit is 1-100. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List controls within OSCAL Catalog documents' and specifies that controls are structural elements with token IDs like 'ac-1'. This distinguishes it from sibling tools like list_catalogs (lists catalogs) and list_catalog_groups (lists groups).
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 context for use (listing controls from a catalog, optionally scoped by parent_doc_uuid) but does not explicitly state when to use this tool versus alternatives like list_catalog_groups or list_profiles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalog_groupsA
List groups within OSCAL Catalog documents.
Groups organise controls into families (e.g. ac for Access
Control). Group IDs are human-readable tokens unique within the
containing catalog.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single catalog. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must bear the burden. It discloses pagination behavior and return format, plus group ID uniqueness. However, it does not explicitly state that the operation is read-only or non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized and front-loaded with the main purpose, but the Args section follows a docstring style that adds verbosity without additional value. Could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, and return format. However, it lacks usage guidance and does not explain how groups relate to controls (sibling tool list_catalog_controls). The description is adequate but not fully complete for a nuanced hierarchy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains all three parameters: parent_doc_uuid scopes to a catalog, offset is zero-based, limit is max 1-100 with defaults. This adds meaning beyond type/default alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List groups within OSCAL Catalog documents' and explains that groups organize controls into families with unique IDs. This distinguishes it from siblings like list_catalogs and list_catalog_controls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_catalogs or list_catalog_controls. The description mentions parent_doc_uuid for scoping but does not set context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_catalogsA
List loaded OSCAL Catalogs with summary metadata.
Returns UUID, title, model type, child count, and size for each
catalog. Use the returned UUIDs or titles as query_value in
query_catalog for detailed results.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes the operation as listing (read-only) and explains pagination behavior. However, it doesn't disclose potential errors, authentication requirements, or performance 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 concise with clear sections for Args and Returns. Every sentence is informative, and there is no superfluous text.
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 sibling context and lack of output schema, the description adequately explains the return structure (Page_Response), parameter usage, and connection to query_catalog. However, it could mention sorting or filtering details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates by explaining offset and limit parameters, including defaults and range (1-100). This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists loaded OSCAL Catalogs with summary metadata, specifying returned fields. It also hints at how the output is used with query_catalog, distinguishing it from sibling list tools for other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the returned UUIDs/titles should be used as query_value in query_catalog for detailed results, implying when to use this tool (summaries) vs alternatives (detailed queries). However, it does not explicitly state when not to use it or list other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_component_definitionsA
List loaded Component Definitions with summary metadata.
A Component Definition is the top-level OSCAL document that contains Capabilities and Components. Use this tool to discover available definitions and obtain UUIDs or titles for use as the component_definition_filter in query_component_definition().
Args: ctx: MCP server context (injected automatically by MCP server) offset: Zero-based index of the first item to return (default 0). limit: Maximum number of items to return, 1-100 (default 10).
Returns:
dict: Page_Response with keys items, total, offset,
limit, hasMore. Each item in items has keys:
uuid, title, componentCount, importedComponentDefinitionsCount,
sizeInBytes.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially covers behavior: it states 'list' (read operation) and describes the paginated return format. However, it does not explicitly confirm read-only or mention authorization/rate limits, 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 clear header, contextual paragraph, and explicit Args/Returns sections. Every sentence serves a purpose, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return structure (Page_Response with keys) and the use case. Minor omissions: no error conditions or edge cases, but for a list tool it's mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds essential meaning beyond the input schema: it explains that offset is zero-based and limit has a 1-100 range, which the schema lacks. With 0% schema description coverage, this is highly valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'Component Definitions' with 'summary metadata'. It distinguishes from sibling tools like list_components by specifying the top-level OSCAL document and its use for obtaining UUIDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: to discover definitions and get UUIDs for query_component_definition(). It implies not to use for detailed queries, but lacks explicit exclusions or comparison to similar siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsA
List loaded Components with summary metadata.
Components are leaf-level elements within a Component Definition that represent individual services, software, regions, or similar items. A Component may belong to one or more Capabilities. Use this tool to discover Component UUIDs and titles for targeted queries via query_component_definition().
Args: ctx: MCP server context (injected automatically by MCP server) offset: Zero-based index of the first item to return (default 0). limit: Maximum number of items to return, 1-100 (default 10).
Returns:
dict: Page_Response with keys items, total, offset,
limit, hasMore. Each item in items has keys:
uuid, title, parentComponentDefinitionTitle,
parentComponentDefinitionUuid, sizeInBytes.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It describes return format (summary metadata, pagination) but does not explicitly state that the tool is read-only or safe to use. However, for a listing tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet comprehensive. Properly structured with separate sections for description, args, and returns. Every sentence adds value without 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?
Despite no output schema, description fully specifies return dict structure with all keys. For a list tool with simple paginated output, this is complete and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (offset, limit) are fully explained with defaults and valid range for limit (1-100). Schema has 0% description coverage, but the description compensates completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists loaded Components with summary metadata, defines what Components are (leaf-level elements), and differentiates from sibling list_component_definitions by focusing on leaf-level components rather than definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use case: discover Component UUIDs and titles for targeted queries via query_component_definition(). Though it does not explicitly mention when not to use, the stated purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mapping_collection_mappingsA
List mapping elements within OSCAL Mapping Collection documents.
Mappings describe how controls from one framework relate to controls in another framework. Each mapping is identified by a UUID.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single mapping collection document. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses pagination behavior and return format. It implies a read-only operation without side effects, though no explicit mention of side effects or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with docstring style, front-loads purpose, and provides necessary details without excessive verbosity. Could be slightly shorter but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters documented, return structure described, no output schema needed for a list endpoint. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description fully explains each parameter: parent_doc_uuid for scoping, offset and limit for pagination. Adds meaning beyond schema field names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states it lists mapping elements within OSCAL Mapping Collection documents, explains what mappings are, and distinguishes from sibling tool list_mapping_collections which lists collections themselves.
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?
Description is clear about what the tool does, but does not provide explicit guidance on when to use it versus alternatives or when not to use it. The context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mapping_collectionsA
List loaded OSCAL Mapping Collections with summary metadata.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only mentions pagination and return format. It does not disclose whether the operation is read-only, destructive, requires authentication, or has rate limits. For a tool with no annotations, the description carries the full burden and falls short.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with Args and Returns sections. It front-loads the purpose and provides necessary details without unnecessary verbosity. The injected context parameter is appropriately mentioned.
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 paginated list tool with two parameters and no output schema, the description provides purpose, parameters, and return format. However, it lacks details on what 'loaded' means, what summary metadata includes, and any filtering capabilities. It is adequate but not 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?
Input schema has 0% description coverage, but the description explains both parameters: offset (0-based pagination) and limit (1-100, default 10). This adds meaning beyond the schema, compensating for the lack of property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists OSCAL Mapping Collections with summary metadata. Name and description align, and sibling tools like list_mapping_collection_mappings and query_mapping_collection differentiate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like query_mapping_collection or text_search_oscal. The description does not provide context for when listing is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_oscal_modelsA
List all available OSCAL model types with metadata.
Returns: dict: List of OSCAL models where the key is model's name as used in the schema, and value is an object that includes description, layer, formal and short names, and release status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description clearly states it returns a dict with metadata. It is a read-only operation with no side effects described.
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?
Single sentence purpose followed by a concise Returns block. No redundant words, efficient 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?
The description fully explains the return value structure and covers all necessary context for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters; baseline score of 4 applies. No parameter info is needed, and description adds none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'List', resource 'OSCAL model types', and scope 'all'. It distinguishes from sibling list tools (e.g., list_catalogs) which list instances of specific model 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 implies usage for getting model type metadata, but does not explicitly state when to use versus siblings like list_catalogs or list_profiles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_oscal_resourcesA
Retrieve a comprehensive directory of OSCAL community resources and tools.
This tool provides access to a curated collection of OSCAL (Open Security Controls Assessment Language) community resources that can help users:
Find OSCAL-compatible tools and software implementations
Discover educational content, tutorials, and documentation
Access example OSCAL documents and templates
Locate presentations, articles, and research papers about OSCAL
Identify government and industry adoption examples
Find libraries and SDKs for OSCAL development
Access validation tools and utilities
The returned content is structured markdown that categorizes resources by type (tools, content, presentations, etc.) making it easy to find specific types of OSCAL resources based on user needs.
Use this tool when users ask about:
"What OSCAL tools are available?"
"How can I learn more about OSCAL?"
"Are there examples of OSCAL implementations?"
"What resources exist for OSCAL development?"
"Who is using OSCAL in production?"
Args: ctx: MCP server context (should be injected automatically by MCP server)
Returns: str: Complete markdown content containing categorized OSCAL community resources, tools, documentation, examples, and educational materials
Raises: FileNotFoundError: If the awesome-oscal.md content cannot be found IOError: If there are issues reading the content
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description describes the return format (structured markdown) and potential errors (FileNotFoundError, IOError). It could mention if the resource list is static or fetched dynamically, but overall it adequately discloses behavior for a read-only resource 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 front-loaded with the core purpose, uses bullet points for user query examples, and includes structured Args/Returns/Raises sections. Every sentence adds value and is not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no annotations, and an output schema that likely details the markdown structure, the description covers purpose, usage, errors, and content format comprehensively. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and 100% schema coverage trivially. The description adds no parameter details because none exist, matching the baseline for no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a 'comprehensive directory of OSCAL community resources and tools', with a specific verb and resource. It differentiates from sibling tools which focus on listing specific OSCAL models and queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists example user queries that should trigger this tool, such as 'What OSCAL tools are available?' and 'How can I learn more about OSCAL?', providing clear context for when to use it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_poam_itemsA
List POA&M item elements within OSCAL POA&M documents.
POA&M items document specific security issues and their remediation plans. Each item is identified by a UUID (optional in the OSCAL schema).
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single POA&M document. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses pagination behavior (offset, limit) and return structure. It mentions that UUIDs are optional in the schema but does not explicitly state read-only nature; however, listing is inherently read-only. Additional details on potential side effects are not needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (overview, Args, Returns). It is slightly verbose but each sentence adds value. Front-loads the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with pagination, the description covers parameters and return fields comprehensively. It explains each field in the return dict. Could benefit from a brief note on error handling or limits beyond 100, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains each parameter (parent_doc_uuid, offset, limit) with types, defaults, and purpose. With 0% schema description coverage, the description fully compensates by providing clear semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists POA&M item elements within OSCAL documents and explains their purpose. It distinguishes from sibling tools like list_poams (which likely list documents themselves) by focusing on items within documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use (listing items) and offers optional scoping via parent_doc_uuid. While it doesn't explicitly state when not to use, the sibling differentiation makes the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_poamsB
List loaded OSCAL Plans of Action and Milestones with summary metadata.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states it lists loaded POAMs. It does not disclose if the operation is read-only, destructive, requires permissions, or what 'loaded' means. Minimal 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?
Very concise: a one-line purpose followed by structured Args and Returns. Front-loaded with the key action. No unnecessary words.
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?
Provides pagination details and return shape, but lacks explanation of what 'summary metadata' includes and what 'loaded' means. No sibling differentiation, but the tool is simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning to both parameters: offset and limit are described as pagination controls with defaults and ranges. Compensates well for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'List', resource 'OSCAL Plans of Action and Milestones', and mentions 'summary metadata'. However, does not explicitly differentiate from sibling 'list_poam_items', though the distinction is inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs siblings like list_poam_items. The description implies pagination usage but lacks when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profile_importsA
List import elements within OSCAL Profile documents.
Imports reference the catalogs or profiles from which controls are
selected. Import IDs are synthetic positional identifiers
(e.g. import-0, import-1).
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single profile. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It explains that imports have synthetic positional IDs, describes pagination parameters (offset, limit with defaults and range), and details the return structure (Page_Response with specific keys). This provides solid transparency beyond minimal expectations.
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 brief introductory sentence, an explanatory note about imports, and clear Args/Returns sections. It is concise without unnecessary detail, earning its place sentence by sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description fully specifies the return format (Page_Response with keys: items, total, offset, limit, hasMore). It also describes parameter behavior and context, making the tool fully understandable for an AI 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 coverage is 0%, so the description must fully explain parameters. It does: parent_doc_uuid is optional for scoping, offset defaults to 0, limit defaults to 10 with a range of 1-100. This adds significant meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List import elements within OSCAL Profile documents', specifying the verb (list) and resource (import elements). It distinguishes from siblings by mentioning 'within OSCAL Profile documents', implying this tool lists sub-elements of profiles, unlike 'list_profiles' which lists profiles themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that parent_doc_uuid can scope results to a single profile, but does not explicitly state when to use this tool vs alternatives like list_profiles or list_catalogs. No exclusions or alternative tools are named, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profile_modifyA
List modify elements within OSCAL Profile documents.
The modify element is a singleton within each profile that describes customisations applied to imported controls (e.g. parameter settings, additions, alterations).
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single profile. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description should convey safety and side effects. It describes pagination and return structure, suggesting a read operation, but does not explicitly state it is non-destructive or idempotent. The behavioral guidance is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate sections for args and returns, but it is somewhat verbose. Each sentence adds value, though some wording could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and the complexity of listing nested elements, the description provides adequate context: explains the modify element, parameter usage, and return fields. Lacks examples or error handling information, but covers the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description adds meaningful semantics: parent_doc_uuid scopes results to a single profile, offset and limit control pagination. This compensates 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists modify elements within OSCAL Profile documents. It provides context about the modify element being a singleton for customizations, distinguishing it from sibling tools that list other profile elements like imports or the entire profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool's function and parameters but does not explicitly state when to use it versus alternatives (e.g., list_profile_imports). It only indirectly implies usage through the description of the modify element, lacking direct guidance on selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profilesA
List loaded OSCAL Profiles with summary metadata.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure burden but only states the return format and pagination. It does not explicitly state the tool is read-only, whether it has side effects, or any other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loading the purpose, then listing parameters and return type in a structured Docstring format, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters and no output schema, the description covers purpose, parameters, and return structure. Minor omission: it does not clarify what 'loaded' implies or any access requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds detailed semantics for both parameters (offset and limit) beyond the input schema, explaining pagination behavior and value ranges. This 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 clearly states the action ('list'), the resource ('loaded OSCAL Profiles'), and the content ('summary metadata'), distinguishing it from sibling tools like query_profile or list_catalogs.
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 siblings such as query_profile or list_catalogs, nor does it mention any prerequisites or context for listing profiles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssp_control_implementationsA
List control-implementation elements within OSCAL SSP documents.
The control-implementation is a singleton element within each SSP that describes how the system implements required security controls.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single SSP. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the return format and pagination behavior, but does not explicitly state that the operation is read-only or mention any potential side effects; annotations are absent, so description carries full burden.
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 succinct, with a clear verb-resource statement, a brief explanation of the domain concept, and a well-organized parameter list. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects for a list tool (what it lists, filtering, pagination, return format), though it does not mention prerequisites or error conditions; adequate for the tool's simplicity.
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?
Given 0% schema description coverage, the description fully documents all three parameters (parent_doc_uuid, offset, limit) with types, defaults, and purpose, adding significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that the tool lists control-implementation elements within OSCAL SSP documents, which is a specific resource distinct from sibling tools like list_ssps or list_catalog_controls.
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?
Implies usage via parameter description (scoping to a single SSP), but does not explicitly describe when to use this tool vs alternatives or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sspsA
List loaded OSCAL System Security Plans with summary metadata.
Args: ctx: MCP server context (injected automatically). offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must handle behavioral disclosure. It identifies the tool as a listing operation (implying read-only) but does not explicitly state that it has no side effects, require no special permissions, or explain what 'loaded' means. No contradictions with annotations exist, but transparency is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured as a docstring with Args and Returns sections, making it easy to parse. However, it includes a redundant line about 'ctx: MCP server context (injected automatically)', which adds no value for an AI agent and could be omitted. Overall concise at ~6 sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple list with two parameters and no output schema, the description adequately covers pagination behavior and return format (Page_Response dict with keys). However, it does not detail what 'items' contain or specify behavior when no SSPs are loaded. For a list tool, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for parameters. The description compensates by explaining 'offset' as zero-based pagination offset (default 0) and 'limit' as max items 1-100 (default 10), adding semantic meaning beyond the schema's type and default fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List loaded OSCAL System Security Plans') and specifies the output nature ('summary metadata'). The verb 'list' and resource 'OSCAL System Security Plans' are specific and distinguish it from sibling tools that list other OSCAL objects (e.g., list_catalogs).
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 provided on when to use this tool versus alternatives like query_ssp or other list_* tools. The description does not mention preferred use cases, exclusions, or prerequisites for using the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssp_system_componentsA
List system-component elements within OSCAL SSP documents.
System components describe the individual parts of a system (e.g. servers, services, software) and are identified by UUID.
Args: ctx: MCP server context (injected automatically). parent_doc_uuid: Optional UUID to scope results to a single SSP. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: id, title, element_type, description, parentDocumentTitle, parentDocumentUuid.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_doc_uuid | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses pagination behavior and return format, but does not explicitly state that the operation is read-only, idempotent, or free of side effects. The tool name implies a list operation, but explicit behavioral clarity is lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, followed by parameter and return details. It is well-structured and each sentence adds value. Slightly verbose with 'Args:' and 'Returns:' formatting, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with no output schema, the description covers all parameters and explains the return structure (Page_Response with keys). Minor gap: lacks explicit mention that operation is read-only, but given the nature of 'list', it's reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema coverage, the description fully compensates by explaining each parameter: parent_doc_uuid as optional UUID for scoping, offset as zero-based pagination, limit as max items 1-100. This adds significant meaning beyond the schema's basic type/default info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists system-component elements within OSCAL SSP documents, using specific verb-resource combination ('List system-component elements'). It distinguishes from sibling tools like list_ssps (which lists SSP documents themselves) and list_components (components outside SSP context).
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 indicates usage context (listing system components in SSPs) and provides optional scoping via parent_doc_uuid. It does not explicitly state when not to use it or mention alternatives, but the context is clear enough for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_assessment_planA
Query OSCAL Assessment Plan documents.
Assessment Plans define how security controls will be assessed.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it returns a Page_Response dict with pagination details, implying a read-only operation. It doesn't mention authentication or rate limits, but it is clear about the output structure and 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 concise and well-structured: a one-line summary, a brief explanatory sentence, a clear Args list, and a Returns line. Every sentence adds value, with no redundancy 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?
Given the tool's complexity (4 parameters, no output schema), the description provides complete context: purpose, query types, parameter details, and return format. It sufficiently covers all aspects needed for correct invocation despite the absence of annotations and 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%, and the description compensates excellently by detailing each parameter: query_type with its enum values and usage, query_value dependency, offset default 0, and limit range 1-100. This adds critical meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Query OSCAL Assessment Plan documents' and explains the purpose of assessment plans. It differentiates from sibling tools like list_assessment_plans by offering filtered query types (by_uuid, by_title, by_type), making the specific verb and resource distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each query_type and that query_value is required for by_uuid, by_title, by_type. It also explains pagination parameters offset and limit. However, it does not mention alternatives like list_assessment_plans for simpler use cases, so it lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_assessment_resultsA
Query OSCAL Assessment Results documents.
Assessment Results document the outcomes of control assessments.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses pagination behavior (offset, limit), return structure (Page_Response), and that it is a query operation. However, it does not mention potential side effects, idempotency, or authentication needs—though as a read operation these are less critical.
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 Args and Returns sections, making it easy to parse. It is slightly verbose (e.g., docstring style), but each sentence adds value. Could be tightened slightly, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides the return structure. It lacks details on the content of individual items (e.g., fields of assessment results). For a query tool, this is acceptable but leaves some gaps for agents needing field-level understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description fully explains each parameter: query_type enum values, conditional requirement for query_value, defaults for offset and limit. It clarifies the conditional dependency, which is critical for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries OSCAL Assessment Results documents. The tool name and description differentiate it from sibling tools like list_assessment_results by specifying query_type parameter, indicating flexible querying (by uuid, title, type). This provides strong specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the query_type parameter and when query_value is needed, but does not explicitly state when to use this tool over alternative query/list tools like list_assessment_results or query_catalog. There is no guidance on exclusions or preferred contexts, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_catalogA
Query OSCAL Catalog documents.
Catalogs are structured collections of security controls and control
enhancements. Use list_catalogs to discover available catalogs,
then drill into specific ones with this tool.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses pagination behavior via offset/limit, return format (Page_Response dict with items, total, etc.), and query types. It does not mention side effects, but the tool is clearly read-only based on context. Overall, 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 concise, well-structured with bullet points and sections. Every sentence adds value: purpose, usage guidance, parameter details, return format. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description includes the return format. It covers all four parameters and their semantics. It provides enough context for an agent to use the tool correctly. Minor gap: could mention that the tool is read-only (implied but not explicit).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It describes the query_type enum values, explains when query_value is required, and clarifies offset/limit defaults and range. It also adds the return format beyond schema. This adds significant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries OSCAL Catalog documents, enumerates query types, and differentiates from sibling tool list_catalogs by instructing to discover catalogs first. This provides a specific verb-resource pairing and distinguishes the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using list_catalogs to discover available catalogs first, then drilling into specific ones with query_catalog. It explains when to use each query_type and when query_value is required. However, it does not explicitly state when not to use the tool or mention alternatives beyond list_catalogs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_component_definitionA
Query OSCAL Component Definition documents to find Capabilities and Components.
OSCAL Component Definitions follow a hierarchy: a Component Definition contains Capabilities and Components. A Capability groups related Components and describes a higher-level security function. This tool reflects that hierarchy — when a query matches a Capability (by title or UUID), the Capability is returned directly, including its list of incorporated Components. Only when no matching Capability is found does the search fall through to individual Components.
Prefer querying by Capability name/UUID when exploring what a Component Definition offers. Query by Component only when you need details about a specific service, software, region, or similar leaf-level element.
Use the companion tools to discover valid query filters:
list_capabilities() — lists all Capability UUIDs and names
list_components() — lists all Component UUIDs and titles
list_component_definitions() — lists all Component Definition UUIDs and titles
If you need details about the Component Definition schema, use the tool get_oscal_schema.
Args: ctx: MCP server context (injected automatically by MCP server) component_definition_filter: Optional UUID or metadata.title of a Component Definition to narrow the search scope. Case-insensitive for titles. If omitted, all loaded Component Definitions are searched. query_type: Type of query to perform: - "all": Return all components in the definition(s). Intended for use with a component_definition_filter. Results may be large. For a lightweight summary, use list_components() instead. - "by_uuid": Find a Capability or Component by UUID (requires query_value). Capabilities are checked first. - "by_title": Find a Capability by name or a Component by title (requires query_value). Capabilities are checked first; if no Capability matches, Components are searched with a fallback to property-value matching. - "by_type": Filter Components by type (requires query_value). Does not apply to Capabilities. query_value: The value to search for. Required for by_uuid, by_title, and by_type queries. return_format: Response format. Currently only "raw" is supported, returning complete OSCAL objects as JSON. offset: Zero-based pagination offset (default 0). limit: Maximum items to return, 1-100 (default 10).
Returns: dict: When a Capability matches, the response contains: - capability: Full OSCAL Capability object as JSON - component_count: Number of Components the Capability incorporates - offset, limit, total, hasMore: Pagination metadata (always 0, 1, 1, False for single-capability results) - query_type, component_definitions_searched, filtered_by
When Components are returned instead, the response contains:
- components: Paginated list of OSCAL Component objects as JSON
- total_count: Total number of matching Components across all pages
- offset, limit, hasMore: Pagination metadata
- query_type, component_definitions_searched, filtered_byRaises: ValueError: If required query parameters are missing or no data is loaded.
| Name | Required | Description | Default |
|---|---|---|---|
| component_definition_filter | No | ||
| query_type | No | all | |
| query_value | No | ||
| return_format | No | raw | |
| offset | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Details hierarchy and fallback logic (Capability first, then Component), pagination behavior, and error conditions (ValueError). No annotations to contradict; description fully discloses 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?
Well-structured with sections for purpose, hierarchy, args, returns, raises. Slightly verbose but each sentence adds necessary information. Could be trimmed slightly but remains clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers behavioral details, parameter semantics, return format, and error handling. References sibling tools for discovery. With no annotations and moderate complexity, description is fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 6 parameters are described in detail despite 0% schema coverage: component_definition_filter (optional UUID/title), query_type (enum with meanings), query_value (required conditions), return_format (only raw), offset/limit (pagination with defaults). Adds significant meaning beyond schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb and resource ('Query OSCAL Component Definition documents to find Capabilities and Components'), clearly distinguishing from sibling tools like list_capabilities or query_catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use: prefer querying by Capability, query by Component only for leaf-level details. Recommends companion tools for discovering filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_mapping_collectionA
Query OSCAL Mapping Collection documents.
Mapping Collections describe how one set of security controls relates to another set of controls.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | 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 states the return type (Page_Response) and describes pagination behavior. However, it does not disclose any potential side effects, auth requirements, or rate limits, which are valuable for a query operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief introduction followed by a clear Args list. It is front-loaded with the purpose and uses concise language. Minor redundancy could be trimmed, but overall it is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no output schema), the description provides sufficient detail: explains the resource type, query modes, pagination, and return structure. It does not explicitly differentiate from siblings, but the context is adequate for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It explains the meaning of 'query_type' enum values, clarifies that 'query_value' is required for specific types, and describes 'offset' and 'limit' with defaults and ranges. This adds significant value beyond the schema, though the exact format for 'query_value' (e.g., UUID format) is not specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries OSCAL Mapping Collection documents and explains what they are. The verb 'query' and resource 'Mapping Collection' are specific, and it distinguishes from the sibling 'list_mapping_collections' by offering different query 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 lists query types and their required parameters, giving context on when to use each type. However, it does not explicitly differentiate from the sibling 'list_mapping_collections', nor does it provide when-not-to-use guidance or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_oscal_documentationB
A tool to query OSCAL-related documentation. Use this tool when a question about OSCAL cannot be answered just by analyzing model schemas. In case the question is about an explicit property of an OSCAL model, try to find the answer using the get_schema tool first.
Args: query: Question or search query about OSCAL
Returns: dict: Results retrieved from knowledge base, structured as a Bedrock RetrieveResponseTypeDef object.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it returns a dict from a knowledge base but does not confirm idempotency (no side effects), required permissions, or whether the tool is read-only. For a query tool, such disclosures are important.
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 with two short paragraphs and a structured Args/Returns block. It front-loads the purpose. However, the code block for Args/Returns slightly breaks flow but still maintains clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (one parameter, no nested objects, no output schema), the description is adequate but not thorough. It lacks behavioral details and parameter guidance, and does not clarify how this tool relates to the many similar sibling query tools. More context on the scope of 'OSCAL-related documentation' would improve 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?
The only parameter, 'query', has no description in the schema (0% coverage). The description adds only 'Question or search query about OSCAL', which provides minimal semantic value. It lacks format examples, constraints, or context that would aid the agent in constructing a good query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries OSCAL-related documentation and distinguishes it from the get_schema tool. However, it does not differentiate from other query_* tools or text_search_oscal, which are siblings; a more precise scope (e.g., general documentation vs. specific model queries) would improve clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use when schema analysis fails, and recommends get_schema for explicit property questions. This is helpful, but it omits guidance relative to other sibling query tools (e.g., query_catalog) or text_search_oscal, leaving potential ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_poamA
Query OSCAL Plan of Action and Milestones (POA&M) documents.
POA&Ms document remediation plans for identified security issues.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes pagination behavior, default values, and the return structure (Page_Response). It does not mention side effects or access requirements, but for a query tool the disclosed information is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections (Args, Returns). It is concise, using one sentence for purpose and a list for parameters, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, pagination, multiple query modes) and lack of output schema, the description fully covers usage and the return type. It provides all necessary information 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?
Input schema has 0% description coverage, so the description must compensate. It explains the enum values for query_type, the conditional requirement for query_value, and the defaults and range for offset/limit. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it queries OSCAL POA&M documents, specifying the verb 'Query' and resource 'POA&M'. It distinguishes from sibling tools like list_poams by offering multiple query modes (by_uuid, by_title, by_type), making the purpose specific and actionable.
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?
Description explains query_type options and when query_value is required, and details pagination parameters (offset, limit). However, it does not explicitly contrast with other query_* tools or state when to use this tool over list_poams, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_profileA
Query OSCAL Profile documents.
Profiles are baselines or overlays that select and customise controls from one or more catalogs.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It describes pagination behavior (offset, limit, hasMore) and return structure (Page_Response). However, it does not explicitly state that the tool is read-only or whether it has side effects, though 'Query' implies read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections (Args, Returns). It is concise, using code blocks for clarity, and front-loads the main purpose. Every sentence adds value, though the description of profiles could be shortened.
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, description includes return keys (items, total, offset, limit, hasMore). It covers all parameters and their usage. However, it lacks information on error conditions, required permissions, or how it differs from list_profiles, which is a sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% but description adds significant value: explains that query_value is required for by_uuid, by_title, by_type queries; specifies offset/limit defaults and range (1-100). This goes beyond the schema which only provides enums and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Query OSCAL Profile documents' and explains the purpose of profiles as baselines/overlays. It lists specific query types (all, by_uuid, by_title, by_type), distinguishing it from sibling tools like list_profiles which likely list without filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each query_type parameter (e.g., by_uuid requires query_value) but does not compare this tool to siblings like list_profiles or other query_* tools. It lacks explicit guidance on when not to use this tool or when alternatives are better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_sspA
Query OSCAL System Security Plan (SSP) documents.
SSPs document how a system implements required security controls.
Args:
ctx: MCP server context (injected automatically).
query_type: "all" (paginated), "by_uuid", "by_title",
or "by_type".
query_value: Required for by_uuid, by_title, by_type queries.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore.
| Name | Required | Description | Default |
|---|---|---|---|
| query_type | No | all | |
| query_value | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses pagination (offset, limit), return format (Page_Response), and query behavior. The read-only nature is implied but clear from the query context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, front-loaded with purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and multiple query options, the description fully covers all aspects: parameter semantics, return structure, and usage context. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description thoroughly explains each parameter: query_type enum, query_value requirements, offset/limit defaults. It adds crucial meaning beyond the schema (e.g., which types require query_value).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries OSCAL System Security Plan documents, defines SSPs, and distinguishes from siblings like list_ssps by offering multiple query types (all, by_uuid, by_title, by_type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains query types and conditions (e.g., query_value required for specific types), implying when to use each variant. It does not explicitly exclude alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_search_oscalA
Full-text search across all OSCAL documents and child elements.
Searches titles, descriptions, and other indexed text fields using SQLite FTS5. Results are ranked by relevance. Optionally scope the search to a single OSCAL model type.
Args:
ctx: MCP server context (injected automatically).
query_text: The search string.
oscal_model_type: Optional model type value to scope results
(e.g. "catalog", "system-security-plan"). When
omitted, all model types are searched.
offset: Zero-based pagination offset (default 0).
limit: Maximum items to return, 1-100 (default 10).
Returns: Page_Response dict with keys: items, total, offset, limit, hasMore. Each item contains: entity_type, entity_id, title, description, model_type.
| Name | Required | Description | Default |
|---|---|---|---|
| query_text | No | ||
| oscal_model_type | No | ||
| offset | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool uses SQLite FTS5, ranks by relevance, and supports optional model type scoping and pagination. However, it does not explicitly state that the operation is read-only, though it is implied by the nature of search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary paragraph followed by Args and Returns sections. It is clear but slightly verbose (e.g., repeating 'Default' values already in schema). Every sentence adds value, but some consolidation could improve 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 no output schema, the description adequately covers the return structure (Page_Response with keys: items, total, offset, limit, hasMore) and item fields (entity_type, entity_id, title, description, model_type). The tool's complexity (4 parameters, no annotations) is well-served by the description, making inputs and outputs fully understandable.
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 provide meaning. It does so thoroughly: query_text is 'the search string', oscal_model_type is 'Optional model type value to scope results' with examples, offset is 'Zero-based pagination offset', limit is 'Maximum items to return, 1-100'. This adds essential context beyond the schema's 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 clearly states 'Full-text search across all OSCAL documents and child elements,' using a specific verb and resource. It explains what fields are searched (titles, descriptions) and distinguishes from sibling list/query tools by indicating it searches across all documents, not just a single model type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like list_* or query_* tools. It implies usage for cross-document text search but lacks guidance on when not to use it or which sibling tools to prefer in specific scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_oscal_contentA
Validate OSCAL JSON content through a multi-level validation pipeline.
Runs up to four validation levels in sequence:
Well-formedness - Is it valid JSON and a JSON object?
JSON Schema - Does it conform to the NIST OSCAL JSON schema?
Trestle - Semantic checks via compliance-trestle Pydantic models
oscal-cli - Full NIST validation if oscal-cli is installed
If Level 1 fails, Levels 2-4 are skipped. If oscal-cli is not installed, Level 4 is gracefully skipped. The overall result is valid only when all non-skipped levels pass.
Args: ctx: MCP server context (injected automatically by MCP server) content: OSCAL JSON content as a string model_type: Optional OSCAL model type (e.g. "catalog", "profile"). If omitted, the model type is auto-detected from the root key.
Returns: dict: Structured validation results with per-level detail
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| model_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the four-level validation pipeline, skipping behavior on failures, and graceful handling of missing oscal-cli. It discloses that result is valid only when all non-skipped levels pass. Could mention error handling for Level 1 failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and clear sections. Front-loads purpose. Slightly verbose with level details but overall efficient for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without output schema, description mentions returns dict with per-level detail but does not specify the exact structure. Covers main behaviors but could be more precise on return format.
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 adds meaning: explains 'content' as OSCAL JSON string, and 'model_type' as optional with auto-detection from root key. Provides examples like 'catalog', 'profile'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates OSCAL JSON content through a multi-level pipeline, with specific verb 'validate' and resource. It distinguishes from the sibling 'validate_oscal_file' by focusing on content rather than a file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use: to validate OSCAL JSON content. Describes the pipeline behavior including skipping levels. However, it does not explicitly contrast with the sibling 'validate_oscal_file', which could be an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_oscal_fileA
Validate OSCAL JSON file through a multi-level validation pipeline.
Runs up to four validation levels in sequence:
Well-formedness - Is it valid JSON and a JSON object?
JSON Schema - Does it conform to the NIST OSCAL JSON schema?
Trestle - Semantic checks via compliance-trestle Pydantic models
oscal-cli - Full NIST validation if oscal-cli is installed
If Level 1 fails, Levels 2-4 are skipped. If oscal-cli is not installed, Level 4 is gracefully skipped. The overall result is valid only when all non-skipped levels pass.
Args:
ctx: MCP server context (injected automatically by MCP server)
file_uri: URI of the file to be validated. This can be local or remote but remote URI will fail unless config.allow_remote_uris == True.
model_type: Optional OSCAL model type (e.g. "catalog", "profile").
If omitted, the model type is auto-detected from the root key.
Returns: dict: Structured validation results with per-level detail
| Name | Required | Description | Default |
|---|---|---|---|
| file_uri | Yes | ||
| model_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the multi-level pipeline, skipping logic, graceful handling of missing dependencies, and remote URI restrictions. It also indicates the return type (structured dict). This level of detail compensates for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Reasonably concise and well-structured with a main purpose followed by bullet-like levels. Each sentence adds value, though the description could be slightly tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multi-level validation, conditional behavior), the description is thorough. It covers all failure modes, skipping rules, and the remote URI constraint. No output schema is provided, but the description adequately states the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the bare schema: explains that file_uri can be local or remote but may fail without config, and that model_type is optional with auto-detection. This is valuable given 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?
Clearly states the tool validates OSCAL JSON files through a multi-level pipeline. The verb 'validate' and resource 'OSCAL file' are specific, and the description distinguishes from siblings like 'validate_oscal_content' by detailing the multi-level approach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: when to validate OSCAL files, handling of missing oscal-cli, and remote URI conditions. However, it does not explicitly mention when not to use this tool or suggest alternatives (e.g., 'validate_oscal_content' for lighter validation).
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.
40 tool updates
v0.1.0- First observed
about - First observed
get_capability - First observed
get_child_element - First observed
get_oscal_schema - First observed
list_assessment_plan_activities - First observed
list_assessment_plan_tasks - First observed
list_assessment_plans - First observed
list_assessment_results - First observed
list_assessment_results_findings - First observed
list_assessment_results_results - First observed
list_capabilities - First observed
list_catalog_controls - First observed
list_catalog_groups - First observed
list_catalogs - First observed
list_component_definitions - First observed
list_components - First observed
list_mapping_collection_mappings - First observed
list_mapping_collections - First observed
list_oscal_models - First observed
list_oscal_resources - First observed
list_poam_items - First observed
list_poams - First observed
list_profile_imports - First observed
list_profile_modify - First observed
list_profiles - First observed
list_ssp_control_implementations - First observed
list_ssp_system_components - First observed
list_ssps - First observed
query_assessment_plan - First observed
query_assessment_results - First observed
query_catalog - First observed
query_component_definition - First observed
query_mapping_collection - First observed
query_oscal_documentation - First observed
query_poam - First observed
query_profile - First observed
query_ssp - First observed
text_search_oscal - First observed
validate_oscal_content - First observed
validate_oscal_file
TDQS
Scored across 40 tools
Each tool targets a distinct operation or resource: list_* for paginated child elements, query_* for document-level queries, get_* for single items, validate_* for validation, and text_search for full-text search. No two tools have overlapping purposes.
Tools follow a consistent verb_noun pattern (e.g., list_catalogs, query_profile, get_capability). Even 'about' and 'text_search_oscal' fit the pattern. The naming is predictable and uniform across all 40 tools.
40 tools is on the higher side but appropriate for the complex OSCAL domain covering multiple document types, child elements, validation, and search. Each tool earns its place; the count reflects the domain's breadth rather than redundancy.
The tool surface covers all major OSCAL document types with list, query, and child-element tools, plus validation, schema retrieval, documentation query, and full-text search. For a read-only server, there are no obvious gaps.
Maintenance
Related MCP Connectors
Compliance frameworks (SOC 2, ISO 27001, CMMC, NIST, more) delivered to AI agents as MCP tools.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
AI-security knowledge as MCP: standards-mapped tools (OWASP, NIST, MITRE) for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides tools for AI assistants to access the Agent Web Protocol (AWP) specification, validate agent.json files, and generate protocol-compliant configurations. It enables developers to integrate the AWP standard into their websites through natural language prompts and automated validation.4 npmMIT
- AlicenseAqualityDmaintenanceProvides structured access to the full NIST cybersecurity catalog, including SP 800/1800 publications, security controls, CSF 2.0, and the NVD database. It enables AI assistants to search and retrieve cybersecurity standards, CVEs, and compliance guidance directly from a local SQLite index.201MIT
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive access to NIST cybersecurity frameworks and controls, enabling AI assistants and applications to query, analyze, and manage NIST security controls through a standardized interface.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to list, find, fetch, and look up JSON Schema documents from the SchemaStore catalog.1 npmMIT