fix(memory): defer store loading to prevent MCP timeout#39
Conversation
…model download - Connect MCP transport before loading store, so tools/list responds immediately - Store loading (embedding model init + memory indexing) runs in background - Tools await store readiness via loadingPromise instead of throwing - Support TRANSFORMERS_CACHE_DIR env var for persistent model cache across npx runs - Bump version to 1.2.0
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThe pull request converts MemoryStore from synchronous to asynchronous operations, enabling non-blocking data loading during server startup. It refactors core store methods ( Changes
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Problema
O
memory-mcpserver dava timeout (-32001) durante a inicialização porque ostore.load()(que baixa/carrega o modelo de embedding de ~113MB) rodava antes doserver.connect(). O MCP protocol não conseguia respondertools/listdentro do timeout de 60s.O modelo era cacheado dentro do
node_modulesdo diretório npx, que é efêmero — qualquer limpeza de cache ou bump de versão forçava um novo download.Solução
1. Deferred loading
O transport MCP agora conecta antes do store carregar. O
store.load()roda em background e as tools aguardam a conclusão vialoadingPromisequando chamadas.2. Cache dir configurável
Suporte à env var
TRANSFORMERS_CACHE_DIRnoEmbeddingEngine, permitindo cachear o modelo ONNX num diretório fixo que sobrevive a limpezas de npx cache.3. Async store API
store.get()estore.list()agora são async e aguardam o loading completar ao invés de dar throw.Mudanças
embeddings.ts: setaenv.cacheDirviaTRANSFORMERS_CACHE_DIRserver.ts: conecta transport antes, carrega store em backgroundstore.ts:ensureLoaded()aguardaloadingPromise;get()/list()agora asynctools.ts:awaitnas chamadas destore.get()estore.list()store.test.ts: ajustado pra asyncpackage.json: bump 1.1.1 → 1.2.0Summary by CodeRabbit
New Features
TRANSFORMERS_CACHE_DIRenvironment variable to customize embeddings cache location.Improvements