Compare commits

..

3 Commits

Author SHA1 Message Date
phernandez 56c875f137 chore: update version to 0.13.5 for v0.13.5 release 2025-06-11 22:02:56 -05:00
phernandez 5049de7e2d docs: add changelog entry for v0.13.5
- Renamed create_project to create_memory_project for namespace isolation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-11 22:01:10 -05:00
phernandez 49011768f7 fix: rename create_project to create_memory_project for namespace isolation
Continue the namespace isolation effort by renaming the create_project tool
to create_memory_project to avoid conflicts with other MCP servers.

Changes:
- Renamed @mcp.tool() decorator from 'create_project' to 'create_memory_project'
- Updated all test references to use the new tool name
- Tool functionality remains identical, only the name changed
- Part of broader effort to ensure Basic Memory tools have unique namespaced names

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-11 21:58:40 -05:00
6 changed files with 31 additions and 18 deletions
+13
View File
@@ -1,5 +1,18 @@
# CHANGELOG
## v0.13.5 (2025-06-11)
### Bug Fixes
- **MCP Tools**: Renamed `create_project` tool to `create_memory_project` for namespace isolation
- **Namespace**: Continued namespace isolation effort to prevent conflicts with other MCP servers
### Changes
- Tool functionality remains identical - only the name changed from `create_project` to `create_memory_project`
- All integration tests updated to use the new tool name
- Completes namespace isolation for project management tools alongside `list_memory_projects`
## v0.13.4 (2025-06-11)
### Bug Fixes
+1 -1
View File
@@ -1,7 +1,7 @@
"""basic-memory - Local-first knowledge management combining Zettelkasten with knowledge graphs"""
# Package version - updated by release automation
__version__ = "0.13.4"
__version__ = "0.13.5"
# API version for FastAPI - independent of package version
__api_version__ = "v0"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -48,4 +48,4 @@ __all__ = [
"sync_status",
"view_note",
"write_note",
]
]
@@ -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())
return add_project_metadata(result, session.get_current_project())
@@ -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})
await client.call_tool("delete_project", {"project_name": project_name})