spatial-memory-mcp 1.6.0__tar.gz → 1.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of spatial-memory-mcp might be problematic. Click here for more details.

Files changed (146) hide show
  1. spatial_memory_mcp-1.6.1/CHANGELOG.md +139 -0
  2. spatial_memory_mcp-1.6.1/CLAUDE.md +102 -0
  3. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/ISSUES-TRACKER.md +3 -2
  4. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/MARKETING.md +30 -11
  5. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/PKG-INFO +51 -9
  6. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/README.md +50 -8
  7. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/pyproject.toml +1 -1
  8. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/__init__.py +1 -1
  9. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/__main__.py +18 -1
  10. spatial_memory_mcp-1.6.0/CHANGELOG.md +0 -69
  11. spatial_memory_mcp-1.6.0/CLAUDE.md +0 -34
  12. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/.env.example +0 -0
  13. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/.gitignore +0 -0
  14. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/CONTRIBUTING.md +0 -0
  15. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/LICENSE +0 -0
  16. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/LIFECYCLE_PHASE_PLAN.md +0 -0
  17. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/PHASE4B_PLAN.md +0 -0
  18. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/PHASE4_PLAN.md +0 -0
  19. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/PHASE5_UTILITIES_PLAN.md +0 -0
  20. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/SECURITY.md +0 -0
  21. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/SPATIAL-MEMORY-ARCHITECTURE-DIAGRAMS.md +0 -0
  22. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/SPATIAL-MEMORY-MCP-SERVER-PLAN (1).md +0 -0
  23. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/docs/API.md +0 -0
  24. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/docs/BENCHMARKS.md +0 -0
  25. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/docs/MCP_SERVER_INSTRUCTIONS.md +0 -0
  26. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/docs/METRICS.md +0 -0
  27. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/docs/troubleshooting.md +0 -0
  28. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/examples/demo_config_logging.py +0 -0
  29. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/scripts/benchmark.py +0 -0
  30. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/scripts/inspect_db.py +0 -0
  31. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/scripts/populate_test_data.py +0 -0
  32. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/scripts/test_all_tools.py +0 -0
  33. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/adapters/__init__.py +0 -0
  34. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/adapters/lancedb_repository.py +0 -0
  35. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/config.py +0 -0
  36. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/__init__.py +0 -0
  37. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/cache.py +0 -0
  38. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/circuit_breaker.py +0 -0
  39. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/connection_pool.py +0 -0
  40. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/consolidation_strategies.py +0 -0
  41. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/database.py +0 -0
  42. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/db_idempotency.py +0 -0
  43. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/db_indexes.py +0 -0
  44. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/db_migrations.py +0 -0
  45. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/db_search.py +0 -0
  46. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/db_versioning.py +0 -0
  47. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/embeddings.py +0 -0
  48. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/errors.py +0 -0
  49. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/file_security.py +0 -0
  50. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/filesystem.py +0 -0
  51. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/health.py +0 -0
  52. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/helpers.py +0 -0
  53. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/import_security.py +0 -0
  54. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/lifecycle_ops.py +0 -0
  55. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/logging.py +0 -0
  56. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/metrics.py +0 -0
  57. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/models.py +0 -0
  58. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/rate_limiter.py +0 -0
  59. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/response_types.py +0 -0
  60. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/security.py +0 -0
  61. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/spatial_ops.py +0 -0
  62. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/tracing.py +0 -0
  63. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/utils.py +0 -0
  64. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/core/validation.py +0 -0
  65. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/factory.py +0 -0
  66. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/migrations/__init__.py +0 -0
  67. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/ports/__init__.py +0 -0
  68. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/ports/repositories.py +0 -0
  69. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/py.typed +0 -0
  70. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/server.py +0 -0
  71. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/services/__init__.py +0 -0
  72. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/services/export_import.py +0 -0
  73. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/services/lifecycle.py +0 -0
  74. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/services/memory.py +0 -0
  75. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/services/spatial.py +0 -0
  76. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/services/utility.py +0 -0
  77. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/tools/__init__.py +0 -0
  78. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/tools/definitions.py +0 -0
  79. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/spatial_memory/verify.py +0 -0
  80. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/hdbscan/__init__.pyi +0 -0
  81. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/lancedb/__init__.pyi +0 -0
  82. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/lancedb/index.pyi +0 -0
  83. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/lancedb/rerankers.pyi +0 -0
  84. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/lancedb/table.pyi +0 -0
  85. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/mcp/__init__.pyi +0 -0
  86. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/mcp/server/__init__.pyi +0 -0
  87. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/mcp/server/stdio.pyi +0 -0
  88. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/mcp/types.pyi +0 -0
  89. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/openai/__init__.pyi +0 -0
  90. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/pyarrow/__init__.pyi +0 -0
  91. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/pyarrow/parquet.pyi +0 -0
  92. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/sklearn/__init__.pyi +0 -0
  93. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/sklearn/metrics/__init__.pyi +0 -0
  94. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/stubs/umap/__init__.pyi +0 -0
  95. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/__init__.py +0 -0
  96. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/conftest.py +0 -0
  97. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/__init__.py +0 -0
  98. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/conftest.py +0 -0
  99. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_backup_restore.py +0 -0
  100. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_concurrent_writes.py +0 -0
  101. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_cross_process_locking.py +0 -0
  102. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_database.py +0 -0
  103. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_database_safeguards.py +0 -0
  104. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_embeddings.py +0 -0
  105. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_enterprise_features.py +0 -0
  106. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_indexing.py +0 -0
  107. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_mcp_server.py +0 -0
  108. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_namespace_ops.py +0 -0
  109. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_phase5_tools.py +0 -0
  110. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_security_edge_cases.py +0 -0
  111. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_server_v153.py +0 -0
  112. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/integration/test_ttl_snapshots.py +0 -0
  113. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_config.py +0 -0
  114. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_connection_pool.py +0 -0
  115. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_health.py +0 -0
  116. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_helpers.py +0 -0
  117. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_logging.py +0 -0
  118. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_metrics.py +0 -0
  119. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_models.py +0 -0
  120. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_rate_limiter.py +0 -0
  121. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/test_validation.py +0 -0
  122. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/__init__.py +0 -0
  123. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_cache.py +0 -0
  124. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_circuit_breaker.py +0 -0
  125. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_config_phase5.py +0 -0
  126. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_errors_phase5.py +0 -0
  127. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_export_import_service.py +0 -0
  128. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_export_ops.py +0 -0
  129. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_file_security.py +0 -0
  130. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_filesystem.py +0 -0
  131. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_hybrid_search_ops.py +0 -0
  132. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_import_ops.py +0 -0
  133. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_import_security.py +0 -0
  134. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_lancedb_repository_phase5.py +0 -0
  135. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_lifecycle_ops.py +0 -0
  136. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_lifecycle_service.py +0 -0
  137. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_memory_service.py +0 -0
  138. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_models_phase5.py +0 -0
  139. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_process_lock.py +0 -0
  140. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_security_facade.py +0 -0
  141. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_spatial_ops.py +0 -0
  142. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_spatial_service.py +0 -0
  143. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_stats_ops.py +0 -0
  144. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_tracing.py +0 -0
  145. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_utility_service.py +0 -0
  146. {spatial_memory_mcp-1.6.0 → spatial_memory_mcp-1.6.1}/tests/unit/test_utils.py +0 -0
