Skip to content

Commit 5aa8ae5

Browse files
phernandezclaude
andcommitted
fix(mcp): add project detection from memory:// URLs in edit_note and delete_note
edit_note and delete_note were missing detect_project_from_url_prefix() which other tools (read_note, build_context, search_notes, read_content) already use. This caused incorrect cloud routing when using memory:// URLs without an explicit project parameter in multi-project setups. Fixes #664 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: phernandez <paul@basicmachines.co>
1 parent 013864e commit 5aa8ae5

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

src/basic_memory/mcp/tools/delete_note.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
from fastmcp import Context
66
from mcp.server.fastmcp.exceptions import ToolError
77

8-
from basic_memory.mcp.project_context import get_project_client
8+
from basic_memory.config import ConfigManager
9+
from basic_memory.mcp.project_context import detect_project_from_url_prefix, get_project_client
910
from basic_memory.mcp.server import mcp
1011

1112

@@ -222,6 +223,12 @@ async def delete_note(
222223
with suggestions for finding the correct identifier, including search
223224
commands and alternative formats to try.
224225
"""
226+
# Detect project from memory URL prefix before routing
227+
if project is None:
228+
detected = detect_project_from_url_prefix(identifier, ConfigManager().config)
229+
if detected:
230+
project = detected
231+
225232
async with get_project_client(project, workspace, context) as (client, active_project):
226233
logger.debug(
227234
f"Deleting {'directory' if is_directory else 'note'}: {identifier} in project: {active_project.name}"

src/basic_memory/mcp/tools/edit_note.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
from loguru import logger
66
from fastmcp import Context
77

8-
from basic_memory.mcp.project_context import get_project_client, add_project_metadata
8+
from basic_memory.config import ConfigManager
9+
from basic_memory.mcp.project_context import (
10+
detect_project_from_url_prefix,
11+
get_project_client,
12+
add_project_metadata,
13+
)
914
from basic_memory.mcp.server import mcp
1015
from basic_memory.schemas.base import Entity
1116
from basic_memory.schemas.response import EntityResponse
@@ -255,6 +260,12 @@ async def edit_note(
255260
# Resolve effective default: allow MCP clients to send null for optional int field
256261
effective_replacements = expected_replacements if expected_replacements is not None else 1
257262

263+
# Detect project from memory URL prefix before routing
264+
if project is None:
265+
detected = detect_project_from_url_prefix(identifier, ConfigManager().config)
266+
if detected:
267+
project = detected
268+
258269
async with get_project_client(project, workspace, context) as (client, active_project):
259270
logger.info("MCP tool call", tool="edit_note", identifier=identifier, operation=operation)
260271

0 commit comments

Comments
 (0)