hermes-plugin-qdrant-memory 0.2.1__tar.gz → 0.2.2__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.
Files changed (70) hide show
  1. {hermes_plugin_qdrant_memory-0.2.1/hermes_plugin_qdrant_memory.egg-info → hermes_plugin_qdrant_memory-0.2.2}/PKG-INFO +12 -10
  2. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/README.md +10 -8
  3. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2/hermes_plugin_qdrant_memory.egg-info}/PKG-INFO +12 -10
  4. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/hermes_plugin_qdrant_memory.egg-info/requires.txt +1 -1
  5. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/pyproject.toml +3 -3
  6. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/mcp_server.py +19 -6
  7. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/plugin.yaml +1 -1
  8. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/version.py +1 -1
  9. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_ci_gate.py +8 -5
  10. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/LICENSE +0 -0
  11. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/MANIFEST.in +0 -0
  12. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/hermes_plugin_qdrant_memory.egg-info/SOURCES.txt +0 -0
  13. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/hermes_plugin_qdrant_memory.egg-info/dependency_links.txt +0 -0
  14. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/hermes_plugin_qdrant_memory.egg-info/entry_points.txt +0 -0
  15. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/hermes_plugin_qdrant_memory.egg-info/top_level.txt +0 -0
  16. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/__init__.py +0 -0
  17. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/cli.py +0 -0
  18. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/config.py +0 -0
  19. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/config_schema.py +0 -0
  20. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/dedupe.py +0 -0
  21. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/embedding.py +0 -0
  22. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/extraction.py +0 -0
  23. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/inventory.py +0 -0
  24. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/ledger.py +0 -0
  25. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/migration.py +0 -0
  26. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/models.py +0 -0
  27. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/ownership.py +0 -0
  28. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/progress.py +0 -0
  29. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/provider.py +0 -0
  30. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/qdrant_store.py +0 -0
  31. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/reset.py +0 -0
  32. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/retry.py +0 -0
  33. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/runtime.py +0 -0
  34. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/standalone.py +0 -0
  35. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/qdrant_memory/tools.py +0 -0
  36. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/scripts/demo.sh +0 -0
  37. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/setup.cfg +0 -0
  38. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_backend_contracts.py +0 -0
  39. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_bot_scope.py +0 -0
  40. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_bounded_recovery.py +0 -0
  41. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_checkpoint_lifecycle.py +0 -0
  42. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_cli_output.py +0 -0
  43. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_config_embedding.py +0 -0
  44. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_deletion_ordering.py +0 -0
  45. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_discovery_cli.py +0 -0
  46. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_explicit_dedupe.py +0 -0
  47. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_host_lifecycle.py +0 -0
  48. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_input_validation.py +0 -0
  49. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_inventory_export.py +0 -0
  50. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_live_metrics.py +0 -0
  51. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_maintenance.py +0 -0
  52. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_manifest_contract.py +0 -0
  53. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_migration.py +0 -0
  54. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_migration_endpoints.py +0 -0
  55. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_migration_progress.py +0 -0
  56. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_migration_resume.py +0 -0
  57. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_migration_superseded.py +0 -0
  58. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_profile_scope.py +0 -0
  59. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_provider.py +0 -0
  60. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_recovery_benchmark.py +0 -0
  61. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_recovery_evaluation.py +0 -0
  62. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_remote_qdrant.py +0 -0
  63. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_reset_recovery.py +0 -0
  64. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_retention.py +0 -0
  65. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_review_regressions.py +0 -0
  66. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_session_provenance.py +0 -0
  67. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_setup_contract.py +0 -0
  68. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_shutdown_contract.py +0 -0
  69. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_store_runtime.py +0 -0
  70. {hermes_plugin_qdrant_memory-0.2.1 → hermes_plugin_qdrant_memory-0.2.2}/tests/test_writer_ownership.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hermes-plugin-qdrant-memory
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Durable Qdrant memory for Hermes, standalone CLI and local MCP
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/cnkang/hermes-plugin-qdrant-memory
@@ -16,7 +16,7 @@ Requires-Dist: qdrant-client<2,>=1.15
16
16
  Requires-Dist: httpx<1,>=0.28
17
17
  Requires-Dist: portalocker<4,>=3.2
18
18
  Provides-Extra: mcp
19
- Requires-Dist: mcp<2,>=1.30; extra == "mcp"
19
+ Requires-Dist: mcp<3,>=1.30; extra == "mcp"
20
20
  Dynamic: license-file
