mcp-server-for-oscal 0.1.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. mcp_server_for_oscal/__init__.py +0 -0
  2. mcp_server_for_oscal/__main__.py +7 -0
  3. mcp_server_for_oscal/config.py +72 -0
  4. mcp_server_for_oscal/main.py +131 -0
  5. mcp_server_for_oscal/oscal_agent.py +40 -0
  6. mcp_server_for_oscal/oscal_docs/awesome-oscal.md +181 -0
  7. mcp_server_for_oscal/oscal_schemas/README.md +116 -0
  8. mcp_server_for_oscal/oscal_schemas/oscal_assessment-plan_schema.json +1 -0
  9. mcp_server_for_oscal/oscal_schemas/oscal_assessment-plan_schema.xsd +5268 -0
  10. mcp_server_for_oscal/oscal_schemas/oscal_assessment-results_schema.json +1 -0
  11. mcp_server_for_oscal/oscal_schemas/oscal_assessment-results_schema.xsd +5555 -0
  12. mcp_server_for_oscal/oscal_schemas/oscal_catalog_schema.json +1 -0
  13. mcp_server_for_oscal/oscal_schemas/oscal_catalog_schema.xsd +2071 -0
  14. mcp_server_for_oscal/oscal_schemas/oscal_complete_schema.json +1 -0
  15. mcp_server_for_oscal/oscal_schemas/oscal_complete_schema.xsd +9326 -0
  16. mcp_server_for_oscal/oscal_schemas/oscal_component_schema.json +1 -0
  17. mcp_server_for_oscal/oscal_schemas/oscal_component_schema.xsd +3011 -0
  18. mcp_server_for_oscal/oscal_schemas/oscal_mapping_schema.json +1 -0
  19. mcp_server_for_oscal/oscal_schemas/oscal_mapping_schema.xsd +2226 -0
  20. mcp_server_for_oscal/oscal_schemas/oscal_poam_schema.json +1 -0
  21. mcp_server_for_oscal/oscal_schemas/oscal_poam_schema.xsd +5406 -0
  22. mcp_server_for_oscal/oscal_schemas/oscal_profile_schema.json +1 -0
  23. mcp_server_for_oscal/oscal_schemas/oscal_profile_schema.xsd +2493 -0
  24. mcp_server_for_oscal/oscal_schemas/oscal_ssp_schema.json +1 -0
  25. mcp_server_for_oscal/oscal_schemas/oscal_ssp_schema.xsd +3945 -0
  26. mcp_server_for_oscal/py.typed +0 -0
  27. mcp_server_for_oscal/tools/__init__.py +5 -0
  28. mcp_server_for_oscal/tools/get_schema.py +101 -0
  29. mcp_server_for_oscal/tools/list_models.py +79 -0
  30. mcp_server_for_oscal/tools/list_oscal_resources.py +123 -0
  31. mcp_server_for_oscal/tools/query_documentation.py +75 -0
  32. mcp_server_for_oscal/tools/utils.py +37 -0
  33. mcp_server_for_oscal-0.1.5.dist-info/METADATA +137 -0
  34. mcp_server_for_oscal-0.1.5.dist-info/RECORD +38 -0
  35. mcp_server_for_oscal-0.1.5.dist-info/WHEEL +4 -0
  36. mcp_server_for_oscal-0.1.5.dist-info/entry_points.txt +2 -0
  37. mcp_server_for_oscal-0.1.5.dist-info/licenses/LICENSE +175 -0
  38. mcp_server_for_oscal-0.1.5.dist-info/licenses/NOTICE +1 -0
