This release is a pre-release and may not be stable for production use.
OpenChronicle
A memory database for LLM agents. Persistent semantic + keyword memory, project namespacing, git-onboard, served over HTTP REST and MCP from a single ASGI process. Runs on your hardware.
What it does
- Persistent memory across sessions. Save decisions, milestones, and rejected approaches that survive context compression and new conversations. Retrieve them with hybrid full-text and semantic search via Reciprocal Rank Fusion.
- Project namespacing. Memory is scoped to projects, so context for one workstream doesn't leak into another.
- Git onboarding. Clone a repo, cluster commits by relatedness, return summaries ready for memory ingestion. Seeds long-term memory with the WHY behind existing code.
- One process, two transports. FastAPI hosts both the REST surface
(
/api/v1/*) and the MCP streamable-HTTP transport (/mcp) on the same port. Single container, single port mapping, single healthcheck. - Embedding-failure degradation. When the embedding provider goes
down, search degrades cleanly to FTS5-only and surfaces the
degraded state via
/health. Backfill catches up when the provider returns. - Schema migration framework. Versioned
.sqlmigrations with savepoint atomicity. Re-runs are idempotent. Future schema changes drop in asNNN_<slug>.sqlfiles. - Atomic online backups. Uses SQLite's online backup API. Backup-before-destructive policy: vacuum runs a backup first as part of the same job. Integrity-check failures trigger emergency backups.
What it isn't
- Not a conversation engine. v3 has no LLM. Use Claude Code, Goose, Open WebUI, etc. via the MCP server.
- Not multi-tenant. Single user. Bearer-token auth via
OC_API_KEYis supported but optional — disabled by default for trusted-LAN deployments. Seedocs/configuration/security_posture.mdfor the when-to-enable guidance. - Not a cloud sync layer. The DB lives on your hardware. Backups go to a directory next to it. Cross-device sync isn't built in (see V3_PLAN.md open question 12 for the design sketch).
By design.
Install
From source:
pip install -e ".[mcp,openai]"
oc init
oc serve
The default oc serve binds 127.0.0.1:8000. Override with
--host/--port or OC_API_HOST/OC_API_PORT.
Docker (single container, NAS-friendly):
docker run --rm \
-p 8000:8000 \
-v $(pwd)/data:/app/data \
-v $(pwd)/config:/app/config \
ghcr.io/carldog/openchronicle-mcp:latest
For a Portainer stack on a NAS, use the docker-compose.nas.yml at
the repo root.
Quickstart
# Bootstrap the runtime tree
oc init
oc init-config
# Create a project
PROJECT_ID=$(oc init-project "my-project")
# Save your first memory
oc memory add "Decision: SQLite for storage; AGPL for license" \
--project-id $PROJECT_ID --tags decision
# Search it
oc memory search "storage decision" --project-id $PROJECT_ID
Or do the same via MCP — register the server with Claude Code:
claude mcp add --scope user --transport http openchronicle \
http://127.0.0.1:8000/mcp
Then ask Claude to call memory_save and memory_search.
Architecture
Hexagonal: domain/ (pure types + ports) → application/ (use cases,
services) → infrastructure/ (SQLite, embedding adapters, the
maintenance loop). Driver-side adapters in interfaces/ host the
HTTP, MCP, and CLI surfaces.
See docs/architecture/ARCHITECTURE.md for the full layout.
Documentation
docs/architecture/ARCHITECTURE.md— layout, schema, ASGI designdocs/architecture/MAINTENANCE.md— maintenance loop + degradation policydocs/cli/commands.md—ocsubcommand referencedocs/configuration/env_vars.md— environment variablesdocs/configuration/config_files.md—core.jsonschemadocs/configuration/security_posture.md— security modeldocs/integrations/mcp_client_setup.md— register the MCP serverdocs/integrations/mcp_server_spec.md— MCP tool surfacedocs/api/STABILITY.md— versioning + deprecation policy
Development
pip install -e ".[dev,mcp,openai,ollama]"
pre-commit install
pytest
The architecture is enforced by tests:
tests/test_hexagonal_boundaries.py— domain/application/infrastructure layeringtests/test_architectural_posture.py— core agnostic of MCP SDKtests/test_no_secrets_committed.py,tests/test_no_soft_deprecation.py— repo hygiene
License
mcp-name: io.github.CSOAI-ORG/openchronicle-mcp
Metadata
Release files for openchronicle-mcp 3.0.0.dev2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| openchronicle_mcp-3.0.0.dev2.tar.gz | 139.3 kB | Without provenance | Details for openchronicle_mcp-3.0.0.dev2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| openchronicle_mcp-3.0.0.dev2-py3-none-any.whl | Python 3 | none | any | Details for openchronicle_mcp-3.0.0.dev2-py3-none-any.whl |
Total release size: 262.1 kB
Release files / openchronicle_mcp-3.0.0.dev2.tar.gz
| Download URL | openchronicle_mcp-3.0.0.dev2.tar.gz |
|---|---|
| Size | 139.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
21e4723e7b93fbe0d3ee210003248b5cb30750c67cff330196a6f9913377ec62
|
|
BLAKE2b-256 checksum How to use checksums |
fa0b129e44559d6119350fdd904f4be325f476da6fe24312361da8254ca761af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / openchronicle_mcp-3.0.0.dev2-py3-none-any.whl
| Download URL | openchronicle_mcp-3.0.0.dev2-py3-none-any.whl |
|---|---|
| Size | 122.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
08f3343d3c6bde56100d9ce57814b085ba002f7702f253991dcc1d8f0553dbb1
|
|
BLAKE2b-256 checksum How to use checksums |
5cfc71c262297469efecf93615bd7781305b5ddfce740482589f71c4ab70fbd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for openchronicle-mcp 3.0.0.dev2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.