21
21
 
22
22
  # Qdrant Memory for Hermes
@@ -28,11 +28,12 @@ Dynamic: license-file
28
28
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
29
29
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
30
30
 
31
- > **Runtime 0.2.1** provides the standalone CLI/MCP and fixes explicit writes of
32
- > distinct, highly similar texts. MCP distribution 0.1.1 pins Runtime 0.2.1.
31
+ > **Runtime 0.2.2** supports MCP Python SDK 1.x and 2.x for the standalone
32
+ > CLI/MCP. MCP distribution 0.1.2 pins Runtime 0.2.2. Explicit writes retain
33
+ > canonical-text deduplication without an LLM.
33
34
  > The Hermes Plugin Catalog has its own reviewed immutable pin. A PyPI release
34
35
  > does not upgrade it. One writer per destination remains required.
35
- > See [release notes](docs/releases/0.2.1.md) and [validation](docs/validation.md).
36
+ > See [release notes](docs/releases/0.2.2.md) and [validation](docs/validation.md).
36
37
 
37
38
  [English](README.md) | [简体中文](README.zh-CN.md)
38
39
 
@@ -47,7 +48,7 @@ as a community-maintained plugin.
47
48
  ## How it works
48
49
 
49
50
  For non-Hermes users, install in a private Python 3.11+
50
- environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.2.1'` (omit `[mcp]`
51
+ environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.2.2'` (omit `[mcp]`
51
52
  for CLI only). `qdrant-memory` is the CLI and `mcp` is its server subcommand.
52
53
  Standalone does not require Hermes. See [setup and quick start](docs/standalone.md).
53
54
  MCP-focused agents may instead use the [metadata-only distribution](https://github.com/cnkang/qdrant-memory-mcp).
@@ -140,9 +141,10 @@ The install resolves the catalog's reviewed commit and prints the entry's declar
140
141
  tools, requirements and known issues before it clones anything.
141
142
  `hermes plugins enable` prepares the declared dependencies through Hermes PM.
142
143
 
143
- **Version-locked: install the verified Runtime 0.2.1 source through the Hermes CLI.**
144
+ **Version-locked: install the verified Runtime 0.2.2 source through the Hermes CLI.**
144
145
 
145
- This immutable source revision includes the explicit-write fix. It does not
146
+ This immutable source revision includes MCP SDK 1.x/2.x support and the
147
+ explicit-write fix. It does not
146
148
  depend on a PyPI release or a catalog update.
147
149
 
148
150
  ```bash
@@ -150,7 +152,7 @@ export HERMES_HOME="/absolute/path/to/your/hermes-profile"
150
152
  ollama pull qwen3-embedding:4b
151
153
  # Start Ollama if it is not running. Keep its service available.
152
154
  hermes plugins install https://github.com/cnkang/hermes-plugin-qdrant-memory \
153
- --ref 8929693fcccd1efa91bfa062145e35d2369ca9cc # verified Runtime 0.2.1 source
155
+ --ref 2fd43ad2259bd98d039394b8b714e5e89b5ab3a8 # verified Runtime 0.2.2 source
154
156
  hermes plugins enable qdrant-memory
155
157
  hermes memory setup
156
158
  hermes config set memory.provider qdrant-memory
@@ -167,7 +169,7 @@ environment. Omit `--ref` to track `main`, the development line.
167
169
  **Historical release: clone a published tag manually.**
168
170
 
169
171
  The v0.1.0 tag below predates the standalone interfaces and the explicit-write
170
- fix. Use the pinned source above for Runtime 0.2.1.
172
+ fix. Use the pinned source above for Runtime 0.2.2.
171
173
 
172
174
  ```bash
173
175
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -7,11 +7,12 @@
7
7
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
8
8
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
9
9
 
10
- > **Runtime 0.2.1** provides the standalone CLI/MCP and fixes explicit writes of
11
- > distinct, highly similar texts. MCP distribution 0.1.1 pins Runtime 0.2.1.
10
+ > **Runtime 0.2.2** supports MCP Python SDK 1.x and 2.x for the standalone
11
+ > CLI/MCP. MCP distribution 0.1.2 pins Runtime 0.2.2. Explicit writes retain
12
+ > canonical-text deduplication without an LLM.
12
13
  > The Hermes Plugin Catalog has its own reviewed immutable pin. A PyPI release
13
14
  > does not upgrade it. One writer per destination remains required.
14
- > See [release notes](docs/releases/0.2.1.md) and [validation](docs/validation.md).
15
+ > See [release notes](docs/releases/0.2.2.md) and [validation](docs/validation.md).
15
16
 
16
17
  [English](README.md) | [简体中文](README.zh-CN.md)
17
18
 
@@ -26,7 +27,7 @@ as a community-maintained plugin.
26
27
  ## How it works
27
28
 
28
29
  For non-Hermes users, install in a private Python 3.11+
29
- environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.2.1'` (omit `[mcp]`
30
+ environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.2.2'` (omit `[mcp]`
30
31
  for CLI only). `qdrant-memory` is the CLI and `mcp` is its server subcommand.
