precacheForDirectory() — mcp Function Reference
Architecture documentation for the precacheForDirectory() function in graph-cache.ts from the mcp codebase.
Entity Profile
Dependency Diagram
graph TD 5f051fd3_b5fd_05fe_3e0b_f20364a0b064["precacheForDirectory()"] 108c9ff4_bdb8_518a_9256_9ff4cd9d39a7["graph-cache.ts"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|defined in| 108c9ff4_bdb8_518a_9256_9ff4cd9d39a7 9d72a623_8b26_a485_5797_5f53c18e4294["start()"] 9d72a623_8b26_a485_5797_5f53c18e4294 -->|calls| 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 40378b99_8607_8e31_116f_694f33f24f45["detectRepo()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 40378b99_8607_8e31_116f_694f33f24f45 33bb86df_1268_373b_a74a_77412144612c["debug()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 33bb86df_1268_373b_a74a_77412144612c 86e5ab36_fcab_9ac4_8f1d_6573699f3dc9["info()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 86e5ab36_fcab_9ac4_8f1d_6573699f3dc9 cfff71c5_842d_825f_a41f_4e4cbd45a930["generateIdempotencyKey()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| cfff71c5_842d_825f_a41f_4e4cbd45a930 7b324bf5_8fc4_6549_8aca_337ba2b036bd["detectRepoName()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 7b324bf5_8fc4_6549_8aca_337ba2b036bd bbbd3356_722d_4bf8_09d2_706412487d25["zipRepository()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| bbbd3356_722d_4bf8_09d2_706412487d25 f20c71b7_2411_d98b_88ba_3ebc36bdd1f5["buildIndexes()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| f20c71b7_2411_d98b_88ba_3ebc36bdd1f5 4e1e5a38_002c_8f16_1767_0260a7001d5e["set()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 4e1e5a38_002c_8f16_1767_0260a7001d5e 5b58088c_d9af_5bc6_19ab_1fff095079b9["has()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 5b58088c_d9af_5bc6_19ab_1fff095079b9 73dde66b_f154_e1ab_4ee7_11f3162fb96d["saveCacheToDisk()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| 73dde66b_f154_e1ab_4ee7_11f3162fb96d f7302a04_558c_423c_2b1f_3cfced56f273["warn()"] 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 -->|calls| f7302a04_558c_423c_2b1f_3cfced56f273 style 5f051fd3_b5fd_05fe_3e0b_f20364a0b064 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
src/cache/graph-cache.ts lines 644–705
export async function precacheForDirectory(
client: ClientContext,
directory: string,
cacheDir: string | undefined
): Promise<void> {
// Already cached?
if (detectRepo(directory, _repoMap)) {
logger.debug('Graph already cached for', directory);
return;
}
logger.info('Pre-computing graph for', directory, '(first run for this repo; subsequent runs will be instant)...');
const idempotencyKey = generateIdempotencyKey(directory);
const repoName = detectRepoName(directory);
const zipResult = await zipRepository(directory);
let progressInterval: NodeJS.Timeout | null = null;
let elapsed = 0;
progressInterval = setInterval(() => {
elapsed += 15;
logger.info(`Analysis in progress... (${elapsed}s elapsed)`);
}, 15000);
try {
const fileBuffer = await fs.readFile(zipResult.path);
const fileBlob = new Blob([fileBuffer], { type: 'application/zip' });
const response = await client.graphs.generateSupermodelGraph(
fileBlob as any,
{ idempotencyKey }
);
const graph = buildIndexes(response, `precache:${repoName}`);
// Update in-memory caches
graphCache.set(idempotencyKey, graph);
_repoMap.set(repoName.toLowerCase(), graph);
const parts = repoName.toLowerCase().split(/[_\-\/]/);
for (const part of parts) {
if (part && part.length > 2 && !_repoMap.has(part)) {
_repoMap.set(part, graph);
}
}
// Persist to disk for cross-container reuse
if (cacheDir) {
try {
const savedPath = await saveCacheToDisk(cacheDir, repoName, response);
logger.info('Saved graph to:', savedPath);
} catch (err: any) {
// Non-fatal: cache dir might be read-only or full
logger.warn('Failed to persist graph to disk:', err.message);
}
}
logger.info(`Pre-compute complete: ${graph.summary.nodeCount} nodes, ${graph.summary.relationshipCount} relationships`);
} finally {
if (progressInterval) clearInterval(progressInterval);
await zipResult.cleanup();
}
}
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does precacheForDirectory() do?
precacheForDirectory() is a function in the mcp codebase, defined in src/cache/graph-cache.ts.
Where is precacheForDirectory() defined?
precacheForDirectory() is defined in src/cache/graph-cache.ts at line 644.
What does precacheForDirectory() call?
precacheForDirectory() calls 11 function(s): buildIndexes, debug, detectRepo, detectRepoName, generateIdempotencyKey, has, info, saveCacheToDisk, and 3 more.
What calls precacheForDirectory()?
precacheForDirectory() is called by 1 function(s): start.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free