File size: 5,901 Bytes
eec059a
 
 
 
 
 
 
 
c18045b
 
 
 
 
eec059a
 
 
c18045b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eec059a
 
c18045b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eec059a
 
 
 
c18045b
 
 
 
 
eec059a
 
 
c18045b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eec059a
 
c18045b
 
 
 
 
 
 
 
eec059a
 
 
 
c18045b
 
 
 
 
eec059a
 
 
c18045b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eec059a
 
c18045b
 
 
 
 
 
 
 
eec059a
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
{
  "name": "yourmemory",
  "title": "YourMemory",
  "description": "Persistent memory for AI agents with Ebbinghaus decay, hybrid BM25 + vector retrieval, and entity graph. MCP compatible. Works with Claude, Cursor, Cline, Windsurf.",
  "version": "1.4.25",
  "tools": [
    {
      "name": "recall_memory",
      "description": "Recall relevant memories using hybrid BM25 + vector retrieval with entity graph expansion. Returns top-k memories ranked by relevance, with graph-expanded neighbours included.",
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "The search query to find relevant memories. Use keywords from the current task or conversation."
          },
          "user_id": {
            "type": "string",
            "description": "Unique identifier for the user whose memories to search."
          },
          "top_k": {
            "type": "number",
            "description": "Number of top memories to return. Defaults to 5.",
            "default": 5
          },
          "current_path": {
            "type": "string",
            "description": "Optional file or directory path for spatial memory boost. Memories tagged with this path score higher."
          }
        },
        "required": ["query", "user_id"]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "memoriesFound": { "type": "number", "description": "Total number of memories returned." },
          "context": { "type": "string", "description": "Concatenated memory content ready to inject into context." },
          "memories": {
            "type": "array",
            "description": "List of memory objects ranked by relevance.",
            "items": {
              "type": "object",
              "properties": {
                "id": { "type": "string" },
                "content": { "type": "string" },
                "category": { "type": "string" },
                "similarity": { "type": "number" },
                "score": { "type": "number" },
                "strength": { "type": "number" }
              }
            }
          }
        }
      }
    },
    {
      "name": "store_memory",
      "description": "Store a new memory. Automatically deduplicates, embeds, and indexes with BM25 and entity graph edges. Skips exact duplicates and bumps recall count instead.",
      "annotations": {
        "readOnlyHint": false,
        "openWorldHint": false
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "The memory content to store. Write as a single factual sentence: 'Sachit prefers Python' or 'The project uses DuckDB'."
          },
          "user_id": {
            "type": "string",
            "description": "Unique identifier for the user this memory belongs to."
          },
          "importance": {
            "type": "number",
            "description": "Importance score from 0.0 to 1.0. Controls decay rate — higher importance = slower decay. Use 0.9 for core facts, 0.7 for preferences, 0.5 for regular facts, 0.2 for transient context.",
            "minimum": 0.0,
            "maximum": 1.0,
            "default": 0.7
          },
          "category": {
            "type": "string",
            "description": "Memory category controlling decay half-life. Options: 'fact' (~24 days), 'strategy' (~38 days), 'assumption' (~19 days), 'failure' (~11 days).",
            "enum": ["fact", "strategy", "assumption", "failure"],
            "default": "fact"
          },
          "visibility": {
            "type": "string",
            "description": "Visibility scope. 'shared' means all agents can read it. 'private' means only the storing agent can read it.",
            "enum": ["shared", "private"],
            "default": "shared"
          }
        },
        "required": ["content", "user_id"]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "memory_id": { "type": "string", "description": "Unique ID of the stored memory." },
          "status": { "type": "string", "description": "Result status: 'stored', 'duplicate_bumped', or 'merged'." },
          "content": { "type": "string", "description": "The stored memory content." }
        }
      }
    },
    {
      "name": "update_memory",
      "description": "Update an existing memory by ID. Re-embeds the new content, replaces the old memory, and logs the change to the audit trail.",
      "annotations": {
        "readOnlyHint": false,
        "openWorldHint": false
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "memory_id": {
            "type": "string",
            "description": "The unique ID of the memory to update. Obtain this from a prior recall_memory call."
          },
          "new_content": {
            "type": "string",
            "description": "The updated memory content. Write as a single factual sentence replacing the old content."
          },
          "importance": {
            "type": "number",
            "description": "Updated importance score from 0.0 to 1.0.",
            "minimum": 0.0,
            "maximum": 1.0,
            "default": 0.7
          }
        },
        "required": ["memory_id", "new_content"]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "memory_id": { "type": "string", "description": "ID of the updated memory." },
          "status": { "type": "string", "description": "Result status: 'updated'." },
          "content": { "type": "string", "description": "The new memory content after update." }
        }
      }
    }
  ]
}