31
32
  Standalone does not require Hermes. See [setup and quick start](docs/standalone.md).
32
33
  MCP-focused agents may instead use the [metadata-only distribution](https://github.com/cnkang/qdrant-memory-mcp).
@@ -119,9 +120,10 @@ The install resolves the catalog's reviewed commit and prints the entry's declar
119
120
  tools, requirements and known issues before it clones anything.
120
121
  `hermes plugins enable` prepares the declared dependencies through Hermes PM.
121
122
 
122
- **Version-locked: install the verified Runtime 0.2.1 source through the Hermes CLI.**
123
+ **Version-locked: install the verified Runtime 0.2.2 source through the Hermes CLI.**
123
124
 
124
- This immutable source revision includes the explicit-write fix. It does not
125
+ This immutable source revision includes MCP SDK 1.x/2.x support and the
126
+ explicit-write fix. It does not
125
127
  depend on a PyPI release or a catalog update.
126
128
 
127
129
  ```bash
@@ -129,7 +131,7 @@ export HERMES_HOME="/absolute/path/to/your/hermes-profile"
129
131
  ollama pull qwen3-embedding:4b
130
132
  # Start Ollama if it is not running. Keep its service available.
131
133
  hermes plugins install https://github.com/cnkang/hermes-plugin-qdrant-memory \
132
- --ref 8929693fcccd1efa91bfa062145e35d2369ca9cc # verified Runtime 0.2.1 source
134
+ --ref 2fd43ad2259bd98d039394b8b714e5e89b5ab3a8 # verified Runtime 0.2.2 source
133
135
  hermes plugins enable qdrant-memory
134
136
  hermes memory setup
135
137
  hermes config set memory.provider qdrant-memory
@@ -146,7 +148,7 @@ environment. Omit `--ref` to track `main`, the development line.
146
148
  **Historical release: clone a published tag manually.**
147
149
 
148
150
  The v0.1.0 tag below predates the standalone interfaces and the explicit-write
149
- fix. Use the pinned source above for Runtime 0.2.1.
151
+ fix. Use the pinned source above for Runtime 0.2.2.
150
152
 
151
153
  ```bash
152
154
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hermes-plugin-qdrant-memory
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Durable Qdrant memory for Hermes, standalone CLI and local MCP
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/cnkang/hermes-plugin-qdrant-memory
@@ -16,7 +16,7 @@ Requires-Dist: qdrant-client<2,>=1.15
16
16
  Requires-Dist: httpx<1,>=0.28
17
17
  Requires-Dist: portalocker<4,>=3.2
18
18
  Provides-Extra: mcp
19
- Requires-Dist: mcp<2,>=1.30; extra == "mcp"
19
+ Requires-Dist: mcp<3,>=1.30; extra == "mcp"
20
20
  Dynamic: license-file
21
21
 
22
22
  # Qdrant Memory for Hermes
@@ -28,11 +28,12 @@ Dynamic: license-file
28
28
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
29
29
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
30
30
 
31
- > **Runtime 0.2.1** provides the standalone CLI/MCP and fixes explicit writes of
32
- > distinct, highly similar texts. MCP distribution 0.1.1 pins Runtime 0.2.1.
31
+ > **Runtime 0.2.2** supports MCP Python SDK 1.x and 2.x for the standalone
32
+ > CLI/MCP. MCP distribution 0.1.2 pins Runtime 0.2.2. Explicit writes retain
33
+ > canonical-text deduplication without an LLM.
33
34
  > The Hermes Plugin Catalog has its own reviewed immutable pin. A PyPI release
34
35
  > does not upgrade it. One writer per destination remains required.
35
- > See [release notes](docs/releases/0.2.1.md) and [validation](docs/validation.md).
36
+ > See [release notes](docs/releases/0.2.2.md) and [validation](docs/validation.md).
36
37
 
37
38
  [English](README.md) | [简体中文](README.zh-CN.md)
38
39
 
@@ -47,7 +48,7 @@ as a community-maintained plugin.
47
48
  ## How it works
48
49
 
49
50
  For non-Hermes users, install in a private Python 3.11+
50
- environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.2.1'` (omit `[mcp]`
51
+ environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.2.2'` (omit `[mcp]`
51
52
  for CLI only). `qdrant-memory` is the CLI and `mcp` is its server subcommand.
