Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion mempalace/mcp_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,11 @@ def _sanitize_optional_name(value: str = None, field_name: str = "name") -> str:


def tool_status():
col = _get_collection()
# Use create=True only when a palace DB already exists on disk -- this
# bootstraps the ChromaDB collection on a valid-but-empty palace without
# accidentally creating a palace in a non-existent directory (#830).
db_exists = os.path.isfile(os.path.join(_config.palace_path, "chroma.sqlite3"))
col = _get_collection(create=db_exists)
if not col:
return _no_palace()
count = col.count()
Expand Down
19 changes: 19 additions & 0 deletions tests/test_mcp_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,25 @@ def test_tools_call_dispatches(self, monkeypatch, config, palace_path, seeded_kg


class TestReadTools:
def test_status_cold_start_no_collection(self, monkeypatch, config, palace_path, kg):
"""Status on a valid palace with no ChromaDB collection yet (#830).

After `mempalace init`, chroma.sqlite3 exists but the mempalace_drawers
collection has not been created (no mine or add_drawer yet). Status
should return total_drawers: 0, not 'No palace found'.
"""
import chromadb

_patch_mcp_server(monkeypatch, config, kg)
# Create the DB file (init does this) but NOT the collection
client = chromadb.PersistentClient(path=palace_path)
del client
from mempalace.mcp_server import tool_status

result = tool_status()
assert "error" not in result, f"cold-start should not error: {result}"
assert result["total_drawers"] == 0

def test_status_empty_palace(self, monkeypatch, config, palace_path, kg):
_patch_mcp_server(monkeypatch, config, kg)
_client, _col = _get_collection(palace_path, create=True)
Expand Down