feat(release): prepare v2.22.1 console parity - #97
Conversation
Bump MARM server release metadata to 2.22.1 across package, Docker, server metadata, and install docs. Fill the remaining MARM Console Memory workspace gaps from the legacy dashboard with MCP-backed session, log, notebook, and compaction actions plus response-contract tests.
|
Warning Review limit reached
Next review available in: 8 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughChangesThe pull request adds MCP-backed Console Memory mutations for sessions, logs, notebooks, and compaction, propagates notebook project/platform scope through MCP transports and storage, adds route coverage, and updates release metadata to v2.22.1. Console Memory mutations
Notebook scope propagation
v2.22.1 release metadata
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b335e4292c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "summaries": [ | ||
| { | ||
| "candidate_id": candidate_id, | ||
| "source_memory_ids": candidate["source_memory_ids"], | ||
| "suggested_summary": candidate["proposed_summary"], | ||
| } |
There was a problem hiding this comment.
Avoid staging placeholder compaction summaries
When a normal pending_summary candidate has no generated summary yet, memory_store.list_compaction() exposes proposed_summary as the literal fallback "Summary pending"; forwarding that value here satisfies marm_compaction(action="stage")'s non-empty validation, so a user can stage and then apply a compaction that replaces the source memories with the placeholder text. This corrupts memory contents for any pending candidate that has not already received a real suggested_summary.
Useful? React with 👍 / 👎.
| result = _mcp_tool_mutation( | ||
| "marm_delete", | ||
| {"type": "notebook", "target": name}, |
There was a problem hiding this comment.
Preserve notebook scope on delete
The frontend passes project/platform query parameters when deleting an entry because notebook rows are keyed by name + project + platform, but this route drops those parameters and calls marm_delete with only the name. The underlying delete path removes notebook_entries by WHERE name = ?, so deleting one scoped variant will remove every notebook entry with the same name across all projects/platforms.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@marm-console/artifacts/marm-console/src/pages/Memory.tsx`:
- Around line 845-853: Require the user to enter DELETE in the Memory.tsx
notebook deletion flow before calling deleteNote.mutate, preserving the existing
success handling after confirmation. In marm-console/server/app.py lines
131-132, remove the default value for confirm so the deletion request requires
an explicit confirmation field.
In `@marm-console/server/app.py`:
- Around line 409-416: Update the bulk session-deletion flow around
_mcp_tool_mutation to catch failures per session, record each failed item, and
continue processing subsequent sessions instead of aborting after prior
mutations. Return an MCP-compatible result that clearly reports deleted counts
and partial failures, and trigger UI/cache invalidation for both successful and
partial settlements rather than only the all-success path.
- Around line 493-525: Preserve the notebook’s full scoped identity in
upsert_notebook and delete_notebook: forward payload.project and
payload.platform in the marm_notebook add mutation, match read-back entries by
name, project, and platform, and use the delete payload’s scope fields when
calling marm_delete instead of ignoring them. Add a regression test covering
distinct notebooks with the same name across scopes and verifying scoped
deletion.
In `@README.md`:
- Around line 27-30: Update README.md lines 27-30 to describe marm-console as
shipped with Console Memory mutation routes and UI actions, while accurately
stating its current limitations instead of calling it “coming soon”; then
regenerate marm-mcp-server/README.md lines 27-30 from the corrected root README
so both mirrors match.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 53f552cc-b0f0-4d6e-be54-9aee7aeb887a
📒 Files selected for processing (21)
CHANGELOG.mdREADME.mddocs/INSTALL-DOCKER.mddocs/INSTALL-LINUX.mddocs/INSTALL-PLATFORMS.mddocs/INSTALL-WINDOWS.mdmarm-console/artifacts/marm-console/src/hooks/use-marm-queries.tsmarm-console/artifacts/marm-console/src/lib/marm-api.tsmarm-console/artifacts/marm-console/src/pages/Memory.tsxmarm-console/server/app.pymarm-console/server/memory_store.pymarm-console/tests/test_memory_dashboard_gap_routes.pymarm-mcp-server/Dockerfilemarm-mcp-server/README.mdmarm-mcp-server/docker-compose.ymlmarm-mcp-server/marm-docs/README.mdmarm-mcp-server/marm_mcp_server/__init__.pymarm-mcp-server/marm_mcp_server/config/settings.pymarm-mcp-server/marm_mcp_server/server.pymarm-mcp-server/pyproject.tomlmarm-mcp-server/server.json
📜 Review details
🧰 Additional context used
📓 Path-based instructions (9)
marm-mcp-server/{pyproject.toml,server.json,marm_mcp_server/__init__.py,marm_mcp_server/config/settings.py,marm_mcp_server/server.py,Dockerfile,docker-compose.yml}
📄 CodeRabbit inference engine (AGENTS.md)
When bumping the version, update every listed version occurrence and audit with
python scripts/find-versions.py.
Files:
marm-mcp-server/docker-compose.ymlmarm-mcp-server/marm_mcp_server/config/settings.pymarm-mcp-server/marm_mcp_server/__init__.pymarm-mcp-server/pyproject.tomlmarm-mcp-server/Dockerfilemarm-mcp-server/server.jsonmarm-mcp-server/marm_mcp_server/server.py
**/*.md
⚙️ CodeRabbit configuration file
**/*.md: Only flag documentation issues that are materially wrong, misleading for installation/release behavior, or inconsistent with live MCP behavior. Skip style, phrasing, formatting, and wording preferences.
Files:
docs/INSTALL-WINDOWS.mddocs/INSTALL-PLATFORMS.mdmarm-mcp-server/marm-docs/README.mddocs/INSTALL-DOCKER.mddocs/INSTALL-LINUX.mdREADME.mdmarm-mcp-server/README.mdCHANGELOG.md
{README.md,docs/PROTOCOL.md,docs/PROTOCOL-LITE.md,marm-mcp-server/marm-docs/README.md,marm-mcp-server/marm-docs/docs/PROTOCOL.md,marm-mcp-server/marm-docs/docs/PROTOCOL-LITE.md}
📄 CodeRabbit inference engine (AGENTS.md)
Keep full MCP tool lists synchronized across the root documentation and their
marm-mcp-server/marm-docs/copies, including FAQ tool counts.
Files:
marm-mcp-server/marm-docs/README.mdREADME.md
{README.md,marm-mcp-server/README.md,marm-mcp-server/marm-docs/README.md}
📄 CodeRabbit inference engine (AGENTS.md)
README mirrors are generated: edit root
README.mdas the source of truth and regenerate the PyPI and text-only variants; never hand-edit mirrors.
Files:
marm-mcp-server/marm-docs/README.mdREADME.mdmarm-mcp-server/README.md
**/*.py
⚙️ CodeRabbit configuration file
**/*.py: Prioritize runtime correctness, async/concurrency safety, SQLite transaction safety, auth/rate-limit behavior, release-breaking packaging issues, and MCP protocol compatibility.
Files:
marm-console/server/memory_store.pymarm-mcp-server/marm_mcp_server/config/settings.pymarm-mcp-server/marm_mcp_server/__init__.pymarm-console/tests/test_memory_dashboard_gap_routes.pymarm-mcp-server/marm_mcp_server/server.pymarm-console/server/app.py
marm-mcp-server/marm_mcp_server/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
marm-mcp-server/marm_mcp_server/**/*.py: All memory writes must use the serialized asynchronous write queue; do not bypass it.
Amarm_log_entrysemantic-store failure must never fail the corresponding log write.
Never share database connections between the memory SQLite database and the concept-graph SQLite database.
Graph and concept failures must not break the seven core memory tools; the graph supervisor starts lazily and operates degraded on failure.
Use one lazy-loadedall-MiniLM-L6-v2fastembed encoder serialized behind a lock; writes must succeed when embeddings are unavailable.
Prefer the smallest implementation that solves the problem; avoid speculative abstractions and unrequested configuration flags.
Use minimal comments only for non-obvious rationale; do not add comments narrating the next line.
Keep orchestration in its current owner file and extract modules only at genuine boundaries.
Files:
marm-mcp-server/marm_mcp_server/config/settings.pymarm-mcp-server/marm_mcp_server/__init__.pymarm-mcp-server/marm_mcp_server/server.py
**/tests/**
⚙️ CodeRabbit configuration file
**/tests/**: Focus on tests that are flaky, non-isolated, incorrectly asserting behavior, or missing coverage for a changed high-risk path. Skip minor naming, comments, and layout preferences.
Files:
marm-console/tests/test_memory_dashboard_gap_routes.py
marm-mcp-server/server.json
📄 CodeRabbit inference engine (AGENTS.md)
When adding or removing an MCP tool, update the
toolsarray.
Files:
marm-mcp-server/server.json
marm-mcp-server/marm_mcp_server/server.py
📄 CodeRabbit inference engine (AGENTS.md)
marm-mcp-server/marm_mcp_server/server.py: HTTP MCP tools must be whitelisted inMCP_TOOL_OPERATIONS; unlisted tools do not exist over HTTP.
When adding or removing an MCP tool, update its HTTP route andMCP_TOOL_OPERATIONSwhitelist.
Files:
marm-mcp-server/marm_mcp_server/server.py
🔇 Additional comments (21)
marm-mcp-server/Dockerfile (1)
69-69: LGTM!marm-mcp-server/docker-compose.yml (1)
21-21: LGTM!marm-mcp-server/marm_mcp_server/__init__.py (1)
17-20: LGTM!marm-mcp-server/marm_mcp_server/config/settings.py (1)
124-124: LGTM!marm-mcp-server/pyproject.toml (1)
7-7: LGTM!marm-mcp-server/server.json (1)
6-6: LGTM!Also applies to: 20-25
marm-mcp-server/marm_mcp_server/server.py (1)
8-8: LGTM!CHANGELOG.md (1)
6-6: LGTM!Also applies to: 16-22, 40-40
README.md (1)
8-8: LGTM!docs/INSTALL-DOCKER.md (1)
5-5: LGTM!docs/INSTALL-LINUX.md (1)
5-5: LGTM!Also applies to: 323-323
docs/INSTALL-PLATFORMS.md (1)
1-1: LGTM!docs/INSTALL-WINDOWS.md (1)
5-5: LGTM!Also applies to: 296-296
marm-mcp-server/README.md (1)
8-8: LGTM!marm-mcp-server/marm-docs/README.md (1)
1-1: LGTM!marm-console/server/app.py (1)
107-130: LGTM!Also applies to: 349-396, 438-456, 548-594
marm-console/server/memory_store.py (1)
370-375: LGTM!marm-console/artifacts/marm-console/src/hooks/use-marm-queries.ts (1)
150-227: LGTM!marm-console/artifacts/marm-console/src/lib/marm-api.ts (1)
140-180: LGTM!marm-console/artifacts/marm-console/src/pages/Memory.tsx (1)
3-3: LGTM!Also applies to: 497-731, 746-783, 907-1006
marm-console/tests/test_memory_dashboard_gap_routes.py (1)
1-203: LGTM!
| onClick={() => deleteNote.mutate( | ||
| { name: editing.name!, params: { project: editing.project || undefined, platform: editing.platform || undefined } }, | ||
| { | ||
| onSuccess: () => { | ||
| setActionNotice({ kind: 'success', message: `Notebook entry '${editing.name}' deleted.` }); | ||
| setEditing(null); | ||
| }, | ||
| }, | ||
| )} |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Enforce notebook deletion confirmation end-to-end.
The UI deletes immediately, while the server accepts an empty confirmation object.
marm-console/artifacts/marm-console/src/pages/Memory.tsx#L845-L853: require the user to typeDELETEbefore invoking the mutation.marm-console/server/app.py#L131-L132: remove the default soconfirmmust be explicitly supplied.
📍 Affects 2 files
marm-console/artifacts/marm-console/src/pages/Memory.tsx#L845-L853(this comment)marm-console/server/app.py#L131-L132
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@marm-console/artifacts/marm-console/src/pages/Memory.tsx` around lines 845 -
853, Require the user to enter DELETE in the Memory.tsx notebook deletion flow
before calling deleteNote.mutate, preserving the existing success handling after
confirmation. In marm-console/server/app.py lines 131-132, remove the default
value for confirm so the deletion request requires an explicit confirmation
field.
| @app.post("/api/notebook") | ||
| def upsert_notebook(payload: NotebookMutationPayload) -> dict: | ||
| name = payload.name.strip() | ||
| content = payload.content.strip() | ||
| if not name or not content: | ||
| raise HTTPException(status_code=422, detail="Name and content are required.") | ||
| _mcp_tool_mutation( | ||
| "marm_notebook", | ||
| {"action": "add", "name": name, "data": content}, | ||
| ) | ||
| try: | ||
| for entry in memory_store.list_notebook(get_memory_db_path()): | ||
| if entry["name"] == name: | ||
| return entry | ||
| except memory_store.MemoryStoreUnavailable: | ||
| pass | ||
| return { | ||
| "name": name, | ||
| "content": content, | ||
| "project": payload.project, | ||
| "platform": payload.platform, | ||
| "created_at": _now_iso(), | ||
| "updated_at": _now_iso(), | ||
| } | ||
|
|
||
|
|
||
| @app.delete("/api/notebook/{name}") | ||
| def delete_notebook(name: str, payload: NotebookDeletePayload) -> dict: | ||
| _ = payload | ||
| result = _mcp_tool_mutation( | ||
| "marm_delete", | ||
| {"type": "notebook", "target": name}, | ||
| ) |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Preserve the notebook’s full scoped identity.
project and platform are accepted but omitted from the MCP add request; read-back matches only name, and deletion ignores the client’s scope query. Entries are keyed by name + project + platform, so this can create an unscoped entry, return another scope’s entry, or delete the wrong entry. Forward both fields and match all three key components. Add a scoped route regression test.
As per path instructions, prioritize runtime correctness and MCP protocol compatibility.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@marm-console/server/app.py` around lines 493 - 525, Preserve the notebook’s
full scoped identity in upsert_notebook and delete_notebook: forward
payload.project and payload.platform in the marm_notebook add mutation, match
read-back entries by name, project, and platform, and use the delete payload’s
scope fields when calling marm_delete instead of ignoring them. Add a regression
test covering distinct notebooks with the same name across scopes and verifying
scoped deletion.
Source: Path instructions
Require typed notebook delete confirmation, preserve project/platform scope through Console and MCP notebook mutations, continue bulk session deletion after per-session failures, and update Console status docs. Add regression coverage for partial bulk session deletes and scoped notebook deletion.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@marm-console/tests/test_memory_dashboard_gap_routes.py`:
- Around line 246-254: Replace the mocked memory_store.list_sessions setup at
marm-console/tests/test_memory_dashboard_gap_routes.py:246-254 with session rows
seeded in the temporary SQLite database. At
marm-console/tests/test_memory_dashboard_gap_routes.py:285-306, likewise seed
both global and scoped notebook rows in that database instead of mocking reads,
while keeping the tests driven through the real FastAPI endpoints and SQLite
persistence path.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 2035cdf1-9407-499c-b42e-4c5456daf7f3
📒 Files selected for processing (16)
CHANGELOG.mdREADME.mdmarm-console/artifacts/marm-console/src/lib/marm-api.tsmarm-console/artifacts/marm-console/src/pages/Memory.tsxmarm-console/server/app.pymarm-console/tests/test_memory_dashboard_gap_routes.pymarm-mcp-server/README.mdmarm-mcp-server/marm-docs/README.mdmarm-mcp-server/marm_mcp_server/core/models.pymarm-mcp-server/marm_mcp_server/endpoints/logging.pymarm-mcp-server/marm_mcp_server/endpoints/notebook.pymarm-mcp-server/marm_mcp_server/server_stdio.pymarm-mcp-server/marm_mcp_server/services/log_entry.pymarm-mcp-server/marm_mcp_server/services/notebook.pymarm-mcp-server/marm_mcp_server/services/stdio_entry_tools.pymarm-mcp-server/tests/test_http_tools.py
🚧 Files skipped from review as they are similar to previous changes (5)
- marm-console/artifacts/marm-console/src/lib/marm-api.ts
- README.md
- CHANGELOG.md
- marm-console/server/app.py
- marm-console/artifacts/marm-console/src/pages/Memory.tsx
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Analyze (javascript-typescript)
🧰 Additional context used
📓 Path-based instructions (9)
marm-mcp-server/marm_mcp_server/endpoints/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
marm-mcp-server/marm_mcp_server/endpoints/**/*.py: Endpoint logic belongs underendpoints/, split by surface; shared helpers belong incore/.
New MCP tools must be implemented in the appropriateendpoints/<surface>.pymodule.
Files:
marm-mcp-server/marm_mcp_server/endpoints/logging.pymarm-mcp-server/marm_mcp_server/endpoints/notebook.py
marm-mcp-server/marm_mcp_server/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
marm-mcp-server/marm_mcp_server/**/*.py: All memory writes must use the serialized asynchronous write queue; do not bypass it.
Amarm_log_entrysemantic-store failure must never fail the corresponding log write.
Never share database connections between the memory SQLite database and the concept-graph SQLite database.
Graph and concept failures must not break the seven core memory tools; the graph supervisor starts lazily and operates degraded on failure.
Use one lazy-loadedall-MiniLM-L6-v2fastembed encoder serialized behind a lock; writes must succeed when embeddings are unavailable.
Prefer the smallest implementation that solves the problem; avoid speculative abstractions and unrequested configuration flags.
Use minimal comments only for non-obvious rationale; do not add comments narrating the next line.
Keep orchestration in its current owner file and extract modules only at genuine boundaries.
Files:
marm-mcp-server/marm_mcp_server/endpoints/logging.pymarm-mcp-server/marm_mcp_server/endpoints/notebook.pymarm-mcp-server/marm_mcp_server/services/stdio_entry_tools.pymarm-mcp-server/marm_mcp_server/core/models.pymarm-mcp-server/marm_mcp_server/services/log_entry.pymarm-mcp-server/marm_mcp_server/server_stdio.pymarm-mcp-server/marm_mcp_server/services/notebook.py
**/*.py
⚙️ CodeRabbit configuration file
**/*.py: Prioritize runtime correctness, async/concurrency safety, SQLite transaction safety, auth/rate-limit behavior, release-breaking packaging issues, and MCP protocol compatibility.
Files:
marm-mcp-server/marm_mcp_server/endpoints/logging.pymarm-mcp-server/marm_mcp_server/endpoints/notebook.pymarm-mcp-server/tests/test_http_tools.pymarm-mcp-server/marm_mcp_server/services/stdio_entry_tools.pymarm-mcp-server/marm_mcp_server/core/models.pymarm-mcp-server/marm_mcp_server/services/log_entry.pymarm-console/tests/test_memory_dashboard_gap_routes.pymarm-mcp-server/marm_mcp_server/server_stdio.pymarm-mcp-server/marm_mcp_server/services/notebook.py
marm-mcp-server/tests/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
marm-mcp-server/tests/**/*.py: Run tests withpytestfrommarm-mcp-server/; tests should use real FastAPI endpoints and real SQLite, mocking only when it closely matches real behavior.
Every new MARM Console API route must have at least one happy-path FastAPI response-contract test with the MCP adapter stubbed.
Do not write existence-check or coded-to-pass tests; prefer deep tests exercising real paths over broad shallow coverage.
Usepytest.mark.skiponly for genuinely unavailable dependencies, never merely to avoid implementation effort.
Files:
marm-mcp-server/tests/test_http_tools.py
**/tests/**
⚙️ CodeRabbit configuration file
**/tests/**: Focus on tests that are flaky, non-isolated, incorrectly asserting behavior, or missing coverage for a changed high-risk path. Skip minor naming, comments, and layout preferences.
Files:
marm-mcp-server/tests/test_http_tools.pymarm-console/tests/test_memory_dashboard_gap_routes.py
{README.md,docs/PROTOCOL.md,docs/PROTOCOL-LITE.md,marm-mcp-server/marm-docs/README.md,marm-mcp-server/marm-docs/docs/PROTOCOL.md,marm-mcp-server/marm-docs/docs/PROTOCOL-LITE.md}
📄 CodeRabbit inference engine (AGENTS.md)
Keep full MCP tool lists synchronized across the root documentation and their
marm-mcp-server/marm-docs/copies, including FAQ tool counts.
Files:
marm-mcp-server/marm-docs/README.md
{README.md,marm-mcp-server/README.md,marm-mcp-server/marm-docs/README.md}
📄 CodeRabbit inference engine (AGENTS.md)
README mirrors are generated: edit root
README.mdas the source of truth and regenerate the PyPI and text-only variants; never hand-edit mirrors.
Files:
marm-mcp-server/marm-docs/README.mdmarm-mcp-server/README.md
**/*.md
⚙️ CodeRabbit configuration file
**/*.md: Only flag documentation issues that are materially wrong, misleading for installation/release behavior, or inconsistent with live MCP behavior. Skip style, phrasing, formatting, and wording preferences.
Files:
marm-mcp-server/marm-docs/README.mdmarm-mcp-server/README.md
marm-mcp-server/marm_mcp_server/server_stdio.py
📄 CodeRabbit inference engine (AGENTS.md)
marm-mcp-server/marm_mcp_server/server_stdio.py: STDIO must remain behaviorally identical to HTTP; preserve stabletools/listordering and register graph/concept services after core tools.
When adding or removing an MCP tool, update STDIO bootstrap/registration with a matching wrapper or service path.
Files:
marm-mcp-server/marm_mcp_server/server_stdio.py
🔇 Additional comments (15)
marm-console/tests/test_memory_dashboard_gap_routes.py (3)
20-23: LGTM!Also applies to: 124-141, 173-189
232-245: LGTM!Also applies to: 256-270
273-284: LGTM!Also applies to: 308-354
marm-mcp-server/marm_mcp_server/core/models.py (1)
37-44: LGTM!Also applies to: 97-102
marm-mcp-server/marm_mcp_server/endpoints/logging.py (1)
58-66: LGTM!marm-mcp-server/marm_mcp_server/endpoints/notebook.py (1)
29-30: LGTM!marm-mcp-server/marm_mcp_server/server_stdio.py (1)
154-168: LGTM!Also applies to: 173-202
marm-mcp-server/marm_mcp_server/services/stdio_entry_tools.py (1)
26-44: LGTM!marm-mcp-server/marm_mcp_server/services/log_entry.py (1)
313-315: LGTM!Also applies to: 406-417
marm-mcp-server/tests/test_http_tools.py (1)
161-207: LGTM!marm-mcp-server/marm_mcp_server/services/notebook.py (1)
186-193: 🎯 Functional CorrectnessNo issue: the remaining handlers already accept extra keywords.
_use,_show,_status, and_clearall take**_, sonotebook_dispatchcan passprojectandplatformsafely.> Likely an incorrect or invalid review comment.marm-mcp-server/README.md (3)
8-8: LGTM!
556-558: LGTM!
27-30: 📐 Maintainability & Code QualityNo mirror regeneration needed. The release note already exists in
README.mdandmarm-mcp-server/README.md;marm-mcp-server/marm-docs/README.mdis a generated text-only subset that intentionally omits it.> Likely an incorrect or invalid review comment.marm-mcp-server/marm-docs/README.md (1)
1-1: LGTM!Also applies to: 519-521
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Tests