🚀 Memory Bank MCP Server
Memory Bank MCP Serverは、MCPプロトコルに基づくメモリバンクサーバーです。多プロジェクトの隔離とMarkdown形式のドキュメント管理をサポートし、大型言語モデル(LLM)のツール呼び出しに適しています。
✨ 主な機能
- MCPプロトコル準拠:Model Context Protocolの仕様に完全に準拠しており、大規模モデルから直接呼び出すことができます。
- 多プロジェクト隔離:複数のプロジェクトを隔離して管理でき、各プロジェクトのタスクや進捗などの情報は別々に保存されます。
- Markdown形式:すべてのプロジェクトドキュメントはMarkdown形式で保存され、編集と保守が容易です。
- Webインターフェース:直感的なWeb管理インターフェースを提供し、プロジェクトドキュメントを表示および編集できます。
- 柔軟なルールシステム:グローバルルールとプロジェクト固有のルールの設定をサポートし、プロジェクトルールがグローバルルールよりも優先されます。
- インポート/エクスポート機能:プロジェクトレベルでのデータのインポートとエクスポートをサポートします。
- データベース不要:ファイルシステムを使用して保存するため、デプロイの敷居が低くなります。
🔧 技術詳細
Memory Bank MCP Serverはモジュール化設計を採用しており、主に以下のコンポーネントで構成されています。
- MCPサーバー:MCPプロトコルを実装し、LLMが呼び出すためのツールインターフェースを提供します。
- Webサーバー:REST APIとフロントエンドインターフェースを提供します。
- ファイルストレージシステム:JSONファイルとMarkdownファイルを使用してデータを永続化します。
- プロジェクト管理システム:異なるプロジェクトのデータとルールを隔離します。
📦 インストール
前提条件
- Node.js 16+ (推奨: 18+)
- npm 7+ または yarn 1.22+
インストール手順
- コードリポジトリをクローンします。
git clone https://github.com/your-username/memory-bank-mcp-server.git
cd memory-bank-mcp-server
- 依存関係をインストールします。
npm install
- プロジェクトをビルドします。
npm run build
- サーバーを起動します。
npm start
npm start -- web
npm start -- mcp
環境変数
.env
ファイルを作成するか、環境変数を設定することで、サーバーを構成できます。
PORT=3000 # Webサーバーのポート
ROOT_DIR=/app/data # データ保存のルートディレクトリ
SESSION_SECRET=your-secret-key # セッションキー
📚 ドキュメント
データ保存
サーバーはファイルシステムを使用してデータを保存し、主に以下のファイルとディレクトリが含まれます。
data/
├── projects.json # プロジェクトのメタデータ
├── documents.json # ドキュメントのメタデータ
├── rules.json # ルールのメタデータ
├── projects/ # プロジェクトファイルのディレクトリ
│ ├── {project-id}/ # 単一のプロジェクトディレクトリ
│ │ ├── projectbrief.md # プロジェクトの概要
│ │ ├── activeContext.md # 現在のコンテキスト
│ │ ├── tasks.md # タスクリスト
│ │ └── ... # その他のドキュメント
├── templates/ # ドキュメントテンプレートのディレクトリ
Markdownファイル形式
プロジェクトドキュメントはMarkdown形式で保存され、主なドキュメントタイプは以下の通りです。
- projectbrief.md - プロジェクトの概要
# プロジェクトの概要
## プロジェクト名
## 目標
## 要件
## 技術スタック
## タイムライン
- tasks.md - タスクの追跡
# タスク
## 未着手のタスク
- [ ] タスク1
- [ ] タスク2
## 進行中のタスク
- [ ] タスク3
## 完了したタスク
- [x] タスク4
APIリファレンス
サーバーは以下の主要なAPIインターフェースを提供します。
プロジェクト管理
GET /api/projects
- すべてのプロジェクトを取得します。
GET /api/projects/:id
- プロジェクトの詳細を取得します。
POST /api/projects
- 新しいプロジェクトを作成します。
PUT /api/projects/:id
- プロジェクトを更新します。
DELETE /api/projects/:id
- プロジェクトを削除します。
ドキュメント管理
GET /api/projects/:projectId/documents
- プロジェクトのドキュメントリストを取得します。
GET /api/projects/:projectId/documents/:type
- ドキュメントの内容を取得します。
PUT /api/projects/:projectId/documents/:type
- ドキュメントの内容を更新します。
ルール管理
GET /api/projects/:projectId/rules
- プロジェクトのルールリストを取得します。
GET /api/rules/:id
- ルールの内容を取得します。
POST /api/rules
- 新しいルールを作成します。
PUT /api/rules/:id
- ルールを更新します。
DELETE /api/rules/:id
- ルールを削除します。
MCPツールインターフェース
サーバーは以下のMCPツールインターフェースを提供し、大規模モデルによる呼び出しをサポートしています。
list_projects
- すべてのプロジェクトを取得します。
create_project
- 新しいプロジェクトを作成します。
update_project
- プロジェクトを更新します。
delete_project
- プロジェクトを削除します。
list_documents
- プロジェクトのドキュメントリストを取得します。
get_document
- ドキュメントの内容を取得します。
update_document
- ドキュメントの内容を更新します。
list_rules
- プロジェクトのルールリストを取得します。
get_rule
- ルールの内容を取得します。
create_rule
- 新しいルールを作成します。
update_rule
- ルールの内容を更新します。
delete_rule
- ルールを削除します。
Cursorとの連携
設定手順
- MCPサーバーを起動します。
npm start -- mcp
- Cursorで設定を開き、「AI設定」を見つけます。
- Tool Providersセクションで、カスタムツールプロバイダーを追加します。
- 名前: Memory Bank
- 説明: 多プロジェクトMarkdownドキュメント管理ツール
- コマンド:
node [あなたのインストールパス]/memory-bank-mcp-server/dist/index.js mcp
- 「有効にする」をチェックします。
- 設定を保存し、Cursorを再起動します。
- これで、Cursor内で以下のようなコマンドを使用してMemory Bankを呼び出すことができます。
使用Memory Bank创建一个新项目,名称为"我的项目",描述为"这是我的第一个项目"
cursor-memory-bankとの違いと改善点
元のcursor-memory-bankプロジェクトと比較して、このプロジェクトの主な違いと改善点は以下の通りです。
- MCPプロトコルサポート:完全なMCPプロトコルを実装しており、大規模モデルから直接呼び出すことができます。
- 多プロジェクト隔離:複数のプロジェクトを管理でき、各プロジェクトは独立したドキュメントとルールを持ちます。
- Webインターフェース:視覚的なWeb管理インターフェースを提供します。
- ルールシステム:グローバルルールとプロジェクト固有のルールの設定をサポートします。
- より柔軟なドキュメント管理:カスタムドキュメントタイプとテンプレートをサポートします。
- モジュール化設計:モジュール化アーキテクチャを採用しており、拡張と保守が容易です。
ベストプラクティス
- ドキュメントの命名:各ドキュメントに明確で一貫した命名規則を使用します。
- プロジェクト構造:各プロジェクトに一貫したドキュメント構造を作成します。
- ルール管理:グローバルルールには一般的なルールを設定し、プロジェクトルールには特定のプロジェクトのルールを設定します。
- 定期的なバックアップ:定期的にプロジェクトデータをエクスポートしてバックアップします。
- Markdown形式:Markdownの形式特性(見出しの階層、リスト、テーブルなど)を利用して、ドキュメントに構造を持たせます。
注意事項
- ファイルの変更は即座に反映され、サーバーを再起動する必要はありません。
- プロジェクトを削除すると、そのプロジェクトのすべてのドキュメントとルールが削除され、この操作は取り消せません。
- プロジェクトIDは作成後に変更できません。
- ドキュメントの内容はUTF - 8エンコーディングで保存されます。
トラブルシューティング
- MCPサーバーへの接続に失敗した場合:コマンドパスが正しいことを確認し、サーバーが起動していることを確認します。
- Webインターフェースにアクセスできない場合:ポートが使用中でないことを確認し、サーバーが起動していることを確認します。
- ドキュメントの保存に失敗した場合:ファイルシステムの権限を確認し、ディレクトリに書き込み可能であることを確認します。
- プロジェクトのインポートに失敗した場合:インポートファイルの形式が正しいことを確認します。
将来の計画
- ユーザー認証システムの追加
- リアルタイムの共同編集のサポート
- より多くのドキュメントタイプのテンプレートの追加
- ドキュメントのバージョン履歴のサポート
- 検索機能の追加
- より多くのインポート/エクスポート形式のサポート
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルを参照してください。
貢献
問題報告、機能提案、コードの貢献を歓迎します。行いたい変更については、まずissueを作成して議論してください。
APIリファレンス
プロジェクト管理
すべてのプロジェクトを取得する
GET /api/projects
リクエスト例:
fetch('/api/projects')
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": [
{
"id": "project-123",
"name": "示例项目",
"description": "这是一个示例项目",
"createdAt": "2023-11-30T08:15:30Z",
"updatedAt": "2023-11-30T10:22:45Z"
},
{
"id": "project-456",
"name": "测试项目",
"description": "用于测试的项目",
"createdAt": "2023-11-29T14:25:10Z",
"updatedAt": "2023-11-29T16:30:22Z"
}
]
}
新しいプロジェクトを作成する
POST /api/projects
リクエスト例:
fetch('/api/projects', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '新项目',
description: '这是一个新项目'
})
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "project-789",
"name": "新项目",
"description": "这是一个新项目",
"createdAt": "2023-12-01T09:45:12Z",
"updatedAt": "2023-12-01T09:45:12Z",
"documents": [
"projectbrief.md",
"tasks.md",
"activeContext.md"
]
}
}
プロジェクトの詳細を取得する
GET /api/projects/:id
リクエスト例:
fetch('/api/projects/project-123')
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "project-123",
"name": "示例项目",
"description": "这是一个示例项目",
"createdAt": "2023-11-30T08:15:30Z",
"updatedAt": "2023-11-30T10:22:45Z"
}
}
プロジェクトを更新する
PUT /api/projects/:id
リクエスト例:
fetch('/api/projects/project-123', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '更新的项目名称',
description: '更新的项目描述'
})
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "project-123",
"name": "更新的项目名称",
"description": "更新的项目描述",
"updatedAt": "2023-12-01T11:30:25Z"
}
}
プロジェクトを削除する
DELETE /api/projects/:id
リクエスト例:
fetch('/api/projects/project-123', {
method: 'DELETE'
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"success": true,
"message": "项目删除成功"
}
}
ドキュメント管理
プロジェクトのドキュメントリストを取得する
GET /api/projects/:projectId/documents
リクエスト例:
fetch('/api/projects/project-123/documents')
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": [
{
"id": "doc-001",
"name": "projectbrief.md",
"type": "projectbrief",
"updatedAt": "2023-11-30T09:20:15Z"
},
{
"id": "doc-002",
"name": "tasks.md",
"type": "tasks",
"updatedAt": "2023-11-30T10:15:30Z"
},
{
"id": "doc-003",
"name": "activeContext.md",
"type": "activeContext",
"updatedAt": "2023-11-30T11:05:45Z"
}
]
}
ドキュメントの内容を取得する
GET /api/projects/:projectId/documents/:type
リクエスト例:
fetch('/api/projects/project-123/documents/tasks')
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "doc-002",
"name": "tasks.md",
"content": "# 任务列表\n\n## 待办任务\n- [ ] [高] 实现用户认证\n- [ ] [中] 添加日志记录\n\n## 进行中任务\n- [-] 完善错误处理 (60%)\n\n## 已完成任务\n- [x] 设计数据模型\n- [x] 创建项目结构",
"type": "tasks",
"updatedAt": "2023-11-30T10:15:30Z",
"html": "<h1>任务列表</h1>..."
}
}
ドキュメントの内容を更新する
PUT /api/projects/:projectId/documents/:type
リクエスト例:
fetch('/api/projects/project-123/documents/tasks', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
content: "# 任务列表\n\n## 待办任务\n- [ ] [高] 实现用户认证\n- [ ] [中] 添加日志记录\n- [ ] [低] 优化性能\n\n## 进行中任务\n- [-] 完善错误处理 (60%)\n\n## 已完成任务\n- [x] 设计数据模型\n- [x] 创建项目结构"
})
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "doc-002",
"name": "tasks.md",
"type": "tasks",
"updatedAt": "2023-12-01T14:25:45Z",
"message": "文档更新成功"
}
}
ルール管理
プロジェクトのルールリストを取得する
GET /api/projects/:projectId/rules
リクエスト例:
fetch('/api/projects/project-123/rules')
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"projectRules": [
{
"id": "rule-001",
"name": "项目规范",
"description": "项目特定的规范",
"isGlobal": false
}
],
"globalRules": [
{
"id": "rule-global-001",
"name": "文档格式",
"description": "Markdown文档格式规范",
"isGlobal": true
},
{
"id": "rule-global-002",
"name": "工作流程",
"description": "标准工作流程规范",
"isGlobal": true
}
]
}
}
ルールの内容を取得する
GET /api/rules/:ruleId
リクエスト例:
fetch('/api/rules/rule-001')
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "rule-001",
"name": "项目规范",
"content": "# 项目规范\n\n## 命名规则\n\n1. 文件名使用小写字母和连字符\n2. 变量使用驼峰式命名\n3. 常量使用大写字母和下划线\n\n## 代码风格\n\n1. 使用2个空格缩进\n2. 行末不留空格\n3. 文件末尾保留一个空行",
"description": "项目特定的规范",
"isGlobal": false,
"projectId": "project-123"
}
}
新しいルールを作成する
POST /api/rules
リクエスト例:
fetch('/api/rules', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '新规则',
content: '# 新规则\n\n## 规则内容\n\n1. 规则项目1\n2. 规则项目2',
isGlobal: false,
projectId: 'project-123',
description: '项目特定的新规则'
})
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "rule-002",
"name": "新规则",
"description": "项目特定的新规则",
"isGlobal": false,
"projectId": "project-123",
"message": "规则创建成功"
}
}
ルールを更新する
PUT /api/rules/:ruleId
リクエスト例:
fetch('/api/rules/rule-001', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
content: '# 更新的项目规范\n\n## 命名规则\n\n1. 文件名使用小写字母和连字符\n2. 变量使用驼峰式命名\n3. 常量使用大写字母和下划线\n\n## 代码风格\n\n1. 使用2个空格缩进\n2. 行末不留空格\n3. 文件末尾保留一个空行\n\n## 新增部分\n\n1. 新增规则1\n2. 新增规则2',
description: '更新的项目规范描述'
})
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"id": "rule-001",
"name": "项目规范",
"description": "更新的项目规范描述",
"updatedAt": "2023-12-01T16:10:30Z",
"message": "规则更新成功"
}
}
ルールを削除する
DELETE /api/rules/:ruleId
リクエスト例:
fetch('/api/rules/rule-001', {
method: 'DELETE'
})
.then(response => response.json())
.then(data => console.log(data));
レスポンス例:
{
"status": "success",
"data": {
"success": true,
"message": "规则删除成功"
}
}
MCPツールインターフェース
Memory Bank MCPサーバーは、MCPプロトコルを介して以下のツールインターフェースの呼び出しをサポートしています。
基本ツール
list_projects
- すべてのプロジェクトのリストを取得します。
create_project
- 新しいプロジェクトを作成します。
update_project
- プロジェクトの情報を更新します。
delete_project
- プロジェクトを削除します。
list_documents
- プロジェクトのドキュメントリストを取得します。
get_document
- ドキュメントの内容を取得します。
update_document
- ドキュメントの内容を更新します。
list_rules
- プロジェクトのルールリストを取得します。
get_rule
- ルールの内容を取得します。
create_rule
- 新しいルールを作成します。
update_rule
- ルールの内容を更新します。
delete_rule
- ルールを削除します。
ワークフローモードツール
VANモード - プロジェクトの検証と初期化
van_init
- プロジェクトを初期化します。プロジェクト名を指定しない場合はデフォルト名が使用されます。
van_verify
- プロジェクトの状態とファイルの完全性を検証します。
PLANモード - 計画策定とタスク分解
plan_get_tasks
- 現在のタスクリストを取得します。
plan_add_task
- 新しいタスクをタスクリストに追加します。
plan_update_tasks
- タスク計画ドキュメントを更新します。
CREATIVEモード - 創意工夫と方案設計
creative_add_idea
- 創意記録を作成します。
creative_get_ideas
- 創意リストを取得します。
creative_update_design
- システム設計ドキュメントを更新します。
IMPLEMENTモード - 実施と開発
implement_update_progress
- 開発の進捗を更新します。
implement_add_note
- 実装の詳細を記録します。
implement_update_context
- アクティブなコンテキストドキュメントを更新します。
REFLECTモード - 振り返りと改善
reflect_create
- プロジェクトの振り返り記録を作成します。
reflect_get_history
- 過去の振り返り記録を取得します。
reflect_update_progress
- 進捗ドキュメントを更新します。
ARCHIVEモード - アーカイブと知識の蓄積
archive_completed_tasks
- 完了したタスクをアーカイブします。
archive_generate_summary
- プロジェクトの要約レポートを生成します。
archive_export_project
- プロジェクトのドキュメントをエクスポートします。
各ツールインターフェースの詳細な使用方法とパラメータの説明については、使用教程を参照してください。
ライセンス
MIT