@@ -0,0 +1,139 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Planned
11
+ - Medium severity architectural improvements (MED-ARCH-001 through MED-ARCH-004)
12
+ - Migration system (MED-DB-005)
13
+
14
+ ## [1.6.1] - 2026-02-02
15
+
16
+ ### Added
17
+ - `spatial-memory instructions` CLI command to view the MCP instructions injected into Claude's context
18
+
19
+ ### Changed
20
+ - Updated CLAUDE.md to be contributor documentation (removed stale claude-memory references)
21
+
22
+ ## [1.6.0] - 2026-02-02
23
+
24
+ ### Fixed
25
+
26
+ #### Critical Issues
27
+ - **CRIT-001**: Fixed consolidation data loss window - implemented add-before-delete pattern with pending status marker
28
+ - **CRIT-002**: Fixed journey N+1 query pattern - plumbed `include_vector` parameter through search pipeline
29
+
30
+ #### High Severity Issues
31
+ - **HIGH-001**: Fixed sequential DB calls in wander (resolved via CRIT-002)
32
+ - **HIGH-002**: Fixed O(n²) similarity calculation in visualize - replaced with `scipy.spatial.distance.cdist` vectorized operation
33
+ - **HIGH-003**: Fixed inefficient batch search - implemented native LanceDB batch search
34
+ - **HIGH-004**: Fixed duplicate embedding generation in extract - batch embed upfront with `embed_batch()`
35
+ - **HIGH-005**: Fixed sequential updates in decay - added `update_batch()` method
36
+ - **HIGH-006**: Fixed sequential fetches in reinforce - added `get_batch()` method
37
+ - **HIGH-007**: Fixed non-atomic batch insert - added `PartialBatchInsertError` with rollback capability
38
+ - **HIGH-008**: Fixed rename_namespace lacking rollback - track renamed IDs with `_rollback_namespace_rename()`
39
+ - **HIGH-009**: Fixed consolidation loading entire namespace - added streaming `_consolidate_chunked()`
40
+ - **HIGH-010**: Fixed file lock on NFS/SMB - added detection and startup warning
41
+
42
+ #### Medium Severity Issues
43
+ - **MED-SEC-002**: Fixed memory exhaustion in JSON/CSV export - implemented streaming export
44
+ - **MED-CQ-001**: Fixed `forget_batch` returning incorrect IDs
45
+ - **MED-CQ-002**: Added missing `backend` to `EmbeddingServiceProtocol`
46
+ - **MED-CQ-003**: Fixed rate limiter token consumption issue
47
+ - **MED-CQ-004**: Fixed embedding cache leak in batch operations
48
+ - **MED-DB-001**: Added missing index to idempotency table
49
+ - **MED-DB-003**: Fixed `get_namespace_stats()` loading all records
50
+ - **MED-DB-004**: Added vector dimension validation at insert
51
+
52
+ #### Low Severity Issues
53
+ - **LOW-001**: Made embedding cache size configurable (was hardcoded 1000)
54
+ - **LOW-002**: Standardized datetime handling in lifecycle.py
55
+ - **LOW-003**: Extracted magic numbers in retry logic to constants
56
+ - **LOW-004**: Added Literal type validation for `index_type`
57
+ - **LOW-006**: Fixed `validate_namespace` docstring mismatch
58
+ - **LOW-007**: Normalized mock embedding vectors in conftest.py
59
+ - **LOW-008**: Documented content validation security approach
60
+ - **LOW-009**: Added metadata depth validation
61
+ - **LOW-010**: Sanitized paths in error messages
62
+ - **LOW-011**: Added proactive connection health check
63
+ - **LOW-012**: Fixed `close()` to remove from connection pool
64
+ - **LOW-013**: Implemented auto-compaction scheduling
65
+ - **LOW-014**: Cached stop words set (was recreated per call)
66
+ - **LOW-015**: Improved cache key hashing
67
+
68
+ ### Added
69
+ - `get_batch()` method for bulk memory retrieval
70
+ - `update_batch()` method returning `(success_count, failed_ids)` tuple
71
+ - Native LanceDB batch vector search
72
+ - `PartialBatchInsertError` exception with `succeeded_ids` for recovery
73
+ - `atomic=True` parameter to `insert_batch()` with rollback capability
74
+ - Streaming consolidation with configurable `consolidate_chunk_size`
75
+ - NFS/SMB filesystem detection in `core/filesystem.py`
76
+ - Config option `acknowledge_network_filesystem_risk` to suppress warnings
77
+
78
+ ### Changed
79
+ - Refactored `database.py` into separate manager modules for maintainability
80
+ - Improved type safety across async operations
81
+
82
+ ### Closed (By Design)
83
+ - **MED-SEC-001**: No namespace-level authorization - single-developer local use is intended
84
+ - **MED-DB-002**: `get_namespaces()` loads all values - TTL caching is sufficient
85
+ - **LOW-005**: Duplicate local imports - intentional circular import avoidance
86
+
87
+ ## [0.1.0] - 2026-01-20
88
+
89
+ ### Added
90
+
91
+ #### Configuration System
92
+ - Pydantic-based settings with environment variable support
93
+ - Dependency injection pattern for testability
94
+ - Full configuration validation with bounds checking
95
+ - Support for `.env` files
96
+
97
+ #### Database Layer
98
+ - LanceDB integration for vector storage
99
+ - SQL injection prevention with pattern detection
100
+ - UUID validation for memory IDs
101
+ - Namespace format validation
102
+ - Atomic updates with rollback support
103
+
104
+ #### Embedding Service
105
+ - Local embedding support via sentence-transformers
106
+ - OpenAI API embedding support
107
+ - Dual-backend architecture with automatic routing
108
+ - Model: `all-MiniLM-L6-v2` (384 dimensions) as default
109
+
110
+ #### Data Models
111
+ - `Memory` - Core memory representation
112
+ - `MemoryResult` - Search result with similarity score
113
+ - `Filter` / `FilterGroup` - Query filtering system
114
+ - `ClusterInfo` - Cluster metadata for regions
115
+ - `JourneyStep` - Step in journey interpolation
116
+ - `VisualizationData` - Visualization output format
117
+
118
+ #### Error Handling
119
+ - Custom exception hierarchy
120
+ - `SpatialMemoryError` base class
121
+ - Specific errors: `MemoryNotFoundError`, `NamespaceNotFoundError`, `EmbeddingError`, `StorageError`, `ValidationError`, `ConfigurationError`, `ClusteringError`, `VisualizationError`
122
+
123
+ #### Testing
124
+ - 71 unit tests covering all Phase 1 components
125
+ - Pytest fixtures for isolated testing
126
+ - Mock embedding service for fast tests
127
+
128
+ #### Documentation
129
+ - README with project overview and roadmap
130
+ - Architecture diagrams (Mermaid)
131
+ - Security documentation
132
+ - Contributing guidelines
133
+ - Configuration reference (`.env.example`)
134
+
135
+ ### Security
136
+ - Input validation on all user-provided data
137
+ - SQL injection prevention
138
+ - Namespace isolation
139
+ - Sanitized error messages
@@ -0,0 +1,102 @@
1
+ # Spatial Memory MCP - Contributor Guide
2
+
3
+ This document helps AI assistants (and human contributors) work effectively on this codebase.
4
+
5
+ ## Project Overview
6
+
7
+ **spatial-memory-mcp** is a persistent semantic memory MCP server for LLMs. It provides vector-based memory storage with spatial navigation capabilities using LanceDB and sentence-transformers.
8
+
9
+ ## Architecture
10
+
11
+ ```
12
+ spatial_memory/
13
+ ├── server.py # MCP server, tool handlers, instructions injection
14
+ ├── factory.py # Dependency injection, service instantiation
15
+ ├── config.py # Settings (Pydantic), environment configuration
16
+ ├── core/ # Core infrastructure
17
+ │ ├── database.py # LanceDB wrapper, CRUD operations
18
+ │ ├── embeddings.py # Sentence-transformer embedding service
19
+ │ ├── models.py # Pydantic data models (Memory, etc.)
20
+ │ ├── errors.py # Exception hierarchy
21
+ │ ├── validation.py # Input validation, security checks
22
+ │ ├── security.py # Security utilities
23
+ │ ├── db_*.py # Database utilities (search, indexes, migrations)
24
+ │ └── spatial_ops.py # SLERP, vector operations
25
+ ├── services/ # Business logic layer
26
+ │ ├── memory.py # Core memory operations (remember, recall, forget)
27
+ │ ├── spatial.py # Spatial operations (journey, wander, regions)
28
+ │ ├── lifecycle.py # Decay, reinforce, consolidate, extract
29
+ │ ├── export_import.py# Import/export functionality
30
+ │ └── utility.py # Stats, namespaces, health
31
+ ├── adapters/ # External service adapters
32
+ ├── ports/ # Interface definitions
33
+ └── tools/ # MCP tool definitions
34
+ ```
35
+
36
+ ## Key Commands
37
+
38
+ ```bash
39
+ # Run tests (unit tests only by default)
40
+ pytest tests/ -v
41
+
42
+ # Run all tests including integration
43
+ pytest tests/ -v -m ""
44
+
45
+ # Run integration tests only
46
+ pytest tests/ -v -m integration
47
+
48
+ # Type checking
49
+ mypy spatial_memory/
50
+
51
+ # Linting
52
+ ruff check spatial_memory/ tests/
53
+
54
+ # Format code
55
+ ruff format spatial_memory/ tests/
56
+
57
+ # Run the server directly
58
+ python -m spatial_memory
59
+ ```
60
+
61
+ ## Test Markers
62
+
63
+ - `@pytest.mark.unit` - Fast tests with mocked dependencies
64
+ - `@pytest.mark.integration` - Tests with real database/embeddings (slower)
65
+ - `@pytest.mark.slow` - Tests taking >1 second
66
+ - `@pytest.mark.requires_model` - Tests needing the embedding model loaded
67
+
68
+ ## Configuration
69
+
70
+ Settings via environment variables or `.env` file:
71
+ - `SPATIAL_MEMORY_PATH` - Database storage location (default: `.spatial-memory/`)
72
+ - `SPATIAL_MEMORY_EMBEDDING_MODEL` - Model name (default: `all-MiniLM-L6-v2`)
73
+ - `SPATIAL_MEMORY_LOG_LEVEL` - Logging level
74
+ - See `config.py` and `.env.example` for full list
75
+
76
+ ## Code Style
77
+
78
+ - Line length: 100 characters
79
+ - Python 3.10+ (use modern syntax: `|` unions, etc.)
80
+ - Type hints required (strict mypy)
81
+ - Ruff for linting/formatting
82
+
83
+ ## Important Patterns
84
+
85
+ 1. **Dependency Injection**: Services receive dependencies via constructor, not global imports
86
+ 2. **Async Throughout**: All database and service methods are async
87
+ 3. **Pydantic Models**: Use for data validation and serialization
88
+ 4. **Error Hierarchy**: Custom exceptions in `core/errors.py`
89
+
90
+ ## MCP Tool Categories
91
+
92
+ The server exposes these tool groups:
93
+ - **Memory**: `remember`, `recall`, `hybrid_recall`, `nearby`, `forget`
94
+ - **Spatial**: `journey`, `wander`, `regions`, `visualize`
95
+ - **Lifecycle**: `decay`, `reinforce`, `extract`, `consolidate`
96
+ - **Admin**: `stats`, `namespaces`, `export_memories`, `import_memories`
97
+
98
+ ## Notes
99
+
100
+ - MCP server instructions are auto-injected via `_get_server_instructions()` in `server.py`
101
+ - Database uses LanceDB (embedded vector database)
102
+ - Embeddings default to ONNX-optimized sentence-transformers for performance
@@ -1,8 +1,8 @@
1
1
  # Spatial Memory MCP - Issues Tracker
