Unified MOVA SDK scaffold: CLI + Python API + future agent tools
Project description
mova-tool-sdk
Python-first MOVA SDK scaffold.
mova-tool-sdk is the thin Python SDK layer above the MOVA platform:
- local soft-entry CLI
- Python API for programmatic integration
- client access to the existing
mcp_door/ state-machine surface
This repo is intentionally separate from the legacy mova_sdk and from mova-bridge.
Current release state:
- package build is working
- test suite is intended to run from a clean checkout without manual
PYTHONPATHsetup - the SDK is suitable for an early public beta with intentionally narrow scope
Release docs:
Current scope
Version 0.1.0 starts with the shared base:
- config loading and persistence
- auth key management
- local candidate-package validation
- local candidate-package inspection
- local
Forgecandidate generation - thin client calls into the current platform surface
Current runtime boundary
The SDK now follows the real mcp_door contour instead of the earlier temporary bridge routes.
Current live client targets are:
POST /v1/registerGET /v1/mePOST /v1/api-keysPOST /v0/registry/contractsGET /v0/registry/contracts/:contract_idPOST /intake/runsGET /intake/runs/:run_idGET /intake/runs/:run_id/artifactsGET /intake/runs/:run_id/admission-resultGET /intake/runs/:run_id/dispatch-resultGET /intake/runs/:run_id/execute-dry-resultGET /intake/runs/:run_id/execute-internal-resultGET /intake/runs/:run_id/continuation-resultGET /intake/runs/:run_id/runtime-eligibilityGET /intake/runs/:run_id/access-grantGET /artifacts/:artifact_idPOST /operator/runs/:run_id/approvePOST /operator/runs/:run_id/denyGET /v0/admin/audit/runs/:run_id/export
Current limitation:
- generic execution by platform
contract_idis not exposed yet - the SDK can honestly execute from a local contract package path because it can derive a runtime descriptor from the canonical package files
- contract-id-first execution should only be added after
mcp_doorexposes a real runtime resolution route for it
Current command groups
mova auth set-keymova auth registermova auth memova auth issue-keymova auth checkmova auth whoamimova forgemova validatemova inspectmova executemova handoffmova forms list|getmova authoring get|answer|gap-analysis|cancelmova draftmova labmova lab-statusmova evidence list|get|history|lineage|archivemova promotemova contracts list|get|history|lineage|publish|deprecate|retire|reactivatemova connectors list|get|addmova bindings list|get|history|lineage|create|attach|rebind|activate|enable-steady-state|pause|disablemova status --view summary|artifacts|admission|dispatch|dry|internal|continuation|eligibility|access-grantmova artifact getmova decidemova audit
Contract package canon
The SDK currently validates the following package files:
manifest.jsonflow.jsonclassification_policy.jsonclassification_results.jsonruntime_binding_set.jsonmodels/input_model_v0.jsonmodels/verification_model_v0.jsonREADME.md
Status
This is the new canonical soft-entry SDK scaffold. The current role of the SDK is intentionally narrow:
- local AI-guided calibration will eventually end at a candidate contract package
- the platform lifecycle after that remains inside
mova-state-1.5 - the SDK should connect to existing platform endpoints instead of inventing a second authoring/runtime layer
Canonical config/env language now follows the SDK spec:
MOVA_API_KEYMOVA_PLATFORM_URL
See .env.example for a minimal local bootstrap shape.
Local/dev compatibility aliases are still accepted:
MOVA_BASE_URLMOVA_RUNTIME_EXECUTE_TOKENMOVA_ADMIN_READ_TOKENMOVA_OPERATOR_RECOVERY_TOKEN
Public Identity Beta
The deployed public beta identity surface is now part of the SDK:
mova auth register <email>mova auth memova auth issue-key
Useful shortcuts:
mova auth register <email> --set-keyStores the returned personal API key into local SDK config.mova auth issue-key --scopes self_read,runs_write --set-keyMints a narrower personal API key and makes it the active local key.
Public Python API direction
The repo now exposes the spec-shaped Python entrypoints:
from mova_tool_sdk import Forge, Mova
m = Mova()
result = m.execute(
contract_path="./my-contract",
tenant_id="tenant_demo_shop_v0",
input_data={"file_url": "https://..."},
)
forge = Forge()
session = forge.start(intent="automate invoice processing")
Mova is the canonical public API shape. The client is transitional and must progressively align to existing mcp_door endpoints rather than define new lifecycle layers from outside.
Forge Boundary
Forge stays local and light. Its purpose is:
- turn a business intent into a canonical candidate package
- emit a platform-facing
sdk_local_candidate_handoff_v2envelope - hand the candidate off into the real platform contour for authoring draft, lab testing, and promotion
Example:
mova forge --intent "automate invoice processing with human approval" --output ./my-contract
Current expected flow:
mova forge ...- receive candidate package locally
- hand off candidate into platform flow via
sdk_local_candidate_handoff_v2.json - the SDK seeds the authoring session with:
resolved_fieldsseed_canonical_package
- platform performs authoring draft / lab / promotion
Minimal platform continuation commands now map to existing routes:
mova forms list|get->GET /v0/authoring/forms*mova handoff->POST /v0/authoring/sessionsmova authoring get|answer|gap-analysis|cancel->GET|POST /v0/authoring/sessions/*mova draft->POST /v0/authoring/sessions/:session_id/emit-draftmova lab->POST /v0/lab/runsmova lab-status->GET /v0/lab/runs/:lab_run_idmova evidence list|get|history|lineage|archive->GET|POST /v0/lab/evidence/*mova promote->POST /v0/lab/promotemova contracts list|get|history|lineage|publish|deprecate|retire|reactivate->GET|POST /v0/registry/contracts/*mova connectors list|get|add->GET|POST /v0/business/connectors*mova bindings list|get|history|lineage|create|attach|rebind|activate|enable-steady-state|pause|disable->GET|POST /v0/business/bindings*mova status --view ...->GET /intake/runs/:run_id*mova artifact get->GET /artifacts/:artifact_id
mova handoff can now use either:
--intent "..."for a raw direct handoff--candidate-file ./sdk_local_candidate_handoff_v2.jsonfor the canonical SDK-generated handoff envelope
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mova_tool_sdk-0.1.0.tar.gz.
File metadata
- Download URL: mova_tool_sdk-0.1.0.tar.gz
- Upload date:
- Size: 27.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffb7ab8495ab5731398f8e7810db6a2ab1c4b99f4a52eba46c317947d21e168b
|
|
| MD5 |
6ee96cf8e04563152cf25b4eae8a0c9f
|
|
| BLAKE2b-256 |
6cb1dfe71a41ce21b50922148eac9bfe1e6c2e9ac912277e2777704dfcbddc50
|
File details
Details for the file mova_tool_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mova_tool_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24097078c9ec0e28a385c9eb981ad68364988ed18af08bd4fa41000cd4a1d42e
|
|
| MD5 |
9554289f24f1d501adb9d55d9adbf745
|
|
| BLAKE2b-256 |
796a0ccff9cd84fc5f2d19c19bc82fc8f7d525346efbe1d709f1ce69870b41fd
|