52
53
  Standalone does not require Hermes. See [setup and quick start](docs/standalone.md).
53
54
  MCP-focused agents may instead use the [metadata-only distribution](https://github.com/cnkang/qdrant-memory-mcp).
@@ -140,9 +141,10 @@ The install resolves the catalog's reviewed commit and prints the entry's declar
140
141
  tools, requirements and known issues before it clones anything.
141
142
  `hermes plugins enable` prepares the declared dependencies through Hermes PM.
142
143
 
143
- **Version-locked: install the verified Runtime 0.2.1 source through the Hermes CLI.**
144
+ **Version-locked: install the verified Runtime 0.2.2 source through the Hermes CLI.**
144
145
 
145
- This immutable source revision includes the explicit-write fix. It does not
146
+ This immutable source revision includes MCP SDK 1.x/2.x support and the
147
+ explicit-write fix. It does not
146
148
  depend on a PyPI release or a catalog update.
147
149
 
148
150
  ```bash
@@ -150,7 +152,7 @@ export HERMES_HOME="/absolute/path/to/your/hermes-profile"
150
152
  ollama pull qwen3-embedding:4b
151
153
  # Start Ollama if it is not running. Keep its service available.
152
154
  hermes plugins install https://github.com/cnkang/hermes-plugin-qdrant-memory \
153
- --ref 8929693fcccd1efa91bfa062145e35d2369ca9cc # verified Runtime 0.2.1 source
155
+ --ref 2fd43ad2259bd98d039394b8b714e5e89b5ab3a8 # verified Runtime 0.2.2 source
154
156
  hermes plugins enable qdrant-memory
155
157
  hermes memory setup
156
158
  hermes config set memory.provider qdrant-memory
@@ -167,7 +169,7 @@ environment. Omit `--ref` to track `main`, the development line.
167
169
  **Historical release: clone a published tag manually.**
168
170
 
169
171
  The v0.1.0 tag below predates the standalone interfaces and the explicit-write
170
- fix. Use the pinned source above for Runtime 0.2.1.
172
+ fix. Use the pinned source above for Runtime 0.2.2.
171
173
 
172
174
  ```bash
173
175
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -3,4 +3,4 @@ httpx<1,>=0.28
3
3
  portalocker<4,>=3.2
4
4
 
5
5
  [mcp]
6
- mcp<2,>=1.30
6
+ mcp<3,>=1.30
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hermes-plugin-qdrant-memory"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  description = "Durable Qdrant memory for Hermes, standalone CLI and local MCP"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -16,7 +16,7 @@ dependencies = ["qdrant-client>=1.15,<2", "httpx>=0.28,<1", "portalocker>=3.2,<4
16
16
  qdrant-memory = "qdrant_memory.standalone:main"
17
17
 
18
18
  [project.optional-dependencies]
19
- mcp = ["mcp>=1.30,<2"]
19
+ mcp = ["mcp>=1.30,<3"]
20
20
 
21
21
  [project.urls]
22
22
  Homepage = "https://github.com/cnkang/hermes-plugin-qdrant-memory"
@@ -30,7 +30,7 @@ Skill = "https://github.com/cnkang/skills/tree/main/qdrant-memory"
30
30
  qdrant-memory = "qdrant_memory:register"
31
31
 
32
32
  [dependency-groups]
33
- test = ["pytest>=8,<10", "pytest-cov>=6,<8", "ruamel.yaml>=0.18.16,<0.20", "mcp>=1.30,<2"]
33
+ test = ["pytest>=8,<10", "pytest-cov>=6,<8", "ruamel.yaml>=0.18.16,<0.20", "mcp>=1.30,<3"]
34
34
 
35
35
  [tool.setuptools.packages.find]
36
36
  include = ["qdrant_memory*"]
@@ -11,19 +11,17 @@ def create_server(runtime):
11
11
  """Bind the four fixed-scope tools to an official SDK server instance."""
12
12
  import anyio
13
13
  from mcp.server import Server
14
- from mcp.types import CallToolResult, TextContent, Tool
14
+ from mcp.types import CallToolResult, ListToolsResult, TextContent, Tool
15
15
 
16
- server = Server("qdrant-memory")
17
-
18
- @server.list_tools()
19
16
  async def list_tools():
20
17
  """Advertise only the shared explicit-memory schemas."""
18
+ # Both SDKs require an async handler; allow cancellation before building schemas.
19
+ await anyio.lowlevel.checkpoint()
21
20
  return [
22
21
  Tool(name=item["name"], description=item["description"], inputSchema=item["parameters"])
23
22
  for item in schemas()
24
23
  ]
25
24
 
26
- @server.call_tool(validate_input=False)
27
25
  async def invoke(name, arguments):
28
26
  """Validate and dispatch without echoing sensitive invalid arguments."""
29
27
  try:
@@ -38,7 +36,22 @@ def create_server(runtime):
38
36
  isError=True,
39
37
  )
