fix: honour --palace flag in mcp_server

Parse --palace before initialising module-level singletons so that
both ChromaDB and KnowledgeGraph use the correct palace directory.

When --palace is provided the user is requesting an isolated palace;
KG must co-locate with ChromaDB under that path, not fall back to the
global default (~/.mempalace/knowledge_graph.sqlite3).
This commit is contained in:
Hsu Hsiuwei
2026-04-08 23:58:45 +08:00
parent 71736a3f4f
commit 3d68c4127d
+20 -3
View File
@@ -2,7 +2,7 @@
"""
MemPalace MCP Server — read/write palace access for Claude Code
================================================================
Install: claude mcp add mempalace -- python -m mempalace.mcp_server
Install: claude mcp add mempalace -- python -m mempalace.mcp_server [--palace /path/to/palace]
Tools (read):
mempalace_status — total drawers, wing/room breakdown
@@ -17,6 +17,8 @@ Tools (write):
mempalace_delete_drawer — remove a drawer by ID
"""
import argparse
import os
import sys
import json
import logging
@@ -31,12 +33,27 @@ import chromadb
from .knowledge_graph import KnowledgeGraph
_kg = KnowledgeGraph()
logging.basicConfig(level=logging.INFO, format="%(message)s", stream=sys.stderr)
logger = logging.getLogger("mempalace_mcp")
def _parse_args():
parser = argparse.ArgumentParser(description="MemPalace MCP Server")
parser.add_argument(
"--palace",
metavar="PATH",
help="Path to the palace directory (overrides config file and env var)",
)
return parser.parse_args()
_args = _parse_args()
if _args.palace:
os.environ["MEMPALACE_PALACE_PATH"] = os.path.abspath(_args.palace)
_config = MempalaceConfig()
_kg = KnowledgeGraph(db_path=os.path.join(_config.palace_path, "knowledge_graph.sqlite3"))
def _get_collection(create=False):