Metadata-Version: 2.4
Name: markovian
Version: 2.0.0
Summary: Python client for the Markovian Protocol: stamp agent and model outputs into a public provenance registry and verify them, no account or key.
Author-email: Markovian Protocol <hello@markovianprotocol.com>
License: MIT
Project-URL: Homepage, https://markovianprotocol.com
Project-URL: Documentation, https://markovianprotocol.com/mcp.html
Project-URL: Source, https://github.com/MarkovianProtocol/markovian-protocol
Keywords: markovian,provenance,transparency-log,verification,agents,mcp,timestamping
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25
Dynamic: license-file

# markovian

Python client for the [Markovian Protocol](https://markovianprotocol.com) stamp
and verify API. A stamp commits a record to a public provenance registry and
returns a receipt anyone can check; it proves the record existed and was
committed at a point in time. It does not assert the record is correct.

No account and no API key.

```bash
pip install markovian
```

## Stamp and verify

```python
from markovian import MarkovianClient

client = MarkovianClient()
receipt = client.stamp({"event": "audit-2026"})
print(receipt["verify_url"])

result = client.verify(receipt["merkle_root"])
print(result["verified"])
```

Verification is read-only and keyless, so a party who does not trust the
stamper can run it:

```bash
curl https://api.markovianprotocol.com/verify/<merkle_root>
```

## Lineage

A stamp can be bound to the stamps it was derived from. The links live inside
the committed bytes, so they cannot be re-pointed undetected. `trace()` walks
the resulting graph and verifies every node and edge; it returns a map, not a
verdict.

```python
parent  = client.stamp({"claim": "model output X"}, derived_from=[])
child   = client.stamp({"verdict": "PASS"}, derived_from=[parent])
lineage = client.trace(child["merkle_root"])
```

## CLI

```bash
markovian stamp '{"event": "audit-2026"}'
markovian verify <merkle_root>
markovian trace <merkle_root>
```

## Compatibility notes

- Version 2.0 removes the market-regime query surface (`latest`, `regime`,
  `batch`, `watch`) and the local ZK verification path from earlier releases.
  Those described an earlier design that is no longer running. The dependency
  set is now `requests` only.
- Stamp and verify responses keep earlier field names so existing verifiers
  keep working: `zk_commitment` is a legacy identifier for the salted
  commitment, and `block_height` is a protocol-internal sequence height, not
  a Bitcoin block.

## The protocol

The Markovian Protocol operates a public, append-only transparency log whose
checkpoints are cosigned by independent witnesses and anchored to Bitcoin
asynchronously. The same stamp, verify, and trace operations are also exposed
as an MCP server for agents: see https://markovianprotocol.com/mcp.html

## License

MIT