40
38
 
41
- return server
39
+ if hasattr(Server, "list_tools"):
40
+ # SDK 1.x registers handlers with decorators.
41
+ server = Server("qdrant-memory")
42
+ server.list_tools()(list_tools)
43
+ server.call_tool(validate_input=False)(invoke)
44
+ return server
45
+
46
+ async def on_list_tools(context, params):
47
+ """Adapt SDK 2.x request handlers to the shared tool catalogue."""
48
+ return ListToolsResult(tools=await list_tools())
49
+
50
+ async def on_call_tool(context, params):
51
+ """Keep validation and sanitized tool errors identical across SDK versions."""
52
+ return await invoke(params.name, params.arguments)
53
+
54
+ return Server("qdrant-memory", on_list_tools=on_list_tools, on_call_tool=on_call_tool)
42
55
 
43
56
 
44
57
  def serve(home):
@@ -1,5 +1,5 @@
1
1
  name: qdrant-memory
2
- version: 0.2.1
2
+ version: 0.2.2
3
3
  description: Durable native memory with Qdrant and Hermes LLM extraction
4
4
  manifest_version: 2
5
5
  author: Kang Liu
@@ -1,3 +1,3 @@
1
1
  """Single version source shared by registration and migration manifests."""
2
2
 
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
@@ -7,16 +7,18 @@ from pathlib import Path
7
7
  import pytest
8
8
  from ruamel.yaml import YAML
9
9
 
10
- CASES = [("success", "success", "success", "success", "success", 0)] + [
11
- tuple(result if position == failed else "success" for position in range(5)) + (1,)
12
- for failed in range(5)
10
+ CASES = [("success", "success", "success", "success", "success", "success", 0)] + [
11
+ tuple(result if position == failed else "success" for position in range(6)) + (1,)
12
+ for failed in range(6)
13
13
  for result in ("failure", "skipped", "cancelled")
14
14
  ]
15
15
 
16
16
 
17
- @pytest.mark.parametrize("lint,tests,sonar,snyk,snyk_code,expected", CASES)
17
+ @pytest.mark.parametrize("lint,tests,mcp,sonar,snyk,snyk_code,expected", CASES)
18
18
  @pytest.mark.skipif(os.name == "nt", reason="The checked workflow step is POSIX Bash.")
19
- def test_required_gate_executes_actual_workflow_step(lint, tests, sonar, snyk, snyk_code, expected):
19
+ def test_required_gate_executes_actual_workflow_step(
20
+ lint, tests, mcp, sonar, snyk, snyk_code, expected
21
+ ):
20
22
  """Verify required gate executes actual workflow step."""
21
23
  workflow = (Path(__file__).resolve().parents[1] / ".github/workflows/ci.yml").read_text(
22
24
  encoding="utf-8"
@@ -28,6 +30,7 @@ def test_required_gate_executes_actual_workflow_step(lint, tests, sonar, snyk, s
28
30
  **os.environ,
29
31
  "LINT_RESULT": lint,
30
32
  "TEST_RESULT": tests,
33
+ "MCP_RESULT": mcp,
31
34
  "SONAR_RESULT": sonar,
32
35
  "SNYK_RESULT": snyk,
33
36
  "SNYK_CODE_RESULT": snyk_code,