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 読み込みのために多段読み込みさせる必要はない。