File without changes
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env python3
2
+ """Entry point for running the OSCAL MCP server as a module."""
3
+
4
+ from mcp_server_for_oscal.main import main
5
+
6
+ if __name__ == "__main__":
7
+ main()
@@ -0,0 +1,72 @@
1
+ """
2
+ Configuration module for OSCAL MCP Server.
3
+
4
+ This module handles loading configuration from environment variables with sensible defaults.
5
+ """
6
+
7
+ import os
8
+
9
+ from dotenv import load_dotenv
10
+
11
+
12
+ class Config:
13
+ """Configuration class that loads settings from environment variables."""
14
+
15
+ def __init__(self) -> None:
16
+ load_dotenv()
17
+ """Initialize configuration from environment variables."""
18
+
19
+ # Bedrock configuration (can be overridden by command line args)
20
+ self.bedrock_model_id: str = os.getenv(
21
+ "BEDROCK_MODEL_ID", "us.anthropic.claude-sonnet-4-20250514-v1:0"
22
+ )
23
+
24
+ # Knowledge base configuration (can be overridden by command line args)
25
+ self.knowledge_base_id: str = os.getenv("OSCAL_KB_ID", "")
26
+
27
+ # AWS configuration
28
+ self.aws_profile: str | None = os.getenv("AWS_PROFILE")
29
+ self.aws_region: str | None = os.getenv("AWS_REGION")
30
+
31
+ # Logging configuration
32
+ self.log_level: str = os.getenv("LOG_LEVEL", "INFO")
33
+
34
+ # Server configuration
35
+ self.server_name: str = os.getenv("OSCAL_MCP_SERVER_NAME", "OSCAL")
36
+
37
+ # Transport configuration
38
+ self.transport: str = os.getenv("OSCAL_MCP_TRANSPORT", "stdio")
39
+
40
+ def update_from_args(
41
+ self,
42
+ bedrock_model_id: str | None = None,
43
+ knowledge_base_id: str | None = None,
44
+ log_level: str | None = None,
45
+ transport: str | None = None,
46
+ ) -> None:
47
+ """Update configuration with command line arguments."""
48
+ if bedrock_model_id:
49
+ self.bedrock_model_id = bedrock_model_id
50
+ if knowledge_base_id:
51
+ self.knowledge_base_id = knowledge_base_id
52
+ if log_level:
53
+ self.log_level = log_level
54
+ if transport:
55
+ self.transport = transport
56
+
57
+ def validate_transport(self) -> None:
58
+ """Validate that the configured transport is supported.
59
+
60
+ Raises:
61
+ ValueError: If transport is not one of the valid options.
62
+ """
63
+ valid_transports = ["stdio", "streamable-http"]
64
+ if self.transport not in valid_transports:
65
+ raise ValueError(
66
+ f"Invalid transport type: {self.transport}. "
67
+ f"Valid options are: {', '.join(valid_transports)}"
68
+ )
69
+
70
+
71
+ # Global configuration instance
72
+ config = Config()
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Simple OSCAL MCP server using FastMCP.
4
+
5
+ """
6
+
7
+ # Import configuration
8
+ import argparse
9
+ import logging
10
+
11
+ from mcp.server.fastmcp import FastMCP
12
+
13
+ from mcp_server_for_oscal.config import config
14
+
15
+ # Import tools
16
+ from mcp_server_for_oscal.tools.get_schema import get_oscal_schema
17
+ from mcp_server_for_oscal.tools.list_models import list_oscal_models
18
+ from mcp_server_for_oscal.tools.list_oscal_resources import list_oscal_resources
19
+ from mcp_server_for_oscal.tools.query_documentation import query_oscal_documentation
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+ # Global variables (will be initialized in main)
24
+ agent = None
25
+
26
+ # Create MCP server using configuration
27
+ mcp = FastMCP(
28
+ config.server_name,
29
+ instructions="""
30
+ Open Security Controls Assessment Language (OSCAL)
31
+ This server provides tools to support evaluation and implementation of NIST's OSCAL.
32
+ OSCAL is a set of framework-agnostic, vendor-neutral, machine-readable schemas that
33
+ describe the full life cycle of security governance, risk, and compliance (GRC)
34
+ artifacts, from controls to remediations. OSCAL enables automation of GRC workflows
35
+ by solving interoperability problem imposed by digital-paper workflows. You must try
36
+ this OSCAL MCP server first for all topics related to OSCAL before falling back to
37
+ built-in knowledge.
38
+ """,
39
+ )
40
+
41
+
42
+ # Register tools with MCP server
43
+ # don't register the query_oscal_documentation tool unless we have a KB ID
44
+ # TODO: get rid of this after we have working implementation of local index
45
+ if config.knowledge_base_id:
46
+ mcp.add_tool(query_oscal_documentation)
47
+
48
+ mcp.add_tool(list_oscal_models)
49
+ mcp.add_tool(get_oscal_schema)
50
+ mcp.add_tool(list_oscal_resources)
51
+
52
+
53
+ def main():
54
+ """Main function to run the OSCAL agent."""
55
+ # Parse command line arguments
56
+ parser = argparse.ArgumentParser(description="OSCAL MCP Server")
57
+ parser.add_argument(
58
+ "--aws-profile",
59
+ type=str,
60
+ default=config.aws_profile,
61
+ help="AWS profile name to use for authentication (defaults to default profile or environment credentials)",
62
+ )
63
+ parser.add_argument(
64
+ "--log-level",
65
+ type=str,
66
+ default=config.log_level,
67
+ help="Log level for the application (defaults to INFO)",
68
+ )
69
+ parser.add_argument(
70
+ "--bedrock-model-id",
71
+ type=str,
72
+ help="Bedrock model ID to use (overrides BEDROCK_MODEL_ID environment variable)",
73
+ )
74
+ parser.add_argument(
75
+ "--knowledge-base-id",
76
+ type=str,
77
+ help="Knowledge base ID to use (overrides OSCAL_KB_ID environment variable)",
78
+ )
79
+ parser.add_argument(
80
+ "--transport",
81
+ type=str,
82
+ default=config.transport,
83
+ help="Transport protocol to use: 'stdio' or 'streamable-http' (defaults to stdio)",
84
+ )
85
+ args = parser.parse_args()
86
+
87
+ # Update configuration with command line arguments
88
+ config.update_from_args(
89
+ bedrock_model_id=args.bedrock_model_id,
90
+ knowledge_base_id=args.knowledge_base_id,
91
+ log_level=args.log_level,
92
+ transport=args.transport,
93
+ )
94
+
95
+ # Configure logging
96
+ try:
97
+ logging.basicConfig(level=args.log_level)
98
+ logging.getLogger("strands").setLevel(args.log_level)
99
+ logging.getLogger("mcp").setLevel(args.log_level)
100
+ logging.getLogger(__name__).setLevel(args.log_level)
101
+ except ValueError:
102
+ logger.warning("Failed to set log level to: %s", args.log_level)
103
+
104
+ # Validate transport configuration before starting the server
105
+ try:
106
+ config.validate_transport()
107
+ except ValueError as e:
108
+ logger.error("Transport configuration error: %s", e)
109
+ raise SystemExit(1) from e
110
+
111
+ # Log the selected transport method during startup
112
+ logger.info(
113
+ "Starting MCP Server `%s` with transport: %s",
114
+ config.server_name,
115
+ config.transport,
116
+ )
117
+
118
+ # Run the MCP server with the configured transport
119
+ try:
120
+ mcp.run(transport=config.transport)
121
+ except KeyboardInterrupt:
122
+ logger.info("Shutdown due to keyboard interrupt")
123
+ except Exception as e:
124
+ logger.exception(
125
+ "Error running MCP server with transport '%s': %s", config.transport, e
126
+ )
127
+ raise
128
+
129
+
130
+ if __name__ == "__main__":
131
+ main()
@@ -0,0 +1,40 @@
1
+ import boto3
2
+ from strands import Agent
3
+ from strands.models import BedrockModel
4
+
5
+ # Import configuration
6
+ from mcp_server_for_oscal.config import config
7
+
8
+
9
+ def create_oscal_agent(s: boto3.Session) -> Agent:
10
+ """Create and configure the OSCAL agent."""
11
+
12
+ system_prompt = """You are an OSCAL (Open Security Controls Assessment Language) expert assistant.
13
+
14
+ You help users understand OSCAL concepts, models, and implementation approaches. You have access to tools that can:
15
+ 1. Fetch official NIST OSCAL documentation
16
+ 2. List available OSCAL model types
17
+ 3. Provide detailed information about specific OSCAL models
18
+
19
+ When answering questions:
20
+ - Always use the official NIST documentation when available
21
+ - Provide practical, actionable guidance
22
+ - Explain concepts clearly for both beginners and experts
23
+ - Reference official sources and examples
24
+ - If you need specific documentation, use the fetch_oscal_documentation tool
25
+
26
+ You are knowledgeable about:
27
+ - OSCAL architecture and layers (Control, Implementation, Assessment)
28
+ - All OSCAL model types and their relationships
29
+ - OSCAL implementation best practices
30
+ - Integration with compliance frameworks like NIST SP 800-53, FedRAMP, etc.
31
+ """
32
+
33
+ # Use a valid Bedrock model identifier
34
+ agent = Agent(
35
+ model=BedrockModel(model_id=config.bedrock_model_id, boto_session=s),
36
+ load_tools_from_directory=True,
37
+ system_prompt=system_prompt,
38
+ )
39
+
40
+ return agent
@@ -0,0 +1,181 @@
1
+ # Awesome OSCAL
2
+ [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
3
+
4
+ A collection of awesome community resources, [maybe not quite production ready](https://gitter.im/usnistgov-OSCAL/Lobby?at=6075cc8f2e5574669b34555d), for increasing the adoption of the [Open Security Controls Assessment Language, OSCAL](https://pages.nist.gov/OSCAL).
5
+
6
+ Before contributing, please review the [Contribution Guidelines](https://github.com/oscal-club/awesome-oscal/blob/master/CONTRIBUTING.md).
7
+
8
+ ## Content
9
+
10
+ - [Australian Cyber Security Centre's Information Security Manual in OSCAL](https://www.cyber.gov.au/ism/oscal): OSCAL-based security catalogs and profiles for the Australian Cyber Security Centre's Information Security Manual controls. Covers ISM control’s applicability (non-classified, OFFICIAL: Sensitive, PROTECTED, SECRET, TOP SECRET), as well as for Essential Eight Maturity Level One (ML1), Maturity Level Two (ML2) and Maturity Level Three (ML3).
11
+
12
+ - [Center for Internet Security's ](https://github.com/CISecurity/CISControls_OSCAL/): the Center for Internet Security's Critical 18 Security controls as an OSCAL catalog, also with their controls related to other catalogs of security controls in the draft OSCAL mapping format.
13
+
14
+ - [CivicActions' oscal-component-definitions](https://github.com/CivicActions/oscal-component-definitions): a public collection of OSCAL component definitions for commonly used cloud services, software, security controls, and privacy controls.
15
+
16
+ - [Cloud Security Alliance's Cloud Controls Matrix v4 Controls and Mappings](https://cloudsecurityalliance.org/artifacts/ccm-machine-readable-bundle-json-yaml-oscal/): a bundle of the CCM Controls, CAIQ Security Questionnaire, Implementation Guidelines (both JSON/YAML and OSCAL) and Mappings (JSON/YAML) to support organizations that would like to foster CCM automation.
17
+
18
+ - [CMS Acceptable Risk Safeguards](https://github.com/CMSgov/ars-machine-readable): the tailored profiles and catalog of adapted NIST SP 800-53 controls used by the Centers for Medicare and Medicaid Services in OSCAL format. Perhaps the first OSCAL content released by a US government agency other than NIST, separate of collaboration with FedRAMP.
19
+
20
+ - [CyberESI's CPRT OSCAL Catalog Library](https://cyberesi-cg.com/oscal-cprt-catalog-project/): a collection official catalogs of various NIST frameworks in [the CPRT format](https://csrc.nist.gov/Projects/cprt/catalog#/cprt/home) converted to OSCAL through a proprietary converter.
21
+
22
+ - [EasyDynamics oscal.io](https://oscal.io): a community site, like OSCAL Club, with examples of OSCAL content.
23
+
24
+ - [Fathom5 SP 800-171 Catalog](https://github.com/FATHOM5/oscal/tree/main/content/SP800-171/oscal-content): the community-maintained version(s) of the NIST SP 800-171 catalog created by Fathom5.
25
+
26
+ - [GovTech Singapore's ICT&SS Policy](https://github.com/GovtechSG/tech-standards): Catalog and Profile for low-risk systems for 'Instruction Manual 8 Reform'.
27
+
28
+ - [RedHat's OSCAL component definitions](https://github.com/RedHatProductSecurity/oscal-component-definitions): a collection of OSCAL Component Defintions for testing with FedRAMP HIGH baseline profile.
29
+
30
+ - [RedHat's OSCAL profiles](https://github.com/RedHatProductSecurity/oscal-profiles): a collection of OSCAL custom profiles for testing with FedRAMP HIGH baseline profile.
31
+
32
+ ## Tools
33
+
34
+ - [Alex Koderman's oscal4neo4j](https://github.com/Agh42/oscal4neo4j): a collection of scripts in Neo4j's Cypher query language to load OSCAL catalog data in JSON format into its graph database, potentially for use with [the Red Team Project's Security Control Knowledge Graph](https://gitlab.com/redteam-project/sckg).
35
+
36
+ - [Brian Ruf's OSCAL-GUI](https://github.com/brian-ruf/OSCAL-GUI): an example PHP web interface developed by [@brian-ruf](https://github.com/brian-ruf) of former FedRAMP fame. It has core presentation logic, file import, format conversion, and working profile resolution.
37
+
38
+ - [CivicActions' compliance-io](https://github.com/CivicActions/compliance-io): a library for composable functions for conversion from OpenControl to OSCAL.
39
+
40
+ - [CivicActions' ssp-toolkit](https://github.com/CivicActions/ssp-toolkit): a suite of command line utilities in Python to mediate the creation of system security plans in NIST RMF 800-53 Revision 4 in OpenControl format. It can now export SSPs to OSCAL.
41
+
42
+ - [Cloud Native Computing Foundation's OSCAL Compass] (https://github.com/oscal-compass): a set of tools that enable the creation, validation, and governance of documentation artifacts for compliance needs. It leverages NIST's OSCAL as a standard data format for interchange between tools and people, and provides an opinionated approach to OSCAL SDKs and adoption by policy engines.
43
+
44
+ - [Control Plane's collie](https://github.com/controlplaneio/collie) a project demonstrating how infrastructure provisioned by cloud infrastructure controllers can be simultaneously secured and validated for compliance with Kyverno policies and OSCAL documents, leveraging Lula for validation.
45
+
46
+ - [Credentive Security's oscal-pydantic](https://github.com/RS-Credentive/oscal-pydantic): A set of pydantic models generated from the OSCAL JSON schema, useful for implementing OSCAL in Python. See also [this PyPI page](https://pypi.org/project/oscal-pydantic/). Just "pip install oscal-pydantic".
47
+
48
+ - [Defense Unicorn's bigbang-oscal-component-generator](https://github.com/defenseunicorns/bigbang-oscal-component-generator): a CLI utility and Golang libraries to merge together individual OSCAL YAML components into a unified OSCAL YAML component definition, focused primarily on the specific needs of [Platform One's Big Bang](https://repo1.dso.mil/platform-one/big-bang/bigbang).
49
+
50
+ - [Defense Unicorn's Lula](https://github.com/defenseunicorns/lula): a Command Line Interface tool that will consume OSCAL component-definition files to configure and drive execution of automated control validation for Kubernetes utilizing the [Kyverno](https://kyverno.io/) policy management system.
51
+
52
+ - [Defense Unicorn's go-oscal](https://github.com/defenseunicorns/go-oscal): a Golang library to generate OSCAL data types.
53
+
54
+ - [DRTConfidence](https://www.drtconfidence.com): GRC Platform supporting all OSCAL artifacts (catalog, profile, ssp, sap, sar, poa&m) with FedRAMP extensions and validations implemented out of the box. Available in a FedRAMP JAB High authorized Government Cloud Center.
55
+
56
+ - [EasyDynamics oscal.io](https://oscal.io): a community site, like OSCAL Club, with a list of tools from or for the community.
57
+
58
+ - [EasyDynamics OSCAL REST API Draft Standard](https://github.com/EasyDynamics/oscal-rest): an emerging standard for REST APIs to encourage all tool vendors to make a conformant API surface to reduce future churn in supporting heterogenous APIs for OSCAL-friendly tools and services.
59
+
60
+ - [EasyDynamics OSCAL React Library](https://github.com/EasyDynamics/oscal-react): a fully featured React component library for rendering all the OSCAL object models in JSON format with a developer-friendly API and a clean (but customizable) React-based UI.
61
+
62
+ - [EasyDynamics OSCAL REST API Service](https://github.com/EasyDynamics/oscal-rest-service): an initial Java-based implementation of some the OSCAL REST API listed above. It persists data as files in local directories.
63
+
64
+ - [EasyDynamics OSCAL Editor Deployment](https://github.com/EasyDynamics/oscal-editor-deployment): an integrated application, with the REST API service and React-based frontend (mentioned above), packaged as a simple Docker deployment of both open-source projects. It allows both viewing, and for some OSCAL document types and scenarios, editing file content and saving it to a properly configured Docker volume.
65
+
66
+ - [GSA's OSCAL Tools](https://github.com/GSA?q=oscal-&type=&language=&sort=): a collection of open-source tools provided by GSA teams to interoperate between OSCAL data (with required FedRAMP Extensions) and Word (DOCX) formats for SSPs, SARs, and SAPs.
67
+
68
+ - [GSA's oscal-js](https://github.com/GSA/oscal-js): an installer for oscal-cli & helper typescript types and functions for leveraging oscal, available via `npm install oscal`
69
+
70
+ - [GoComply's FedRAMP Utility](https://github.com/GoComply/fedramp): a tool that uses oscalkit (see below) to stamp in OSCAL data to the FedRAMP Word (DOCX) system security plan templates.
71
+
72
+ - [GoComply's oscalkit](https://github.com/GoComply/oscalkit): a Golang-based software development kit and command-line utility for operating on OSCAL data models.
73
+
74
+ - [GovReady's GovReady-Q](https://github.com/GovReady/govready-q): an open source, web-based self-service GRC tool to automate security assessments and compliance from [@gregelin](https://github.com/gregelin) and the GovReady crew. It focuses on import and export of OSCAL data models.
75
+
76
+ - [Hidayatullah Ahsan's ValidateOscalDocuments](https://github.com/hahsan-ti/ValidateOscalDocuments): a C# library and console application to validate OSCAL XML documents.
77
+
78
+ - [IBM Compliance Trestle](https://github.com/IBM/compliance-trestle): an opinionated command-line tooling platform for managing compliance as code, using continuous integration and NIST's OSCAL standard.
79
+
80
+ - [IBM's Compliance to Policy Tool](https://github.com/IBM/compliance-to-policy): a framework to bridge the gap between compliance and policy administration with Kubernetes automation and OSCAL catalogs, profiles, and component definitions.
81
+
82
+ - [John Jediny's OSCAL Static Site Playground](https://github.com/JJediny/oscal-static-site-playground): a static web application, using Gatsby and the US Web Design System, with hosting on the Federalist platform, to host a modern responsive application with OSCAL data models in JSON format dropped in place.
83
+
84
+ - [Metanorma's coradoc-oscal](https://github.com/metanorma/coradoc-oscal): a Ruby utility script to convert Metanorma Coradoc into data in the OSCAL Catalog document instances in YAML format.
85
+
86
+ - [Metanorma's oscal-ruby](https://github.com/metanorma/oscal-ruby): a Ruby gem for processing OSCAL data in YAML format.
87
+
88
+ - [MITRE's InSpec OSCAL Plugin](https://github.com/mitre/inspec-oscal/tree/develop): an InSpec plugin developed by MITRE and open-source contributors to prototype the use of InSpec profiles with variables and configuration data embedded, in OSCAL components, SSPs, and other document instances.
89
+
90
+ - [mocolicious OSCAL-Examples](https://github.com/mocolicious/OSCAL-Examples): a collection of different front-end web applications leveraging OSCAL, mainly to show off different development workflows and environments. Current development status or community use is unclear.
91
+
92
+ - [Nikita Wootten's Nix package for oscal-cli](https://github.com/nikitawootten/infra/blob/main/packages/oscal-cli/default.nix): a declarative [NixOS Linux](https://nixos.org/) package specification for repeatably building [NIST's oscal-cli utility](https://github.com/usnistgov/oscal-cli).
93
+
94
+ - [Nikita Wootten's Nix package for oscal-deep-diff](https://github.com/nikitawootten/infra/blob/main/packages/oscal-deep-diff/default.nix): a declarative [NixOS Linux](https://nixos.org/) package specification for repeatably building [NIST's oscal-deep-diff](https://github.com/usnistgov/oscal-deep-diff/) utility.
95
+
96
+ - [NREL Cyber's oscal](https://github.com/NREL-CYBER/oscal): a library of types and utility functions for using the OSCAL JSON object models conveniently with Typescript applications.
97
+
98
+ - [NREL Cyber's oscal-atoms](https://github.com/NREL-CYBER/oscal-atoms): a library for Atomic components for interacting with oscal-cache (see below).
99
+
100
+ - [NREL Cyber's oscal-cache](https://github.com/NREL-CYBER/oscal-cache): a libray with a collection of stores, commands and queries for OSCAL application cache.
101
+
102
+ - [OMB'S OPAL](https://github.com/EOP-OMB/opal): OSCAL Policy Administration Library (OPAL) provides a simple web application from the US government's Office of Management and Budget for managing system security plans, using the OSCAL standard to inform its data models.
103
+
104
+ - [OSCAL Club's asdf-oscal-cli](https://github.com/oscal-club/asdf-oscal-cli): a plugin for the [`asdf` extensible version manager](https://github.com/asdf-vm/asdf) so OSCAL adopters can install and switch between multiple versions of NIST's [`oscal-cli`](https://github.com/usnistgov/oscal-cli) repeatedly and reliably.
105
+
106
+ - [OSCAL Club's oscal-cli-action](https://github.com/oscal-club/oscal-cli-action): a reusable action for developers to repeatedly and reliably use NIST's [`oscal-cli`](https://github.com/usnistgov/oscal-cli) for continuous integration or continuous deployment tasks on [the GitHub Actions service](https://docs.github.com/en/actions).
107
+
108
+ - [Project SledgeHammer](https://github.com/sunstonesecure-robert/sledgehammer): a project by Robert Ficcaglia and members of the Kubernetes Policy Working Group with an example of using OSCAL and SBOMs (SPDX at this time) as generated with Open Policy Agent (OPA) policies for Kubernetes clusters.
109
+
110
+ - [Ramper](https://ramper.io/). Ramper is a FedRAMP lifecycle automation web application emphasizing Continuous Monitoring. It is a single source of truth for all Plan of Action and Milestone. It is equipped with real-time analytics, and produces monthly FedRAMP POA&M Excel and [OSCAL POA&M](https://ramper.io/oscal) files for FedRAMP PMO or a CSP's approving agency.
111
+
112
+ - [RedHat's OpenControl Database](https://github.com/RedHatGov/ocdb): a web application that demonstrates RedHat technologies' conformance to different compliance standards (i.e. NIST 800-53 Revisiion 5) and configuration baselines (i.e. DISA STIG for RedHat Enterprise Linux 7), supporting the export of various artifacts in OSCAL format with GoComply's library.
113
+
114
+ - [RedHat's oscal-automation-libs](https://github.com/RedHatProductSecurity/oscal-automation-libs): a common repository to share code for Makefiles, helper scripts, and IaC to support repositories with OSCAL content.
115
+
116
+ - [RedHat's ComplyScribe](https://github.com/complytime/complyscribe): a set of GitHub Actions for working with IBM's [Compliance Trestle](https://github.com/IBM/compliance-trestle)
117
+ in a CI/CD pipeline
118
+
119
+ - [RegScale](https://regscale.com/oscal): RegScale Community Edition is a free to use, real-time Governance, Risk and Compliance (GRC) platform that deploys in any environment, integrating with security and compliance tools via API to keep compliance documentation continuously up to date. GRC staff can work in the UI, engineers can write to the API, and OSCAL v1.0 content is automatically generated on demand.
120
+
121
+ - [Risk Redux's Control Freak](https://github.com/risk-redux/control_freak): a delightful Ruby on Rails application using the NIST 800-53 control catalogs in OSCAL JSON format to make the controls easily searchable.
122
+
123
+ - [Roscal](https://github.com/gborough/roscal): a Rust based project aiming to build a collection of tools and libraries for OSCAL model building/manipulation/visualisation, conversion and normalisation between various existing security stardard formats and schemas, automation and integration for continuously documentation update and security posture monitoring in various environments, with long term goal of automatic security and control enforcement based on OSCAL models in Docs-as-Code style.
124
+
125
+ - [SHR Group's iac2oscal](https://gitlab.com/shrgroup/oss/compliance-as-code/iac2oscal): a collection of Infrastructure-as-Code examples (primarily Ansible and Terraform) and how to link them to OSCAL component models for more tightly integrated Infrastructure-as-Code and Documentation-as-Code.
126
+
127
+ - [SHR Group's oscal-cli container](https://github.com/SHRGroup/oscal-cli): a GitHub repo with supporting GitHub Actions workflow that checks for new releases of [the NIST OSCAL Team's Java-based `oscal-cli` tool](https://github.com/SHRGroup/oscal-cli) and bundles the released application into an OCI container for each new release based on tags.
128
+
129
+ - [SHR Group's pyOSCAL](https://gitlab.com/shrgroup/oss/python/pyoscal): Python library to convert OSCAL content into python objects, developed by the clever [@mruge](https://github.com/mruge). [pyOSCAL-Builder](https://gitlab.com/shrgroup/oss/python/pyoscal-builder) automatically generates pyOSCAL dynamically from the lastes NIST OSCAL Metaschema.
130
+
131
+ - [SHR Group's OSCAL Diagram Exmaples](https://gitlab.com/shrgroup/oss/compliance-as-code/example-diagrams): a collection of documentation and diagrams for advanced OSCAL use cases, primarily showing how to interrelate data inside OSCAL component definitions.
132
+
133
+ - [Wendell Piez's OSCAL Profile Import Examiner](https://wendellpiez.github.io/XMLjellysandwich/oscal/import-examiner/): [XMLJellySandwich]((https://github.com/wendellpiez/XMLjellysandwich)): a web-based, in-browser XSLT transform system leveraging SaxonJS. [@wendellpiez](https://github.com/wendellpiez) has focused one demo on validating an OSCAL profile in XML form by validating upstream catalog references.
134
+
135
+ ## Articles and Blog Posts
136
+
137
+ - [Bill Weber's "The Future of SCAP Is the Missing Gap in OSCAL"](https://www.billweber.io/2022/05/13/the-future-of-scap-is-the-missing-gap-in-oscal/)
138
+
139
+ - [Bill Weber's "Tired of Following the Compliance Herd?"](https://www.billweber.io/2022/05/01/tired-of-following-the-compliance-herd/)
140
+
141
+ - [EasyDynamics "Innovating Security Compliance Through Open Standards"](https://blogs.easydynamics.com/2021/07/07/innovating-security-compliance-through-open-standards/)
142
+
143
+ - [EasyDynamics "DevSecComp(liance)Ops with OSCAL"](https://blogs.easydynamics.com/2022/03/18/devseccomplianceops-with-oscal/)
144
+
145
+ - [Eric Isbell's "Using a continuous ATO for better compliance and real-time data"](https://adhocteam.us/2022/08/16/using-continuous-ATO-better-compliance-real-time-data/)
146
+
147
+ - [Greg Elin's "An Orientation to OSCAL in the DevSecOps Pipeline"](https://medium.com/@gregelin/an-orientation-to-oscal-in-the-devsecops-pipeline-b51e45f8503b)
148
+
149
+ - [IBM's "Compliance Automated Standard Solution (COMPASS), Part 1: Personas and Roles"](https://dzone.com/articles/compass-compliance-part-1)
150
+
151
+ - [IBM's "Compliance Automated Standard Solution (COMPASS), Part 2: Trestle SDK"](https://dzone.com/articles/compliance-automated-standard-solution-compass-part-2-trestle-sdk)
152
+
153
+ - [IBM's "Compliance Automated Standard Solution (), Part 3: Artifacts and Personas"](https://dzone.com/articles/compliance-automated-standard-solution--part-3-artifacts-and-personas)
154
+
155
+ - [NIST's 2nd OSCAL Conference and Workshop](https://www.nist.gov/news-events/events/2021/02/2nd-open-security-controls-assessment-language-oscal-workshop)
156
+
157
+ - [NIST's 3rd OSCAL Conference and Workshop](https://www.nist.gov/news-events/events/2022/03/\-open-security-controls-assessment-language-oscal-workshop)
158
+
159
+ - [NIST's 4th OSCAL Conference and Workshop](https://www.nist.gov/news-events/events/2023/05/4th-open-security-controls-assessment-language-oscal-conference-and)
160
+
161
+ - [NIST's OSCAL 101 Education Series](https://csrc.nist.gov/Projects/open-security-controls-assessment-language/oscal-education-workshops)
162
+
163
+ - [NIST's OSCAL Mini Workshops](https://pages.nist.gov/OSCAL/learn/presentations/mini-workshop/)
164
+
165
+ - [Šimon Lukašík's "GoComply with OSCAL & FedRAMP :: Introduction to OSCAL"](http://isimluk.com/posts/2020/12/gocomply-with-oscal-fedramp-introduction-to-oscal/)
166
+
167
+ - [Šimon Lukašík's "GoComply with OSCAL & FedRAMP :: Introduction to oscalkit"](http://isimluk.com/posts/2020/12/gocomply-with-oscal-fedramp-introduction-to-oscalkit/)
168
+
169
+ - [Šimon Lukašík's "GoComply with OSCAL & FedRAMP :: Introduction to Metaschema"](http://isimluk.com/posts/2020/12/gocomply-with-oscal-fedramp-introduction-to-metaschema/)
170
+
171
+ ## Presentations and Talks
172
+
173
+ - [Andrew Martin and Control Plane's "Avoiding IAC Potholes with Policy + Cloud Controllers"](https://www.youtube.com/watch?v=cvoWlwftbEE&list=PLj6h78yzYM2NQ-Zi_k5qVmZyxSmLBzM6V&index=47) from Cloud Native Security Con North America 2023
174
+
175
+ - [Robert Ficcaglia's "12 Essential Requirements for Policy Enforcement and Governance with OSCAL"](https://www.youtube.com/watch?v=7pbIVjSluMs&list=PLj6h78yzYM2NQ-Zi_k5qVmZyxSmLBzM6V&index=52) from Cloud Native Security Con North America 2023
176
+
177
+ ## Other Resources
178
+
179
+ - [Brad Hards ISM OSCAL Catalog](https://github.com/bradh/ism-oscal): a community developer's collection of [the Australian Government's Information Security Manual security controls](https://www.cyber.gov.au/acsc/view-all-content/ism) in the form of an OSCAL catalog and profiles (including Essential 8).
180
+
181
+ - [oscal-diagrams](https://github.com/cyght-io/oscal-diagrams): Automatically generated diagrams for visualizing the OSCAL data models.
@@ -0,0 +1,116 @@
1
+ # OSCAL Schemas Directory
2
+
3
+ This directory contains OSCAL (Open Security Controls Assessment Language) schema files that define the structure and validation rules for OSCAL documents. These schemas are used by the MCP server to provide accurate schema information and validation capabilities for OSCAL models.
4
+
5
+ ## Contents
6
+
7
+ This directory contains schema files for the following OSCAL model types:
8
+
9
+ ### Core OSCAL Models
10
+
11
+ - **`oscal_catalog_schema.*`** - Catalog model schemas
12
+ - Defines the structure for security control catalogs (e.g., NIST SP 800-53)
13
+ - Contains control definitions, parameters, and guidance
14
+
15
+ - **`oscal_profile_schema.*`** - Profile model schemas
16
+ - Defines tailored sets of controls selected from catalogs
17
+ - Includes control customizations and parameter settings
18
+
19
+ - **`oscal_component_schema.*`** - Component Definition model schemas
20
+ - Defines system components and their implemented controls
21
+ - Maps controls to specific technical implementations
22
+
23
+ - **`oscal_ssp_schema.*`** - System Security Plan (SSP) model schemas
24
+ - Defines complete system security documentation
25
+ - Links system components to control implementations
26
+
27
+ ### Assessment Models
28
+
29
+ - **`oscal_assessment-plan_schema.*`** - Assessment Plan model schemas
30
+ - Defines security assessment planning and methodology
31
+ - Specifies assessment objectives and procedures
32
+
33
+ - **`oscal_assessment-results_schema.*`** - Assessment Results model schemas
34
+ - Defines security assessment findings and results
35
+ - Contains compliance status and evidence
36
+
37
+ - **`oscal_poam_schema.*`** - Plan of Action and Milestones (POA&M) model schemas
38
+ - Defines remediation tracking for security findings
39
+ - Contains timelines and responsible parties for fixes
40
+
41
+ ### Comprehensive Schema
42
+
43
+ - **`oscal_complete_schema.*`** - Complete OSCAL schema
44
+ - Unified schema containing all OSCAL model definitions
45
+ - Useful for tools that work with multiple OSCAL model types
46
+
47
+ ## File Formats
48
+
49
+ Each OSCAL model is provided in two schema formats:
50
+
51
+ - **`.json`** - JSON Schema files (JSON Schema Draft 7)
52
+ - Used for validating OSCAL documents in JSON format
53
+ - Provides programmatic validation capabilities
54
+
55
+ - **`.xsd`** - XML Schema Definition files
56
+ - Used for validating OSCAL documents in XML format
57
+ - Provides XML-specific validation and tooling support
58
+
59
+ ## How Schema Files Are Populated
60
+
61
+ The schema files in this directory are automatically downloaded and updated using the `bin/update-oscal-schemas.sh` script:
62
+
63
+ 1. **Source**: Schemas are downloaded from the official NIST OSCAL GitHub repository
64
+ 2. **Version**: Currently using OSCAL version 1.1.3
65
+ 3. **Update Process**:
66
+ ```bash
67
+ # Run from project root
68
+ ./bin/update-oscal-schemas.sh
69
+ ```
70
+ 4. **Automation**: The script downloads the official OSCAL release package and extracts only the schema files (.json and .xsd)
71
+
72
+ ## Usage in MCP Server
73
+
74
+ These schemas are used by the MCP server in several ways:
75
+
76
+ ### Schema Validation
77
+ - Validate OSCAL documents against their corresponding schemas
78
+ - Ensure document structure compliance with OSCAL standards
79
+ - Provide validation feedback for malformed documents
80
+
81
+ ### Tool Support
82
+ - Enable IDE integration with schema-aware editing
83
+ - Support auto-completion and validation in development tools
84
+ - Provide accurate type information for OSCAL models
85
+
86
+ ### Model Information
87
+ - Serve schema definitions through MCP tools like `get_schema`
88
+ - List available OSCAL model types via `list_models`
89
+ - Support documentation queries about OSCAL structure
90
+
91
+ ### API Integration
92
+ - Validate API requests and responses against OSCAL schemas
93
+ - Ensure data consistency across OSCAL-based workflows
94
+ - Support programmatic document generation and manipulation
95
+
96
+ ## Updating Schemas
97
+
98
+ To update to a newer version of OSCAL schemas:
99
+
100
+ 1. **Edit the update script**: Modify `OSCAL_RELEASE_URL` in `bin/update-oscal-schemas.sh` to point to the desired OSCAL version
101
+ 2. **Run the update**: Execute `./bin/update-oscal-schemas.sh` from the project root
102
+ 3. **Test compatibility**: Verify that existing functionality works with the new schemas
103
+ 4. **Update documentation**: Update version references in code and documentation as needed
104
+
105
+ ## Version Information
106
+
107
+ - **Current OSCAL Version**: 1.1.3
108
+ - **Last Updated**: [Automatically updated when schemas are refreshed]
109
+ - **Source Repository**: https://github.com/usnistgov/OSCAL
110
+
111
+ ## Related Documentation
112
+
113
+ - [OSCAL Official Website](https://pages.nist.gov/OSCAL/)
114
+ - [OSCAL GitHub Repository](https://github.com/usnistgov/OSCAL)
115
+ - [OSCAL Model Documentation](https://pages.nist.gov/OSCAL/concepts/layer/)
116
+ - [OSCAL Schema Documentation](https://pages.nist.gov/OSCAL/concepts/validation/)