📷

エージェントの記憶混濁を回避するマルチserver-memory MCP運用

に公開

Vibeコーディング、してますか?

GitHub Copilot、Cline、Cursor Agent、Claude Codeと世の中はもはやベイプを吸いながらエモい曲を流しつつチルしてコードが生成されるのを眺めるのがモダンとされるようになってきました。

エージェント活用の課題:コンテキスト

エージェントを活用するうえで欠かせないのがセッション間のコンテキスト保持です。コンテキストを渡す方法としては毎度プロンプトに明示するか、ルールを使うか、メモリ系のMCPを使うかという選択肢があります。中でもエージェントが動的にコンテキストを操作できるメモリMCP(例としてAnthropicが提供しているserver-memoryやOpenMemoryなど)が非常に便利です。とりわけserver-memoryは知識グラフをJSONファイルに保存するシンプルは作りなため導入が簡単ですが、一つのMCPサーバー設定のみにすべてを賄わせているとあっという間に関係のない知識が蓄積していってしまいます。

server-memoryをマルチに運用する

Claude Codeでは --mcp-config を使って追加のMCP設定を渡すことができます。これを活用して $HOME/.claude/mcp.json を定義してそこにプロジェクト横断的に蓄積したい知識(ユーザーについての情報やローカル環境に関する情報など)を保存するMCPの定義を作ります。例えば私は以下のように横断的に使いたい複数のMCPもここに書いてあります。

{
  "mcpServers": {
    "agent-memory": {
      "command": "mise",
      "args": [
        "exec",
        "node@latest",
        "--",
        "npx",
        "-y",
        "@modelcontextprotocol/server-memory"
      ],
      "env": {
        "MEMORY_FILE_PATH": "/Users/nano/.claude/agent-memory.json"
      },
      "alwaysAllow": true
    },
    "fetch": {
      "command": "mise",
      "args": ["exec", "node@latest", "--", "uvx", "mcp-server-fetch"],
      "alwaysAllow": true
    },
    "time": {
      "command": "mise",
      "args": [
        "exec",
        "uv@latest",
        "--",
        "uvx",
        "mcp-server-time",
        "--local-timezone=Asia/Tokyo"
      ],
      "alwaysAllow": true
    },
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ]
    }
  }
}

あとは各プロジェクトごとに設定できるローカルMCPの設定として .mcp.json を作成してそこにプロジェクトごとのメモリMCPを記載します。

.mcp.json
{
  "mcpServers": {
    "project-memory": {
      "command": "mise",
      "args": [
        "exec",
        "node@latest",
        "--",
        "npx",
        "-y",
        "@modelcontextprotocol/server-memory"
      ],
      "env": {
        "MEMORY_FILE_PATH": "/Users/nano/github.com/ktnyt/sfs/project-memory.json"
      },
      "alwaysAllow": true
    }
  }
}

こうすることで異なるプロジェクトの知識に汚染されることもありませんし、余計にコンテキストを消費することもありません。Claude Code以外でやる方法についてはわからないですができそうであれば試してみる価値はあると思います。Happy Vibe Coding。

Discussion