Open2
[Scrap] Memory Bank Load 用の MCP を導入してみる

こんな感じの MCP を書いた。雑に絶対パスで書いてるけど、ルートを注入する仕組みにしないとダメそう。取りあえずこれで試す。
#!/usr/bin/env deno run --allow-read
import * as fs from "node:fs/promises";
import * as path from "node:path";
import { FastMCP } from "npm:fastmcp@1.20.5";
import { z } from "npm:zod@3.24.2";
// memory-bank ディレクトリのパス
const MEMORY_BANK_DIR = "SOME_DIR";
// デフォルトのファイル一覧
const DEFAULT_FILES = [
"projectbrief.md",
"productContext.md",
"activeContext.md",
"systemPatterns.md",
"techContext.md",
"progress.md",
];
// MCPサーバー設定
const server = new FastMCP({
name: "Memory Bank Loader",
version: "1.0.0",
});
// ツール定義
server.addTool({
name: "get_memory_bank",
description:
"memory-bankディレクトリのファイルを読み込み、一つの文字列として返す",
parameters: z.object({
files: z.array(z.string()).optional(),
}),
execute: async (params) => {
try {
const filesToRead = params.files || DEFAULT_FILES;
const contents: string[] = [];
for (const filename of filesToRead) {
try {
const filePath = path.join(MEMORY_BANK_DIR, filename);
const content = await fs.readFile(filePath, "utf-8");
contents.push(`# ${filePath}\n\n${content}\n\n---\n\n`);
} catch (fileError) {
console.error(`Error reading file ${filename}:`, fileError);
contents.push(
`# ${filename}\n\n**ファイルの読み込みに失敗しました**\n\n---\n\n`,
);
}
}
return JSON.stringify({
contents: contents.join(""),
files: filesToRead,
});
} catch (error) {
console.error("Error in get_memory_bank:", error);
return JSON.stringify({
error: "メモリーバンクファイルの読み込みに失敗しました",
message: error instanceof Error ? error.message : String(error),
});
}
},
});
// サーバー起動
server.start({
transportType: "stdio",
});
console.error("Memory Bank Loader MCP サーバーが起動しました");

動いた!これで Memory Bank 読み込みのために多段読み込みさせる必要はない。