2
2
 
3
3
  > Generated: 2026-02-01
4
- > Status: **All Phases Complete**
5
- > Last Updated: 2026-02-01
4
+ > Status: **All Phases Complete - Released v1.6.0**
5
+ > Last Updated: 2026-02-02
6
6
 
7
7
  ---
8
8
 
@@ -279,6 +279,7 @@ Remaining backlog items are Medium severity architectural improvements (refactor
279
279
  | 2026-02-01 | Phase 4 | ✅ Implemented MED-SEC-002, MED-CQ-001-004, MED-DB-001, MED-DB-003, MED-DB-004 | Claude |
280
280
  | 2026-02-01 | Phase 5 | ✅ Implemented LOW-001, LOW-003, LOW-014, LOW-015 | Claude |
281
281
  | 2026-02-01 | All | **All phases complete** - 1360 tests passing | Claude |
282
+ | 2026-02-02 | All | **Released v1.6.0** - Pushed to repository | User |
282
283
  | 2026-02-01 | Phase A-C Backlog | ✅ Implemented remaining Low severity issues: | Claude |
283
284
  | | LOW-002 | Standardized datetime handling in lifecycle.py | |
284
285
  | | LOW-004 | Added Literal type validation for index_type | |
@@ -40,7 +40,7 @@ The result? Developers interact with an AI that genuinely remembers—without wr
40
40
 
41
41
  ## This Is Not Storage. This Is Cognitive Architecture.
42
42
 
43
- Traditional vector databases store embeddings. Spatial Memory MCP implements a cognitive memory model inspired by human memory research.
43
+ Traditional vector databases store embeddings. Spatial Memory MCP implements a cognitive memory model inspired by established memory research (see [References](#references)).
44
44
 
45
45
  ### Memory Decay (Ebbinghaus Forgetting Curve)
46
46
  Memories fade over time if not accessed—just like human memory. Choose exponential, linear, or step decay functions. Set half-life periods. Define importance floors. Memories that matter persist. Memories that don't, gracefully fade.
@@ -80,7 +80,7 @@ Project your memories into 2D or 3D space. Export as JSON, Mermaid diagrams, or
80
80
 
81
81
  ---
82
82
 
83
- ## 21 Tools. Complete Lifecycle Management.
83
+ ## 22 Tools. Complete Lifecycle Management.
84
84
 
85
85
  | Category | Spatial Memory MCP | Typical Competitor |
86
86
  |----------|-------------------|-------------------|
@@ -93,7 +93,7 @@ Project your memories into 2D or 3D space. Export as JSON, Mermaid diagrams, or
93
93
  | Data Portability | export_memories, import_memories | None |
94
94
  | Administration | stats, health | Minimal |
95
95
 
96
- **21 production-ready tools** covering the complete memory lifecycle—from ingestion to navigation to maintenance to export.
96
+ **22 production-ready tools** covering the complete memory lifecycle—from ingestion to navigation to maintenance to export.
97
97
 
98
98
  ---
99
99
 
@@ -116,9 +116,16 @@ Search for "authentication error handling" and find both semantically related se
116
116
  Production deployment demands production infrastructure.
117
117
 
118
118
  ### Connection Management
119
- - **Connection pooling** with LRU eviction
119
+ - **Connection pooling** with LRU eviction and health checks
120
120
  - **Cross-process file locking** for multi-instance safety
121
121
  - **Circuit breaker pattern** prevents cascade failures
122
+ - **NFS/SMB detection** warns about shared filesystem risks
123
+
124
+ ### Data Integrity
125
+ - **Atomic batch operations** with rollback on failure
126
+ - **Add-before-delete pattern** prevents data loss during consolidation
127
+ - **Namespace rename rollback** recovers from partial failures
128
+ - **Streaming consolidation** handles large namespaces safely
122
129
 
123
130
  ### Observability
124
131
  - **Request tracing** with correlation IDs
@@ -128,7 +135,7 @@ Production deployment demands production infrastructure.
128
135
 
129
136
  ### Security
130
137
  - **Path traversal prevention** — No filesystem escapes
131
- - **SQL injection detection** — 15+ attack patterns blocked
138
+ - **SQL injection detection** — 13 patterns covering major attack vectors
132
139
  - **Input validation** — Pydantic models throughout
133
140
  - **Credential masking** — Sensitive data never logged
134
141
  - **Dry-run modes** — Preview destructive operations safely
@@ -155,7 +162,7 @@ Auto-indexing triggers at 10K+ memories using IVF_PQ. Sub-linear search complexi
155
162
 
156
163
  | Feature | Spatial Memory MCP | mcp-mem0 | mcp-memory-service | Memory Bank MCP |
157
164
  |---------|-------------------|----------|-------------------|-----------------|
158
- | Total Tools | 21 | 3 | ~6 | ~5 |
165
+ | Total Tools | 22 | 3 | ~6 | ~5 |
159
166
  | Spatial Navigation | Yes | No | No | No |
160
167
  | Memory Decay | Yes | No | No | No |
161
168
  | Reinforcement | Yes | No | No | No |
@@ -165,8 +172,8 @@ Auto-indexing triggers at 10K+ memories using IVF_PQ. Sub-linear search complexi
165
172
  | SLERP Interpolation | Yes | No | No | No |
166
173
  | Visualization | Yes | No | No | No |
167
174
  | Enterprise Features | Full Suite | Minimal | Basic | Basic |
168
- | External Dependencies | SQLite only | PostgreSQL | Varies | File-based |
169
- | Test Coverage | 1,094 tests | Minimal | Unknown | Unknown |
175
+ | External Dependencies | None (embedded) | PostgreSQL | Varies | File-based |
176
+ | Test Coverage | 1,360 tests | Minimal | Unknown | Unknown |
170
177
 
171
178
  **mcp-mem0**: 3 tools, 4 commits, requires PostgreSQL infrastructure.
172
179
 
@@ -197,15 +204,15 @@ Navigate between concepts. Discover intermediate ideas. Visualize knowledge stru
197
204
  ## Technical Specifications
198
205
 
199
206
  - **Language**: Python 3.10+
200
- - **Database**: SQLite with LanceDB for vectors
207
+ - **Database**: LanceDB (embedded vector database)
201
208
  - **Embedding**: ONNX Runtime with all-MiniLM-L6-v2
202
209
  - **Clustering**: HDBSCAN
203
210
  - **Projection**: UMAP
204
211
  - **Interpolation**: SLERP (Spherical Linear Interpolation)
205
212
  - **Architecture**: Clean architecture with dependency injection
206
213
  - **Type Safety**: Full type hints, mypy strict mode
207
- - **Test Suite**: 1,094 passing tests
208
- - **Development**: 5 completed phases
214
+ - **Test Suite**: 1,360 passing tests
215
+ - **Version**: 1.6.0
209
216
 
210
217
  ---
211
218
 
@@ -239,6 +246,18 @@ And it does all of this with zero cognitive load on developers. Claude handles m
239
246
 
240
247
  ---
241
248
 
249
+ ## References
250
+
251
+ The cognitive memory model is inspired by established research:
252
+
253
+ 1. **Ebbinghaus, H. (1885)**. *Memory: A Contribution to Experimental Psychology*. The foundational research on the forgetting curve showing how memory retention decays exponentially over time. [Read the translation](https://psychclassics.yorku.ca/Ebbinghaus/index.htm)
254
+
255
+ 2. **Settles, B. & Meeder, B. (2016)**. *A Trainable Spaced Repetition Model for Language Learning*. Duolingo's half-life regression (HLR) algorithm for optimizing memory retention. [ACL Anthology](https://aclanthology.org/P16-1174/)
256
+
257
+ 3. **FSRS Algorithm**. Free Spaced Repetition Scheduler - a modern open-source algorithm for optimizing review intervals based on memory research. [GitHub](https://github.com/open-spaced-repetition/fsrs4anki)
258
+
259
+ ---
260
+
242
261
  **Spatial Memory MCP**
243
262
 
244
263
  *Knowledge as a navigable landscape, not a filing cabinet.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spatial-memory-mcp
3
- Version: 1.6.0
3
+ Version: 1.6.1
4
4
  Summary: Spatial bidirectional persistent memory MCP server for LLMs - vector-based semantic memory as a navigable landscape
5
5
  Project-URL: Homepage, https://github.com/arman-tech/spatial-memory-mcp
6
6
  Project-URL: Repository, https://github.com/arman-tech/spatial-memory-mcp
@@ -42,9 +42,13 @@ Description-Content-Type: text/markdown
42
42
 
43
43
  # Spatial Memory MCP Server
44
44
 
45
+ [![PyPI version](https://badge.fury.io/py/spatial-memory-mcp.svg)](https://pypi.org/project/spatial-memory-mcp/)
46
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
47
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
48
+
45
49
  A vector-based spatial memory system that treats knowledge as a navigable landscape, not a filing cabinet.
46
50
 
47
- > **Project Status**: All phases complete. Production-ready with 1360 tests passing.
51
+ > **Version 1.6.1** Production-ready with 1,360 tests passing.
48
52
 
49
53
  ## Supported Platforms
50
54
 
@@ -91,7 +95,7 @@ Navigate knowledge like a landscape, not a filing cabinet:
91
95
  | **Regions** | HDBSCAN clustering—see how your knowledge self-organizes |
92
96
  | **Visualize** | UMAP projection—view your memory space in 2D/3D |
93
97
 
94
- ### 21 Tools vs. 3-6 in Competitors
98
+ ### 22 Tools vs. 3-6 in Competitors
95
99
  Full lifecycle management: core operations, spatial navigation, memory lifecycle, hybrid search, namespace management, data import/export, and health/stats monitoring.
96
100
 
97
101
  ### Enterprise-Ready
@@ -101,7 +105,7 @@ Connection pooling, circuit breakers, per-agent rate limiting, request tracing,
101
105
 
102
106
  ## Features
103
107
 
104
- - **21 MCP tools** across 4 categories (core, spatial, lifecycle, utility)
108
+ - **22 MCP tools** across 4 categories (core, spatial, lifecycle, utility)
105
109
  - **Clean Architecture** with ports/adapters pattern for testability
106
110
  - **LanceDB** vector storage with automatic indexing
107
111
  - **Dual embedding support**: Local (sentence-transformers) or OpenAI API
@@ -119,10 +123,19 @@ Connection pooling, circuit breakers, per-agent rate limiting, request tracing,
119
123
  | Phase 3: Spatial Operations | Complete | `journey`, `wander`, `regions`, `visualize` |
120
124
  | Phase 4: Lifecycle Operations | Complete | `consolidate`, `extract`, `decay`, `reinforce` |
121
125
  | Phase 5: Utilities | Complete | `stats`, `namespaces`, `export`, `import`, `hybrid_recall` |
122
- | Phase 6: Polish & Release | In Progress | PyPI release pending |
126
+ | Phase 6: Polish & Release | Complete | v1.6.0 on PyPI |
123
127
 
124
128
  ## Installation
125
129
 
130
+ ### From PyPI (Recommended)
131
+
132
+ ```bash
133
+ pip install spatial-memory-mcp
134
+
135
+ # Or with uv
136
+ uv pip install spatial-memory-mcp
137
+ ```
138
+
126
139
  ### Development Setup
127
140
 
128
141
  ```bash
@@ -134,6 +147,10 @@ pip install -e ".[dev]"
134
147
  ### With OpenAI Support
135
148
 
136
149
  ```bash
150
+ # From PyPI
151
+ pip install spatial-memory-mcp[openai]
152
+
153
+ # From source
137
154
  pip install -e ".[dev,openai]"
138
155
  ```
139
156
 
@@ -166,6 +183,28 @@ If ONNX shows as unavailable, reinstall with:
166
183
  pip install --force-reinstall "sentence-transformers[onnx]"
167
184
  ```
168
185
 
186
+ ### CLI Commands
187
+
188
+ The `spatial-memory` CLI provides several commands:
189
+
190
+ ```bash
191
+ # Start the MCP server (default)
192
+ spatial-memory serve
193
+
194
+ # View the MCP instructions injected into Claude's context
195
+ spatial-memory instructions
196
+
197
+ # Run database migrations
198
+ spatial-memory migrate --status # Check migration status
199
+ spatial-memory migrate --dry-run # Preview migrations
200
+ spatial-memory migrate # Apply pending migrations
201
+
202
+ # Show version
203
+ spatial-memory --version
204
+ ```
205
+
206
+ The `instructions` command is useful for understanding what behavioral guidelines are automatically injected when the MCP server connects to Claude.
207
+
169
208
  ### Optional Performance Dependencies
170
209
 
171
210
  For best performance, install these optional dependencies:
@@ -257,7 +296,7 @@ Add to your Claude Desktop config (`claude_desktop_config.json`):
257
296
  }
258
297
  ```
259
298
 
260
- ## Available Tools (21 Total)
299
+ ## Available Tools (22 Total)
261
300
 
262
301
  For complete API documentation including parameters, return types, and examples, see [docs/API.md](docs/API.md).
263
302
 
@@ -301,6 +340,7 @@ For complete API documentation including parameters, return types, and examples,
301
340
  | `export_memories` | Export memories to Parquet, JSON, or CSV format |
302
341
  | `import_memories` | Import memories from exported files with validation |
303
342
  | `hybrid_recall` | Combined vector + full-text search with configurable weighting |
343
+ | `health` | Check system health status |
304
344
 
305
345
  ## Tool Examples
306
346
 
@@ -348,7 +388,7 @@ Export all memories to parquet format
348
388
 
349
389
  - **Path Traversal Prevention**: All file operations validate paths against allowed directories
350
390
  - **Symlink Attack Protection**: Optional symlink blocking for sensitive environments
351
- - **SQL Injection Prevention**: 15+ dangerous patterns detected and blocked
391
+ - **SQL Injection Prevention**: 13 patterns covering major attack vectors
352
392
  - **Input Validation**: Pydantic models validate all inputs
353
393
  - **Error Sanitization**: Internal errors return reference IDs, not stack traces
354
394
  - **Secure Credential Handling**: API keys stored as SecretStr
@@ -418,7 +458,7 @@ See [SPATIAL-MEMORY-ARCHITECTURE-DIAGRAMS.md](SPATIAL-MEMORY-ARCHITECTURE-DIAGRA
418
458
 
419
459
  | Document | Description |
420
460
  |----------|-------------|
421
- | [docs/API.md](docs/API.md) | Complete API reference for all 21 tools |
461
+ | [docs/API.md](docs/API.md) | Complete API reference for all 22 tools |
422
462
  | [docs/BENCHMARKS.md](docs/BENCHMARKS.md) | Performance benchmarks and test results |
423
463
  | [docs/METRICS.md](docs/METRICS.md) | Prometheus metrics documentation |
424
464
  | [docs/troubleshooting.md](docs/troubleshooting.md) | Troubleshooting guide |
@@ -450,7 +490,9 @@ For security vulnerabilities, please email directly rather than opening a public
450
490
 
451
491
  ## For Claude Code Users
452
492
 
453
- This project includes [CLAUDE.md](CLAUDE.md) with instructions for the Claude Code AI assistant to interact with the memory system.
493
+ When the MCP server connects, behavioral instructions are **automatically injected** into Claude's context—no configuration needed. Run `spatial-memory instructions` to view what gets injected.
494
+
495
+ For contributors working on this codebase, [CLAUDE.md](CLAUDE.md) provides project-specific guidance for AI assistants.
454
496
 
455
497
  ## License
456
498
 
@@ -1,8 +1,12 @@
1
1
  # Spatial Memory MCP Server
2
2
 
3
+ [![PyPI version](https://badge.fury.io/py/spatial-memory-mcp.svg)](https://pypi.org/project/spatial-memory-mcp/)
4
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
3
7
  A vector-based spatial memory system that treats knowledge as a navigable landscape, not a filing cabinet.
4
8
 
5
- > **Project Status**: All phases complete. Production-ready with 1360 tests passing.
9
+ > **Version 1.6.1** Production-ready with 1,360 tests passing.
6
10
 
7
11
  ## Supported Platforms
8
12
 
@@ -49,7 +53,7 @@ Navigate knowledge like a landscape, not a filing cabinet:
49
53
  | **Regions** | HDBSCAN clustering—see how your knowledge self-organizes |
50
54
  | **Visualize** | UMAP projection—view your memory space in 2D/3D |
51
55
 
52
- ### 21 Tools vs. 3-6 in Competitors
56
+ ### 22 Tools vs. 3-6 in Competitors
53
57
  Full lifecycle management: core operations, spatial navigation, memory lifecycle, hybrid search, namespace management, data import/export, and health/stats monitoring.
54
58
 
55
59
  ### Enterprise-Ready
@@ -59,7 +63,7 @@ Connection pooling, circuit breakers, per-agent rate limiting, request tracing,
59
63
 
60
64
  ## Features
61
65
 
62
- - **21 MCP tools** across 4 categories (core, spatial, lifecycle, utility)
66
+ - **22 MCP tools** across 4 categories (core, spatial, lifecycle, utility)
63
67
  - **Clean Architecture** with ports/adapters pattern for testability
64
68
  - **LanceDB** vector storage with automatic indexing
65
69
  - **Dual embedding support**: Local (sentence-transformers) or OpenAI API
@@ -77,10 +81,19 @@ Connection pooling, circuit breakers, per-agent rate limiting, request tracing,
77
81
  | Phase 3: Spatial Operations | Complete | `journey`, `wander`, `regions`, `visualize` |
78
82
  | Phase 4: Lifecycle Operations | Complete | `consolidate`, `extract`, `decay`, `reinforce` |
79
83
  | Phase 5: Utilities | Complete | `stats`, `namespaces`, `export`, `import`, `hybrid_recall` |
80
- | Phase 6: Polish & Release | In Progress | PyPI release pending |
84
+ | Phase 6: Polish & Release | Complete | v1.6.0 on PyPI |
81
85
 
82
86
  ## Installation
83
87
 
88
+ ### From PyPI (Recommended)
89
+
90
+ ```bash
91
+ pip install spatial-memory-mcp
92
+
93
+ # Or with uv
94
+ uv pip install spatial-memory-mcp
95
+ ```
96
+
84
97
  ### Development Setup
85
98
 
86
99
  ```bash
@@ -92,6 +105,10 @@ pip install -e ".[dev]"
92
105
  ### With OpenAI Support
93
106
 
94
107
  ```bash
108
+ # From PyPI
109
+ pip install spatial-memory-mcp[openai]
110
+
111
+ # From source
95
112
  pip install -e ".[dev,openai]"
96
113
  ```
97
114
 
@@ -124,6 +141,28 @@ If ONNX shows as unavailable, reinstall with:
124
141
  pip install --force-reinstall "sentence-transformers[onnx]"
125
142
  ```
126
143
 
144
+ ### CLI Commands
145
+
146
+ The `spatial-memory` CLI provides several commands:
147
+
148
+ ```bash
149
+ # Start the MCP server (default)
150
+ spatial-memory serve
151
+
152
+ # View the MCP instructions injected into Claude's context
153
+ spatial-memory instructions
154
+
155
+ # Run database migrations
156
+ spatial-memory migrate --status # Check migration status
157
+ spatial-memory migrate --dry-run # Preview migrations
158
+ spatial-memory migrate # Apply pending migrations
159
+
160
+ # Show version
161
+ spatial-memory --version
162
+ ```
163
+
164
+ The `instructions` command is useful for understanding what behavioral guidelines are automatically injected when the MCP server connects to Claude.
165
+
127
166
  ### Optional Performance Dependencies
128
167
 
129
168
  For best performance, install these optional dependencies:
@@ -215,7 +254,7 @@ Add to your Claude Desktop config (`claude_desktop_config.json`):
215
254
  }
216
255
  ```
217
256
 
218
- ## Available Tools (21 Total)
257
+ ## Available Tools (22 Total)
219
258
 
220
259
  For complete API documentation including parameters, return types, and examples, see [docs/API.md](docs/API.md).
221
260
 
@@ -259,6 +298,7 @@ For complete API documentation including parameters, return types, and examples,
259
298
  | `export_memories` | Export memories to Parquet, JSON, or CSV format |
260
299
  | `import_memories` | Import memories from exported files with validation |
261
300
  | `hybrid_recall` | Combined vector + full-text search with configurable weighting |
301
+ | `health` | Check system health status |
262
302
 
263
303
  ## Tool Examples
264
304
 
@@ -306,7 +346,7 @@ Export all memories to parquet format
306
346
 
307
347
  - **Path Traversal Prevention**: All file operations validate paths against allowed directories
308
348
  - **Symlink Attack Protection**: Optional symlink blocking for sensitive environments
309
- - **SQL Injection Prevention**: 15+ dangerous patterns detected and blocked
349
+ - **SQL Injection Prevention**: 13 patterns covering major attack vectors
310
350
  - **Input Validation**: Pydantic models validate all inputs
311
351
  - **Error Sanitization**: Internal errors return reference IDs, not stack traces
312
352
  - **Secure Credential Handling**: API keys stored as SecretStr
@@ -376,7 +416,7 @@ See [SPATIAL-MEMORY-ARCHITECTURE-DIAGRAMS.md](SPATIAL-MEMORY-ARCHITECTURE-DIAGRA
376
416
 
377
417
  | Document | Description |
378
418
  |----------|-------------|
379
- | [docs/API.md](docs/API.md) | Complete API reference for all 21 tools |
419
+ | [docs/API.md](docs/API.md) | Complete API reference for all 22 tools |
380
420
  | [docs/BENCHMARKS.md](docs/BENCHMARKS.md) | Performance benchmarks and test results |
381
421
  | [docs/METRICS.md](docs/METRICS.md) | Prometheus metrics documentation |
382
422
  | [docs/troubleshooting.md](docs/troubleshooting.md) | Troubleshooting guide |
@@ -408,7 +448,9 @@ For security vulnerabilities, please email directly rather than opening a public
408
448
 
409
449
  ## For Claude Code Users
410
450
 
411
- This project includes [CLAUDE.md](CLAUDE.md) with instructions for the Claude Code AI assistant to interact with the memory system.
451
+ When the MCP server connects, behavioral instructions are **automatically injected** into Claude's context—no configuration needed. Run `spatial-memory instructions` to view what gets injected.
452
+
453
+ For contributors working on this codebase, [CLAUDE.md](CLAUDE.md) provides project-specific guidance for AI assistants.
412
454
 
413
455
  ## License
414
456
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "spatial-memory-mcp"
3
- version = "1.6.0"
3
+ version = "1.6.1"
4
4
  description = "Spatial bidirectional persistent memory MCP server for LLMs - vector-based semantic memory as a navigable landscape"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  """Spatial Memory MCP Server - Vector-based semantic memory for LLMs."""
2
2
 
3
- __version__ = "1.6.0"
3
+ __version__ = "1.6.1"
4
4
  __author__ = "arman-tech"
5
5
 
6
6
  # Re-export core components for convenience