precacheForDirectory() — mcp Function Reference
Architecture documentation for the precacheForDirectory() function in graph-cache.ts from the mcp codebase.
Entity Profile
Dependency Diagram
graph TD 9003922a_3c12_9d09_182b_1d8c2e1893be["precacheForDirectory()"] a9363f44_0cfc_87dc_a76a_4eeb9d75c684["start()"] a9363f44_0cfc_87dc_a76a_4eeb9d75c684 -->|calls| 9003922a_3c12_9d09_182b_1d8c2e1893be ec84daee_4b9f_c373_088b_c46d9bf9913e["detectRepo()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| ec84daee_4b9f_c373_088b_c46d9bf9913e 69fc7a46_28f6_6b72_2725_66c381e53322["debug()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| 69fc7a46_28f6_6b72_2725_66c381e53322 df6e0585_94bc_eb51_256f_f5c95dbbd57f["info()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| df6e0585_94bc_eb51_256f_f5c95dbbd57f 2bb2b0ae_2fea_7264_08ce_133bb9b7810c["generateIdempotencyKey()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| 2bb2b0ae_2fea_7264_08ce_133bb9b7810c f0ea77a6_c98a_1862_741d_234890ac7da7["detectRepoName()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| f0ea77a6_c98a_1862_741d_234890ac7da7 1fd46af5_c3e2_8998_1eb2_098430ff3629["zipRepository()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| 1fd46af5_c3e2_8998_1eb2_098430ff3629 11d5249b_82de_e1fb_e621_e95ae1a093c5["buildIndexes()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| 11d5249b_82de_e1fb_e621_e95ae1a093c5 6407330b_8aa1_cc04_569a_747f6b1debfd["set()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| 6407330b_8aa1_cc04_569a_747f6b1debfd 90af3150_ce81_c645_faa7_5b8b9bcf5ecc["has()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| 90af3150_ce81_c645_faa7_5b8b9bcf5ecc e3133d6c_87dc_b74a_abf7_6097334e0493["saveCacheToDisk()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| e3133d6c_87dc_b74a_abf7_6097334e0493 e5352615_c5fb_64a2_cc5c_a248578cbc8a["warn()"] 9003922a_3c12_9d09_182b_1d8c2e1893be -->|calls| e5352615_c5fb_64a2_cc5c_a248578cbc8a style 9003922a_3c12_9d09_182b_1d8c2e1893be 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
Calls
Called By
Source
Frequently Asked Questions
What does precacheForDirectory() do?
precacheForDirectory() is a function in the mcp codebase.
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