Deterministic SHACL-based assessment and comparison for digital passport data models.
io.github.CE-RISE-software/dpawb MCP Server
This MCP server provides a Python toolkit and a thin CLI for SHACL-based assessment of digital passport data models. It supports deterministic evaluation, pairwise comparison of composed solutions, and SHACL-only use-case coverage.
🛠️ Key Features
Deterministic SHACL-based assessment for digital passport data models
Pairwise comparison of composed solutions
SHACL-only use-case coverage
🚀 Use Cases
Assess digital passport data models using SHACL
Compare two composed solution approaches pairwise
Check coverage limited to SHACL-defined use cases
⚡ Developer Benefits
Python toolkit plus thin CLI interface
Deterministic behavior for repeatable assessment and comparisons
⚠️ Limitations
Described scope is SHACL-based assessment and SHACL-only coverage; other evaluation methods are not mentioned.
A Python toolkit and thin CLI for SHACL-based assessment of digital passport data models, pairwise comparison of composed solutions, and SHACL-only use-case coverage analysis.
This README is primarily a repository and development entry point. The user-facing conceptual and usage reference is at the published documentation site. The repository-source docs remain available in docs/.
What this repository contains
A publishable Python package with a CLI entry point: dpawb
A thin stdio MCP server entry point: dpawb-mcp
Contract-aligned input schemas for composition profiles, use cases, and alignments
Built-in vocabularies and templates exposed through discovery commands
Synthetic local fixtures used only for tests and validation
A progression-based examples tree for human and AI-agent tutorials
Tool Shape
The tool is designed primarily as an agent-usable analytical toolkit with a thin CLI. The core command surface is:
assess
coverage
compare
prioritize
recommend-composition
schema
vocabulary
template
capabilities
summarize
AI-agent use
The intended primary integration mode is an AI agent orchestrating the analytical pipeline through the package API or the CLI. In practice, this means:
deterministic file-based inputs
JSON outputs suitable for agent parsing and chaining
explicit analytical steps instead of a chat-oriented interface
The CLI remains useful for direct human invocation, but the main product shape is an analytical engine that can be called by agent skills, workflow runners, or tool adapters.
The package also ships a thin stdio MCP server over the same deterministic command surface:
assess
coverage
compare
prioritize
recommend-composition
schema
vocabulary
template
capabilities
summarize
The MCP surface stays intentionally thin:
keep dpawb as the core Python package
expose the same operations through dpawb-mcp
ship the MCP runtime as both a local Python entry point and a GitHub Container Registry image
If you are working in a restricted environment, the package is configured to build with setuptools so editable installs do not depend on fetching an extra build backend.
If build isolation or wheel support is unavailable locally, use:
bash
python -m pip install --no-build-isolation -e .
In constrained environments where editable installation is blocked by local Python packaging tooling, the repository still supports a repo-native execution path:
bash
./scripts/run-local.sh capabilities
./scripts/test-local.sh
make smoke
make test
make validate
Before wiring PyPI CI/CD, run the local packaging check in an environment with wheel available:
bash
make release-check
This builds a wheel and sdist, installs the wheel into a clean temporary environment, and runs installed CLI smoke checks.
Structure
There are two distinct input areas in this repository:
fixtures/
Synthetic, repository-local test data only.
These files are used by tests, smoke checks, and CI validation.
examples/01-source-ingestion/
Live-source example inputs intended for manual runs.
These are the first step in the tutorial progression and are not part of CI validation.
The full examples tree is organized by analytical task, not by input data model:
examples/01-source-ingestion/
Load and assess declared profiles.
examples/02-structural-comparison/
Compare two profile assessment results.
examples/03-reduced-use-case-comparison/
Run the first aligned use-case comparison.
examples/04-extended-use-case-comparison/
Run a broader aligned use-case comparison.
examples/05-composition-recommendation/
Recommend a combined profile from two assessed model sets.
Each example is usable by humans as a step-by-step command tutorial and by AI agents as a deterministic recipe over explicit files.
Source-ingestion examples
Example profiles for live SHACL sources are included at:
When an alignment file is provided, the comparison result now includes two alignment-oriented views:
evaluated_pairs
Full per-pair presence status for every declared equivalence.
ranked_alignment_observations
Review-oriented gaps for any declared pair that is only present on one side or missing on both sides.
So the main things to inspect in an alignment-aware comparison result are:
alignment_coverage_ratio
evaluated_pairs
ranked_alignment_observations
If that comparison result is then passed into prioritize, those alignment gaps can also appear directly as ranked improvement targets.
The current analytical core is still conservative by design, but it now goes beyond token matching alone:
contradiction detection covers direct cardinality conflicts and datatype-versus-object-reference conflicts
item coverage uses SHACL path, owner-shape, and target-class evidence
join coverage can be satisfied by a shared owner shape, an explicit cross-shape object-reference path, or record-level retrieval context when that is the intended analytical interpretation
Repository layout
src/dpawb/: package, CLI, and analytical operations
src/dpawb/data/: bundled schemas, vocabularies, and templates
fixtures/: synthetic repository-local models, profiles, use cases, and alignments for tests only
examples/01-source-ingestion/: source-ingestion profiles, use cases, and alignments for manual runs
This repository is maintained on Codeberg — the canonical source of truth. The GitHub repository is a read mirror used for release archival and Zenodo integration. Issues and pull requests should be opened on Codeberg.
Funded by the European Union under Grant Agreement No. 101092281 — CE-RISE.
Views and opinions expressed are those of the author(s) only and do not necessarily reflect those of the European Union or the granting authority (HADEA).
Neither the European Union nor the granting authority can be held responsible for them.