A previous release had provenance metadata, but this release does not. View details.
Open Data Products Python SDK
open-data-products is a Python SDK and CLI for the
OpenDataProducts.org standards family:
ODPS, ODPC, ODPG, ODPV, and ODPR.
Use it to validate data product documents, build catalogs and graphs, inspect portfolio source intake, run LLM-assisted generation workflows, expose a local MCP server, and give AI agents a consistent standards-aware API.
Install
pip install open-data-products
Optional extras:
# Outlook .msg intake support
pip install "open-data-products[email]"
# Data Contract CLI integration
pip install "open-data-products[contracts]"
# Embedded llama.cpp generation support
pip install "open-data-products[llama-cpp]"
# Development tools
pip install "open-data-products[dev]"
Python 3.8 or newer is required.
What It Provides
| Area | Capabilities |
|---|---|
| Cross-spec API | Detect, load, validate, explain, summarize, and resolve references across ODPS, ODPC, ODPG, and ODPV documents |
| CLI | Run validation, generation, catalog, graph, vocabulary, portfolio, OKF, contract, resource, manifest, and MCP workflows through open-data-products |
| Portfolio workflows | Build, refresh, sync, render, localize, explain, and inspect portfolio workspaces from objectives, use cases, signals, and product source lanes |
| Document intake | Read Markdown, text, YAML, JSON, EML, MSG with the email extra, DOCX, PPTX, PDF, CSV, and XLSX source files for portfolio workflows |
| Agent surfaces | Run a safe-class stdio MCP server and generate an ARWS-compatible agent manifest |
| LLM generation | Generate ODPC fragments, ODPG graphs, and ODPS product YAML from source notes using local or hosted providers |
| Data Contracts | Wrap ODCS 3.0/3.1/3.2 contracts into conservative ODPS 4.2 drafts, resolve ODPS contract references, validate external contracts through optional datacontract-cli, extract schemas, check alignment, and generate reports |
Quick CLI Examples
Most commands print human-readable output by default. Add --json for CI,
scripts, MCP clients, and agents.
Run the SDK through Python:
# Validate and inspect standards documents
python3 -m open_data_products.cli validate examples/product.yaml
python3 -m open_data_products.cli explain examples/product.yaml --json
python3 -m open_data_products.cli refs examples/product.yaml --json
python3 -m open_data_products.cli summary examples/product.yaml
# Discover bundled schemas, prompts, vocabulary records, and guidance
python3 -m open_data_products.cli resources --json
python3 -m open_data_products.cli resources --id generation.prompt.system --json
# Agent surfaces
python3 -m open_data_products.cli manifest --json
python3 -m open_data_products.cli serve
After installation, the console script provides the same commands:
open-data-products validate examples/product.yaml
open-data-products explain examples/product.yaml --json
Wrap an ODCS contract without changing its source:
open-data-products product wrap-contract --input contracts/orders.yaml \
--output products/orders.yaml --json
The resulting ODPS document is a private draft with reported defaults and
missing business evidence. It uses the original contract as an external
reference unless --inline-contract is selected.
Choose the draft depth with optional enrichment:
# Minimal technical wrapper
open-data-products product wrap-contract --input contracts/orders.yaml --output products/orders.yaml
# Business description and discovery tags
open-data-products product wrap-contract --input contracts/orders.yaml --output products/orders.yaml --enrich
# Rich ODPS draft
open-data-products product wrap-contract --input contracts/orders.yaml --output products/orders.yaml --enrich --full-draft
See Data Contract workflows for the generated fields and provider configuration.
Discover technical portfolio evidence from a contract repository without declaring any contract to be an approved data product:
open-data-products portfolio discover-contracts contracts/ \
--output portfolio-discovery/ --json
The command writes a normalized contract inventory, a source-linked Data Contract Intelligence artifact, review-only typed opportunities, and a static HTML report. The report separates standalone product candidates, multi-contract boundary proposals, and rationalisation opportunities; it also lists contracts without a current opportunity signal. Duplicate and schema-overlap findings are technical evidence, not approved product boundaries.
Without --json, the command prints the same inventory, interface analysis,
priority evidence, typed opportunities, and no-current-signal contracts as the
HTML report. Use --json for the same information in structured form.
Portfolio source intake can be inspected without calling an LLM:
python3 -m open_data_products.cli portfolio intake \
--objectives sources/objectives/ \
--use-cases sources/use-cases/ \
--signals sources/signals/ \
--products sources/products/ \
--config generation.config.yaml \
--json
Portfolio build uses the same source lanes and prompt budget controls:
python3 -m open_data_products.cli portfolio build \
--objectives sources/objectives/ \
--use-cases sources/use-cases/ \
--signals sources/signals/ \
--products sources/products/ \
--output generated/portfolio/
LLM Generation
Generation defaults to local Ollama-compatible settings, and can also use
embedded llama.cpp, OpenAI-compatible local servers, NVIDIA NIM, Claude, and
hosted providers configured in generation.config.yaml.
open-data-products config generation --copy-to generation.config.yaml
open-data-products config generation --config generation.config.yaml --check
open-data-products generate \
--config generation.config.yaml \
--input source_docs/products/ \
--kind product-reference \
--output generated/
Documentation
The full SDK guide that used to live in this README is now here:
Focused user guides:
- Command guide
- Portfolio intake guide
- LLM generation
- Agent surface
- Recipe workflows
- Data Contract workflows
- API reference
Project references:
Development
git clone https://github.com/Open-Data-Product-Initiative/odps-python
cd odps-python
pip install -e ".[dev]"
pytest -q
Before publishing a package, verify the PyPI description renders:
python3 -m build
python3 -m twine check dist/*
Acknowledgments
Thanks to the Open Data Product Initiative community, Chris Howard / Kitard for
the original odps-python foundation, devlouie for the MCP layer and agent
surface, and the Data Contract CLI project for the optional contract execution
engine.
License
Apache License 2.0. See LICENSE for details.
Metadata
Release files for open-data-products 0.6.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Loss of provenance
These files do not have provenance metadata, despite files in a prior release including this data.
We recommend further investigation before installing these files. View details.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| open_data_products-0.6.3.tar.gz | 3.3 MB | Without provenance | Details for open_data_products-0.6.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| open_data_products-0.6.3-py3-none-any.whl | Python 3 | none | any | Details for open_data_products-0.6.3-py3-none-any.whl |
Total release size: 3.8 MB
Release files / open_data_products-0.6.3.tar.gz
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | open_data_products-0.6.3.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
25beb742a66a3ebf1159e5274a5d6e860e8911c9f667a8e180e3cde153e4bff6
|
|
BLAKE2b-256 checksum How to use checksums |
52af1900a1fc7eba79ced2c820ef477fc63f2c5536a0814741d83060a7a86e4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / open_data_products-0.6.3-py3-none-any.whl
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | open_data_products-0.6.3-py3-none-any.whl |
|---|---|
| Size | 537.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c889f5c56d2a2524e536c580c55286c1a15ba29dd5d413476087797c09e7a146
|
|
BLAKE2b-256 checksum How to use checksums |
2c704e74b44e96a139868c5b046b03608ebfd9a954efc8b6f97c7eda3fce9a15
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for open-data-products 0.6.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Loss of provenance
A previous release of these files had provenance metadata, but this release does not.
While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.
Release comparison
- Removed 0.6.2 2 files With provenance
- Added 0.6.3 2 files Without provenance
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.