diff --git a/src/basic_memory/config.py b/src/basic_memory/config.py index acc544bc..bd766ea8 100644 --- a/src/basic_memory/config.py +++ b/src/basic_memory/config.py @@ -275,7 +275,7 @@ def get_project_config(project_name: Optional[str] = None) -> ProjectConfig: return ProjectConfig(name=name, home=Path(path)) # otherwise raise error - raise ValueError(f"Project '{actual_project_name}' not found") # pragma: no cover + raise ValueError(f"Project '{actual_project_name}' not found") # pragma: no cover # Create config manager diff --git a/src/basic_memory/mcp/tools/__init__.py b/src/basic_memory/mcp/tools/__init__.py index b3c82f3c..b49997ca 100644 --- a/src/basic_memory/mcp/tools/__init__.py +++ b/src/basic_memory/mcp/tools/__init__.py @@ -48,4 +48,4 @@ __all__ = [ "sync_status", "view_note", "write_note", -] \ No newline at end of file +] diff --git a/src/basic_memory/mcp/tools/project_management.py b/src/basic_memory/mcp/tools/project_management.py index 21b2e51b..6e57bef9 100644 --- a/src/basic_memory/mcp/tools/project_management.py +++ b/src/basic_memory/mcp/tools/project_management.py @@ -230,7 +230,7 @@ async def set_default_project(project_name: str, ctx: Context | None = None) -> return add_project_metadata(result, session.get_current_project()) -@mcp.tool() +@mcp.tool("create_memory_project") async def create_project( project_name: str, project_path: str, set_default: bool = False, ctx: Context | None = None ) -> str: @@ -341,4 +341,4 @@ async def delete_project(project_name: str, ctx: Context | None = None) -> str: result += "Files remain on disk but project is no longer tracked by Basic Memory.\n" result += "Re-add the project to access its content again.\n" - return add_project_metadata(result, session.get_current_project()) \ No newline at end of file + return add_project_metadata(result, session.get_current_project()) diff --git a/test-int/mcp/test_project_management_integration.py b/test-int/mcp/test_project_management_integration.py index 0e6f7f68..f8556db5 100644 --- a/test-int/mcp/test_project_management_integration.py +++ b/test-int/mcp/test_project_management_integration.py @@ -350,7 +350,7 @@ async def test_create_project_basic_operation(mcp_server, app): async with Client(mcp_server) as client: # Create a new project create_result = await client.call_tool( - "create_project", + "create_memory_project", { "project_name": "test-new-project", "project_path": "/tmp/test-new-project", @@ -382,7 +382,7 @@ async def test_create_project_with_default_flag(mcp_server, app): async with Client(mcp_server) as client: # Create a new project and set as default create_result = await client.call_tool( - "create_project", + "create_memory_project", { "project_name": "test-default-project", "project_path": "/tmp/test-default-project", @@ -412,7 +412,7 @@ async def test_create_project_duplicate_name(mcp_server, app): async with Client(mcp_server) as client: # First create a project await client.call_tool( - "create_project", + "create_memory_project", { "project_name": "duplicate-test", "project_path": "/tmp/duplicate-test-1", @@ -422,7 +422,7 @@ async def test_create_project_duplicate_name(mcp_server, app): # Try to create another project with same name with pytest.raises(Exception) as exc_info: await client.call_tool( - "create_project", + "create_memory_project", { "project_name": "duplicate-test", "project_path": "/tmp/duplicate-test-2", @@ -431,7 +431,7 @@ async def test_create_project_duplicate_name(mcp_server, app): # Should show error about duplicate name error_message = str(exc_info.value) - assert "create_project" in error_message + assert "create_memory_project" in error_message assert ( "duplicate-test" in error_message or "already exists" in error_message @@ -446,7 +446,7 @@ async def test_delete_project_basic_operation(mcp_server, app): async with Client(mcp_server) as client: # First create a project to delete await client.call_tool( - "create_project", + "create_memory_project", { "project_name": "to-be-deleted", "project_path": "/tmp/to-be-deleted", @@ -540,7 +540,7 @@ async def test_project_lifecycle_workflow(mcp_server, app): # 1. Create new project create_result = await client.call_tool( - "create_project", + "create_memory_project", { "project_name": project_name, "project_path": project_path, @@ -609,7 +609,7 @@ async def test_create_delete_project_edge_cases(mcp_server, app): # Create project with special characters create_result = await client.call_tool( - "create_project", + "create_memory_project", { "project_name": special_name, "project_path": f"/tmp/{special_name}", @@ -645,7 +645,7 @@ async def test_case_insensitive_project_switching(mcp_server, app): # Create a project with mixed case name project_name = "Personal-Project" create_result = await client.call_tool( - "create_project", + "create_memory_project", { "project_name": project_name, "project_path": f"/tmp/{project_name}", @@ -709,7 +709,7 @@ async def test_case_insensitive_project_operations(mcp_server, app): # Create a project with capital letters project_name = "CamelCase-Project" create_result = await client.call_tool( - "create_project", + "create_memory_project", { "project_name": project_name, "project_path": f"/tmp/{project_name}", @@ -809,7 +809,7 @@ async def test_case_preservation_in_project_list(mcp_server, app): # Create all test projects for project_name in test_projects: await client.call_tool( - "create_project", + "create_memory_project", { "project_name": project_name, "project_path": f"/tmp/{project_name}", @@ -854,7 +854,7 @@ async def test_session_state_consistency_after_case_switch(mcp_server, app): # Create a project with specific case project_name = "Session-Test-Project" await client.call_tool( - "create_project", + "create_memory_project", { "project_name": project_name, "project_path": f"/tmp/{project_name}", @@ -899,4 +899,4 @@ async def test_session_state_consistency_after_case_switch(mcp_server, app): # Clean up await client.call_tool("switch_project", {"project_name": "test-project"}) - await client.call_tool("delete_project", {"project_name": project_name}) \ No newline at end of file + await client.call_tool("delete_project", {"project_name": project_name})