[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "hypermnesia-mcp" version = "4.23.0" description = "Scientifically-grounded memory system based on computational neuroscience research" readme = "README.md" license = "MIT" requires-python = ">=3.10" authors = [ { name = "Clement Deust", email = "admin@ai-architect.tools" }, ] keywords = ["mcp", "codex", "gemini-cli", "claude-code", "memory", "cognitive-profiling"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries", ] dependencies = [ # source: ADR-0874 # # # # # # # # # "mcp>=2.0.0", "anyio>=4.5", "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "numpy>=1.24.0", # source: ADR-0874 # # # # # # # "sentence-transformers>=3.0.0", "flashrank>=0.2.0", # source: ADR-0874 # # # # # # # # "python-dateutil>=2.8.2", ] [project.urls] Homepage = "https://github.com/cdeust/Cortex" Repository = "https://github.com/cdeust/Cortex" [project.scripts] # source: ADR-0874 # # # # # # # # # # # cortex-doctor = "mcp_server.doctor:run" hypermnesia-mcp = "mcp_server.__main__:main" # source: CHANGELOG.md Unreleased, ADR number 0874 uses this same interim # form for the two scripts above until the console-entry-point ADR lands hypermnesia-mcp-hook = "mcp_server.hooks.entry:main" [project.optional-dependencies] postgresql = [ "psycopg[binary]>=3.1", "psycopg-pool>=3.2", # source: ADR-0874 # # "pgvector>=0.4,<0.6", ] sqlite = [ "sqlite-vec>=0.1.1", ] codebase = [ "tree-sitter>=0.24.0,<0.27", # source: ADR-0874 # # # # # # # # # # # # # # # # # # # # # # # # # "tree-sitter-language-pack>=1.12.5,<1.17", "networkx>=3.0", # source: ADR-0874 # # "leidenalg>=0.10", "igraph>=0.11", ] # Optional CPU graph visualization endpoints: tiles, quadtree hit-testing, and layout recomputation. # source: ADR-0874 viz-tile = [ "igraph>=0.11", # CPU layout (DrL / FR), MIT-licensed wheels "datashader>=0.16.3", # tile rasterization, O(viewport pixels) "pyarrow>=15.0", # Arrow IPC for the quadtree endpoint "pandas>=2.2", # Datashader's native frame format "cachetools>=5.0", # L1 in-memory tile LRU "Pillow>=10.0", # PNG encode ] benchmarks = [ "datasets>=2.14.0", # HuggingFace dataset loader (BEAM, LoCoMo, LongMemEval) "sentence-transformers>=3.0.0", # all-MiniLM-L6-v2 embeddings "flashrank>=0.2.0", # cross-encoder reranking (ms-marco-MiniLM-L-12-v2) "psycopg[binary]>=3.1", # PostgreSQL driver "psycopg-pool>=3.2", # pg_store.py imports ConnectionPool at module level "pgvector>=0.4,<0.6", # vector similarity in PostgreSQL (bounds: see [postgresql]) "pymupdf>=1.24.0", # PDF parsing for some benchmark sources ] # source: ADR-0874 # # # # # otel = [ "opentelemetry-sdk>=1.24.0", "opentelemetry-exporter-otlp-proto-http>=1.24.0", ] dev = [ "pytest>=8.0.0", "pytest-cov>=5.0.0", "pytest-asyncio>=0.23.0", # source: ADR-0874 # # # # "pytest-timeout>=2.3.0", "sentence-transformers>=3.0.0", "networkx>=3.0", # source: ADR-0874 # # # # # # # # "exceptiongroup>=1.2.0", ] [tool.hatch.build.targets.wheel] packages = ["mcp_server"] # source: ADR-0874 # # [tool.hatch.build.targets.sdist] exclude = [ "/benchmarks/beam/variance/*.txt", "/video/captures", "/video/output", "/docs/**/*.png", "/docs/arxiv-*/**", "/docs/campaigns/*.json", ] # ── Resolver constraints ───────────────────────────────────────────────── # source: ADR-0874 # # # # source: ADR-0874 # # # # # # # # # # source: ADR-0874 # # # # # # # [tool.uv] constraint-dependencies = [ "onnxruntime<1.24 ; python_full_version < '3.11'", ] # source: ADR-0874 # source: ADR-0874 # # # # # # # # # # # # # source: ADR-0874 # # # # # # # # # # # # # # # # # # # override-dependencies = [ "mpmath>=1.4.1,<1.5", ] # ── CPU-only torch, resolved through the lock ──────────────────────────── # source: ADR-0874 # # # # # source: ADR-0874 # # # # source: ADR-0874 # # # # # # # Use this explicit index only for packages mapped to it below. # source: ADR-0874 # source: ADR-0874 # # # # # # [[tool.uv.index]] name = "pytorch-cpu" url = "https://download.pytorch.org/whl/cpu" explicit = true [tool.uv.sources] torch = [{ index = "pytorch-cpu", marker = "sys_platform == 'linux'" }] [tool.ruff] # source: ADR-0874 # # # extend-exclude = [".claude"] [tool.ruff.lint] # source: ADR-0874 # # # select = [ "E4", # pycodestyle: import placement "E7", # pycodestyle: statement/comparison errors "E9", # pycodestyle: syntax/io errors "F", # pyflakes # source: ADR-0874 # # # # # "S110", # source: ADR-0874 # # # # # # "BLE001", # source: ADR-0874 # # # # # # # # "PLR2004", # source: ADR-0874 # # # # # # "E501", # source: ADR-0874 # # # # # # # # # # "PLC0415", # source: ADR-0874 # # # # # # "S608", # source: ADR-0874 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # "B", # source: ADR-0874 # # # # # # # # # "RET", # source: ADR-0874 # # # # # # # # # # # # # # # # # # # # # # # # # "DTZ", # source: ADR-0874 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # "N", # source: ADR-0874 # # # # # # # # # # # "ERA", ] # source: ADR-0874 # # # # # source: ADR-0874 # # # # # # # # # # # # # # # # # source: ADR-0874 # # # # # # source: ADR-0874 # # # # # # # [tool.ruff.lint.per-file-ignores] # source: ADR-0874 # # # # # # # # # # # # # # # # # "tests_py/**" = ["S110", "BLE001", "PLR2004", "PLC0415", "S608"] [tool.pytest.ini_options] testpaths = ["tests_py"] pythonpath = ["."] # source: ADR-0874 # # # timeout = 300 timeout_method = "thread" # source: ADR-0874 # # # # # # required_plugins = ["pytest-timeout", "pytest-asyncio"] # Narrow, message-anchored suppression of three DeprecationWarnings emitted by # a SWIG-generated extension during import — never by mcp_server. # source: ADR-0874 # # # # # # # source: ADR-0874 # # # # # # # # # # source: ADR-0874 # # # # # Remove when: `sentencepiece` (or whichever SWIG-built package is installed) # ships wheels built with SWIG >= 4.4.0 — verify with a full-suite run # reporting 0 warnings after deleting this entry. filterwarnings = [ "ignore:builtin type (SwigPyObject|SwigPyPacked|swigvarlink) has no __module__ attribute:DeprecationWarning", # source: ADR-0874 # # # # # # # # "error:The default datetime adapter is deprecated as of Python 3.12.*:DeprecationWarning", ] markers = [ "invariants: Phase 0.3+ testable invariant predicates (I1/I2/I3/I4 and parity tests)", ] [tool.coverage.run] source = ["mcp_server"] [tool.coverage.report] show_missing = true [dependency-groups] dev = [ "mutmut>=3.6.0", ] # source: ADR-0874 # # # source: ADR-0874 # source: ADR-0874 # # # lint = [ "ruff==0.16.6", ] typecheck = [ "pyright==1.1.411", ] packaging = [ "build>=1.2.0", # source: ADR-0874 # # # # # "hatchling>=1.24", ] # source: ADR-0874 # # # # # # # source: ADR-0874 # # # # container = [ "torch", ] # source: ADR-0874 # # # # source: ADR-0874 # # # # # # # # fuzz = [ "atheris>=3.1.0; python_version >= '3.12' and sys_platform == 'linux' and platform_machine == 'x86_64'", ] [tool.mutmut] # source: ADR-0874 # # # # # source: ADR-0874 # # # # # # # # source_paths = ["mcp_server"] only_mutate = ["mcp_server/shared/json_native.py"] # source: ADR-0874 # # # # # # # # # # # # # # # # # # # # # # # # also_copy = [ ".github", "tests_py", "deps", "docs", "assets", "scripts", "README.md", "CONTRIBUTING.md", "SECURITY.md", "CLAUDE.md", "GOVERNANCE.md", "manifest.json", "server.json", "package.json", ".bestpractices.json", "uv.lock", "requirements", "pyproject.toml", ] pytest_add_cli_args_test_selection = ["tests_py/shared/test_json_native.py"] use_setproctitle = false