[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "context-keeper-mcp" version = "0.19.0" description = "MCP server that maintains project context (decisions, pipelines, constraints) across Claude conversations" readme = "README.md" license = "MIT" requires-python = ">=3.10" authors = [ { name = "Jonathan Armstrong", email = "jarmstrong158@gmail.com" }, ] keywords = ["mcp", "context", "memory", "claude", "model-context-protocol", "decisions"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries", "Topic :: Utilities", ] dependencies = [] [project.urls] Homepage = "https://github.com/jarmstrong158/context-keeper" Repository = "https://github.com/jarmstrong158/context-keeper" Issues = "https://github.com/jarmstrong158/context-keeper/issues" [project.scripts] context-keeper = "server:main" # PACKAGING INVARIANT -- read before editing either list below. # # This project is a flat set of top-level modules, not a package, so hatch # has no directory to sweep: every shipped .py file must be named EXPLICITLY # in BOTH lists. A module that exists in git but is missing here is silently # absent from the pip install, and the feature it implements just doesn't # work for pip users. That has now happened twice -- mirror.py (fixed in # b5acffa) and hooks/constraint_reinject.py (the v0.11 constraint-reinjection # feature, fixed here). # # tests/test_server.py::TestPackagingCompleteness derives the required set # from the repo itself (every top-level *.py and hooks/*.py that isn't # build-time-only) and fails if either list drifts, so a new module cannot # be forgotten a third time. If you add a module, add it to both lists. [tool.hatch.build.targets.sdist] include = [ "server.py", "store_paths.py", "scope_rules.py", "ranking.py", "mojibake.py", "quality_checks.py", "mirror.py", "semantic_index.py", "code_drift.py", "usage.py", "work_focus.py", "hooks/session_start.py", "hooks/pre_compact.py", "hooks/post_compact.py", "hooks/commit_capture_reminder.py", "hooks/scope_guard.py", "hooks/constraint_reinject.py", "hooks/subagent_start.py", "LICENSE", "README.md", "CLAUDE.md", ] [tool.hatch.build.targets.wheel.force-include] "server.py" = "server.py" "store_paths.py" = "store_paths.py" "scope_rules.py" = "scope_rules.py" "ranking.py" = "ranking.py" "mojibake.py" = "mojibake.py" "quality_checks.py" = "quality_checks.py" "mirror.py" = "mirror.py" "semantic_index.py" = "semantic_index.py" "code_drift.py" = "code_drift.py" "usage.py" = "usage.py" "work_focus.py" = "work_focus.py" "CLAUDE.md" = "CLAUDE.md" "hooks/session_start.py" = "hooks/session_start.py" "hooks/pre_compact.py" = "hooks/pre_compact.py" "hooks/post_compact.py" = "hooks/post_compact.py" "hooks/commit_capture_reminder.py" = "hooks/commit_capture_reminder.py" "hooks/scope_guard.py" = "hooks/scope_guard.py" "hooks/constraint_reinject.py" = "hooks/constraint_reinject.py" "hooks/subagent_start.py" = "hooks/subagent_start.py"