📋 目次
データモデル
コアタイプ
type Memory struct {
ID string `json:"id"` // Auto-generated: memory_20250127123456
Category string `json:"category"` // User-defined category
Key string `json:"key"` // Optional user-friendly alias
Value string `json:"value"` // Stored content
Tags []string `json:"tags"` // Related tags for search
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type OperationLog struct {
Timestamp time.Time `json:"timestamp"`
OperationID string `json:"operation_id"`
Operation string `json:"operation"` // save, update, delete
Key string `json:"key,omitempty"`
Before *Memory `json:"before,omitempty"`
After *Memory `json:"after,omitempty"`
Success bool `json:"success"`
Error string `json:"error,omitempty"`
}
検索タイプ(Phase 2)
type SearchResult struct {
Memory *Memory `json:"memory"`
Score float64 `json:"score"` // Relevance score (0.0 - 1.0)
}
type SearchQuery struct {
Query string `json:"query"` // Search query string
Category string `json:"category,omitempty"` // Optional category filter
}
Obsidian連携タイプ(Phase 2)
type ImportResult struct {
TotalFiles int `json:"total_files"`
ImportedFiles int `json:"imported_files"`
SkippedFiles int `json:"skipped_files"`
DuplicateFiles int `json:"duplicate_files"`
Errors []string `json:"errors"`
ImportedMemories []*Memory `json:"imported_memories"`
DryRun bool `json:"dry_run"`
}
type GeneratedNote struct {
Title string `json:"title"`
Content string `json:"content"`
OutputPath string `json:"output_path"`
MemoryCount int `json:"memory_count"`
RelatedCount int `json:"related_count"`
UsedMemories []*Memory `json:"used_memories"`
RelatedLinks []string `json:"related_links"`
GeneratedAt time.Time `json:"generated_at"`
TemplateUsed string `json:"template_used"`
}
MCPツールリファレンス
コアメモリツール
1. save_memory
カテゴリ、キー、値を指定して情報を保存します。
パラメータ:
category(string, 必須): メモリのカテゴリvalue(string, 必須): 保存する値key(string, オプション): メモリのユーザーフレンドリーな別名
例:
{
"category": "personal",
"value": "誕生日は1990年5月15日",
"key": "birthday"
}
2. get_memory
キーまたはIDでメモリを取得します。
パラメータ:
key(string, 必須): 取得するメモリキーまたはID
例:
{
"key": "birthday"
}
3. list_memories
すべてのメモリを一覧表示、またはカテゴリで絞り込み(時系列ソート)。
パラメータ:
category(string, オプション): カテゴリフィルタ
例:
{
"category": "personal"
}
高度な検索ツール(Phase 2)
4. search_memories
関連度スコアリング付きの高度なテキスト検索。
パラメータ:
query(string, 必須): 検索クエリ文字列category(string, オプション): オプションのカテゴリフィルタ
機能:
- メモリコンテンツ全体にわたる全文検索
- 曖昧マッチング付き関連度スコアリング
- 大文字小文字を区別しない検索
- カテゴリフィルタリングサポート
例:
{
"query": "プログラミング Go言語",
"category": "learning"
}
Obsidian連携ツール(Phase 2)
5. obsidian_import
Obsidianボルトのノートをメモリストレージにインポートします。
パラメータ:
import_type(string, 必須): インポート種類: 'vault', 'category', または 'file'path(string, オプション): 特定ファイルパス('file'タイプ用)またはカテゴリ名('category'タイプ用)dry_run(boolean, オプション): 保存せずにインポートをプレビュー(デフォルト: false)category_mapping(object, オプション): フォルダ名をカスタムカテゴリにマッピングskip_duplicates(boolean, オプション): 重複インポートをスキップ(デフォルト: true)
例:
{
"import_type": "vault",
"dry_run": false,
"skip_duplicates": true,
"category_mapping": {
"Daily Notes": "journal",
"Work": "professional"
}
}
6. generate_obsidian_note
テンプレートを使用してメモリからObsidianノートを生成します。
パラメータ:
template(string, 必須): テンプレートタイプ: 'daily', 'summary', または 'report'title(string, 必須): 生成されるノートのタイトルcategory(string, オプション): メモリのカテゴリフィルタoutput_path(string, オプション): カスタム出力ファイルパスinclude_related(boolean, オプション): 関連メモリを含める(デフォルト: true)
利用可能なテンプレート:
- daily: 日次ノート用の時系列メモリ整理
- summary: サマリー用のカテゴリベースメモリ編集
- report: 統計付きの構造化プロジェクト文書
例:
{
"template": "daily",
"title": "今日の学習まとめ",
"category": "learning",
"include_related": true
}
設定
環境変数
MORY_DATA_DIR: カスタムデータディレクトリパスMORY_OBSIDIAN_VAULT_PATH: 連携用Obsidianボルトへのパス
設定ファイル
~/.mory/config.json を作成するか、環境変数で指定:
{
"data_dir": "/custom/path/to/data",
"obsidian": {
"vault_path": "/path/to/obsidian/vault"
}
}
Claude Desktop連携
Claude Desktop設定に追加:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mory": {
"command": "/full/path/to/mory/bin/mory"
}
}
}
ストレージアーキテクチャ
ファイル構造
~/.mory/ # デフォルトデータディレクトリ
├── memories.json # メモリストレージ(JSON)
├── operations.log # 操作監査ログ(JSONL)
└── config.json # 設定ファイル
ストレージ機能
- JSONベース: シンプルで人間が読める形式
- ファイルロック: 同時アクセス保護
- 操作ログ: 完全な監査証跡
- バックアップフレンドリー: プレーンテキストファイル、バックアップ・復元が簡単
キー生成戦略
// 自動生成IDフォーマット: memory_20250127123456
id := fmt.Sprintf("memory_%s", time.Now().Format("20060102150405"))
使用例
基本メモリ操作
// メモリの保存
save_memory: category="learning", key="go-basics", value="Goのチャンネルとゴルーチンについて学習"
// メモリの取得
get_memory: key="go-basics"
// カテゴリ別メモリ一覧
list_memories: category="learning"
高度な検索
// 全文検索
search_memories: query="ゴルーチン チャンネル", category="learning"
// 全カテゴリ横断検索
search_memories: query="API設計パターン"
Obsidian連携
// ボルト全体のインポート
obsidian_import: import_type="vault", skip_duplicates=true
// マッピング付き特定カテゴリのインポート
obsidian_import: import_type="category", path="Projects",
category_mapping={"Projects": "work"}
// 日次ノートの生成
generate_obsidian_note: template="daily", title="今日の進捗",
category="work", include_related=true
// サマリーレポートの生成
generate_obsidian_note: template="report", title="週間まとめ",
output_path="reports/week-summary.md"
エラーハンドリング
一般的なエラータイプ
- バリデーションエラー: 無効なパラメータや必須フィールドの不足
- ストレージエラー: ファイルシステムの問題、権限、ディスク容量
- 設定エラー: 無効な設定、Obsidianボルトパスの不足
- インポートエラー: Markdownパース問題、ファイルアクセス問題
エラーレスポンス形式
{
"error": "メモリが見つかりません",
"details": "キー 'nonexistent' のメモリが見つかりません",
"code": "MEMORY_NOT_FOUND"
}
ベストプラクティス
- 処理前に常に入力を検証
- 実行可能な情報と共に明確なエラーメッセージを提供
- デバッグと監査目的で操作をログ記録
- ファイルロックで同時アクセスを適切に処理
- インポート操作前にObsidian設定を検証
パフォーマンス考慮事項
検索パフォーマンス
- インデックス化: 高速テキスト検索のためのインメモリインデックス
- キャッシュ: 繰り返しクエリのための検索結果キャッシュ
- ページ化: 大きな結果セットを効率的に処理
メモリ使用量
- 遅延読み込み: オンデマンドでのメモリ読み込み
- メモリ制限: 大きな結果セットの自動クリーンアップ
- 同時安全性: 適切なロックによるスレッドセーフ操作
スケーラビリティ
- ファイルベースストレージ: 数千のメモリに適している
- 検索最適化: 関連度スコアリングのための効率的アルゴリズム
- 将来の最適化: データベースバックエンド移行への準備完了
実装詳細については、internal/ ディレクトリのソースコードを参照してください。
セットアップ手順については、QUICKSTART.mdを参照してください。
貢献ガイドラインについては、CONTRIBUTING.mdを参照してください。