OpenMemory MCPをゼロから構築する方法【完全ガイド】

技術メモ

この記事の目的

  • AIエージェント用の“メモリ”共有プロトコル OpenMemory MCP を自前で構築する方法をわかりやすく解説します。
  • Ubuntu/macOS・Docker・FastAPI・Redis/PostgreSQL・OpenAI API の組み合わせでサクッと動かす最小構成を紹介します。

目次

  1. OpenMemory MCPとは?
  2. 全体アーキテクチャ
  3. 事前準備(環境・ツール)
  4. 構築ステップ
    4-1. Redis/PostgreSQL の立ち上げ
    4-2. FastAPI で MCP API を実装
    4-3. LLM との連携実装
    4-4. クライアント側の処理フロー
  5. CLI/GUIへの拡張
  6. 参考になる OSS プロジェクト
  7. まとめ

1. OpenMemory MCPとは?

LLM(大規模言語モデル)がユーザーごとのコンテキスト(メモリ)を読み書きするための簡易プロトコルです。複数の AI エージェント/チャットボット間で文脈を共有し、会話を継続的にパーソナライズできます。


2. 全体アーキテクチャ

コンポーネント役割推奨技術
LLMプロンプト処理OpenAI GPT / Claude / LLaMA
MCP ストアメモリ保存Redis もしくは PostgreSQL
MCP APIGET/POST 経由でメモリを管理FastAPI(Python)
クライアント SDKLLM 呼び出し+メモリ更新Python / Node.js
UI or CLIユーザーの入出力Web(Next.js, Flutter など)/ターミナル

3. 事前準備

  1. OS: Ubuntu 22.04 または macOS
  2. 言語: Python 3.10+(Node.js 18+でも可)
  3. 必須ツール: # パッケージ更新&必要ツール sudo apt update && sudo apt install -y \ docker docker-compose git python3-pip

4. 構築ステップ

4-1. メモリストアを立ち上げる

■ Redis を使う場合

docker run -d --name mcp-redis -p 6379:6379 redis

■ PostgreSQL を使う場合

docker run -d --name mcp-postgres \
-e POSTGRES_USER=mcpuser \
-e POSTGRES_PASSWORD=mcppass \
-e POSTGRES_DB=mcpdb \
-p 5432:5432 postgres

4-2. FastAPI で MCP API を実装

1) 依存パッケージをインストール

pip install fastapi uvicorn redis sqlalchemy psycopg2-binary

2) プロジェクト構成

openmemory-mcp/
├─ main.py
└─ memory_store.py

3) memory_store.py(Redis 例)

import redis
r = redis.Redis(host="localhost", port=6379, decode_responses=True)

def get_memory(user_id: str) -> str:
return r.get(user_id) or ""

def set_memory(user_id: str, memory: str):
r.set(user_id, memory)

4) main.py

from fastapi import FastAPI, Request
from memory_store import get_memory, set_memory

app = FastAPI()

@app.get("/memory/{user_id}")
def read_memory(user_id: str):
return {"user_id": user_id, "memory": get_memory(user_id)}

@app.post("/memory/{user_id}")
async def update_memory(user_id: str, request: Request):
data = await request.json()
set_memory(user_id, data.get("memory", ""))
return {"status": "ok"}

5) サーバー起動

uvicorn main:app --reload --port 8000

4-3. LLM と接続する

pip install openai
import openai

openai.api_key = "YOUR_OPENAI_API_KEY"

def ask_llm(prompt: str, memory: str):
full_prompt = memory + "\n\nUser: " + prompt
res = openai.ChatCompletion.create(
model="gpt-4o",
messages=[
{"role": "system", "content": memory},
{"role": "user", "content": prompt}
]
)
return res.choices[0].message["content"]

4-4. クライアント側の処理フロー

user_id = "user-123"
user_prompt = "今日の天気は?"

# 1. メモリ取得
memory = get_memory(user_id)

# 2. LLM へ問い合わせ
reply = ask_llm(user_prompt, memory)

# 3. 新しいメモリを保存
new_memory = memory + f"\nUser: {user_prompt}\nAssistant: {reply}"
set_memory(user_id, new_memory)

print("Assistant:", reply)

5. CLI/GUI への拡張

インターフェース技術候補ポイント
CLIPython cmd, Textualターミナル派に最適
Web UINext.js / Flutter WebAPI 経由でシームレスに接続
モバイルFlutteriOS/Android ワンソース運用可

6. 参考になるオープンソース

  • LangChain – LLM チェーン構築
  • AutoGen – 複数エージェント連携
  • MemGPT – 長期メモリ管理の実装例
  • OpenDevin – AI コーディングエージェント

7. まとめ

ステップやること
1Redis / PostgreSQL を Docker で立ち上げる
2FastAPI で /memory エンドポイントを作成
3LLM(GPT-4o など)とつないでメモリ付きでプロンプト処理
4クライアント側で GET → LLM → POST のループを実装

これで OpenMemory MCP の“最小 MVP”が完成です。
さらに LangChain と組み合わせてメモリの要約・トークナイズを行えば、長期対話でも破綻しない堅牢なエージェント基盤を構築できます。ぜひ試してみてください!

コメント

タイトルとURLをコピーしました