ninaivagam 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +93 -0
  2. package/dist/config.d.ts +7 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +8 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/db/connection.d.ts +3 -0
  7. package/dist/db/connection.d.ts.map +1 -0
  8. package/dist/db/connection.js +24 -0
  9. package/dist/db/connection.js.map +1 -0
  10. package/dist/db/memory.model.d.ts +8 -0
  11. package/dist/db/memory.model.d.ts.map +1 -0
  12. package/dist/db/memory.model.js +13 -0
  13. package/dist/db/memory.model.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +21 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/server.d.ts +3 -0
  19. package/dist/server.d.ts.map +1 -0
  20. package/dist/server.js +12 -0
  21. package/dist/server.js.map +1 -0
  22. package/dist/tools/delete.d.ts +20 -0
  23. package/dist/tools/delete.d.ts.map +1 -0
  24. package/dist/tools/delete.js +35 -0
  25. package/dist/tools/delete.js.map +1 -0
  26. package/dist/tools/index.d.ts +5 -0
  27. package/dist/tools/index.d.ts.map +1 -0
  28. package/dist/tools/index.js +5 -0
  29. package/dist/tools/index.js.map +1 -0
  30. package/dist/tools/list.d.ts +21 -0
  31. package/dist/tools/list.d.ts.map +1 -0
  32. package/dist/tools/list.js +45 -0
  33. package/dist/tools/list.js.map +1 -0
  34. package/dist/tools/retrieve.d.ts +20 -0
  35. package/dist/tools/retrieve.d.ts.map +1 -0
  36. package/dist/tools/retrieve.js +52 -0
  37. package/dist/tools/retrieve.js.map +1 -0
  38. package/dist/tools/store.d.ts +22 -0
  39. package/dist/tools/store.d.ts.map +1 -0
  40. package/dist/tools/store.js +30 -0
  41. package/dist/tools/store.js.map +1 -0
  42. package/dist/types.d.ts +12 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +11 -0
  45. package/dist/types.js.map +1 -0
  46. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # ninaivagam
2
+
3
+ **ninaivagam** (Tamil: நினைவகம், "memory/remembrance") is an MCP server that gives AI coding agents (Claude Code, Cursor) persistent, project-scoped memory backed by MongoDB.
4
+
5
+ It stores structured knowledge *about software projects*: folder layouts, architecture decisions, tech stack, git branch strategy, coding conventions, in-progress tasks.
6
+
7
+ ---
8
+
9
+ ## Prerequisites
10
+
11
+ MongoDB must be running. Quick start with Docker:
12
+
13
+ ```bash
14
+ docker run -d -p 27017:27017 --name mongo mongo:7
15
+ ```
16
+
17
+ ---
18
+
19
+ ## Add to Claude Code
20
+
21
+ In `~/.claude/settings.json` (global) or `.claude/settings.json` (project):
22
+
23
+ ```json
24
+ {
25
+ "mcpServers": {
26
+ "ninaivagam": {
27
+ "command": "npx",
28
+ "args": ["-y", "ninaivagam"],
29
+ "env": {
30
+ "MONGO_URI": "mongodb://localhost:27017",
31
+ "DB_NAME": "agent-memory"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ Or if installed globally (`npm install -g ninaivagam`):
39
+
40
+ ```json
41
+ {
42
+ "mcpServers": {
43
+ "ninaivagam": {
44
+ "command": "ninaivagam",
45
+ "env": {
46
+ "MONGO_URI": "mongodb://localhost:27017"
47
+ }
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Add to Cursor
56
+
57
+ Open Cursor Settings > MCP > Add server:
58
+ - **Command:** `npx`
59
+ - **Args:** `["-y", "ninaivagam"]`
60
+ - **Env:** `MONGO_URI=mongodb://localhost:27017`
61
+
62
+ ---
63
+
64
+ ## Environment Variables
65
+
66
+ | Variable | Default | Description |
67
+ |---------------|-----------------------------|--------------------------------|
68
+ | `MONGO_URI` | `mongodb://localhost:27017` | MongoDB connection string |
69
+ | `DB_NAME` | `agent-memory` | MongoDB database name |
70
+ | `SERVER_NAME` | `ninaivagam` | Name reported in MCP handshake |
71
+
72
+ ---
73
+
74
+ ## MCP Tools
75
+
76
+ | Tool | Inputs | Purpose |
77
+ |-------------------|-----------------------------------------|------------------------------------|
78
+ | `store_memory` | projectId, category, key, value, tags? | Create or overwrite a memory entry |
79
+ | `retrieve_memory` | projectId, key, category? | Fetch one memory by key |
80
+ | `list_memories` | projectId, category?, tags?, limit? | List with optional filters |
81
+ | `delete_memory` | projectId, category, key | Remove a memory entry |
82
+
83
+ ---
84
+
85
+ ## Memory Categories
86
+
87
+ `architecture` · `stack` · `folder-structure` · `git` · `convention` · `task` · `decision` · `other`
88
+
89
+ ---
90
+
91
+ ## License
92
+
93
+ MIT
@@ -0,0 +1,7 @@
1
+ export declare const config: Readonly<{
2
+ MONGO_URI: string;
3
+ DB_NAME: string;
4
+ SERVER_NAME: string;
5
+ SERVER_VERSION: string;
6
+ }>;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;EAKjB,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,8 @@
1
+ import pkg from "../package.json" with { type: "json" };
2
+ export const config = Object.freeze({
3
+ MONGO_URI: process.env.MONGO_URI ?? "mongodb://localhost:27017",
4
+ DB_NAME: process.env.DB_NAME ?? "agent-memory",
5
+ SERVER_NAME: process.env.SERVER_NAME ?? "ninaivagam",
6
+ SERVER_VERSION: pkg.version,
7
+ });
8
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,2BAA2B;IAC/D,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,cAAc;IAC9C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,YAAY;IACpD,cAAc,EAAE,GAAG,CAAC,OAAO;CAC5B,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function connectDB(): Promise<void>;
2
+ export declare function disconnectDB(): Promise<void>;
3
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAS/C;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD"}
@@ -0,0 +1,24 @@
1
+ import mongoose from "mongoose";
2
+ import { config } from "../config.js";
3
+ export async function connectDB() {
4
+ if (mongoose.connection.readyState !== 0)
5
+ return;
6
+ try {
7
+ await mongoose.connect(config.MONGO_URI, { dbName: config.DB_NAME });
8
+ console.error("ninaivagam connected to MongoDB");
9
+ }
10
+ catch (err) {
11
+ console.error("[ninaivagam] Failed to connect to MongoDB:", err);
12
+ process.exit(1);
13
+ }
14
+ }
15
+ export async function disconnectDB() {
16
+ try {
17
+ await mongoose.disconnect();
18
+ console.error("[ninaivagam] Disconnected from MongoDB");
19
+ }
20
+ catch (err) {
21
+ console.error("[ninaivagam] Error during disconnect:", err);
22
+ }
23
+ }
24
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC;QAAE,OAAO;IACjD,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import mongoose from "mongoose";
2
+ import { type IMemory } from "../types.js";
3
+ export declare const Memory: mongoose.Model<IMemory, {}, {}, {}, mongoose.Document<unknown, {}, IMemory, {}, {}> & IMemory & {
4
+ _id: mongoose.Types.ObjectId;
5
+ } & {
6
+ __v: number;
7
+ }, any>;
8
+ //# sourceMappingURL=memory.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.model.d.ts","sourceRoot":"","sources":["../../src/db/memory.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAoB,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAgB9D,eAAO,MAAM,MAAM;;;;OAAkD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import mongoose, { Schema } from "mongoose";
2
+ import { MEMORY_CATEGORIES } from "../types.js";
3
+ const MemorySchema = new Schema({
4
+ projectId: { type: String, required: true, index: true },
5
+ category: { type: String, required: true, enum: MEMORY_CATEGORIES },
6
+ key: { type: String, required: true, maxlength: 100 },
7
+ value: { type: String, required: true },
8
+ tags: { type: [String], default: [] },
9
+ }, { timestamps: true });
10
+ // One key per category per project — store_memory upserts on this triple
11
+ MemorySchema.index({ projectId: 1, category: 1, key: 1 }, { unique: true });
12
+ export const Memory = mongoose.model("Memory", MemorySchema);
13
+ //# sourceMappingURL=memory.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.model.js","sourceRoot":"","sources":["../../src/db/memory.model.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAgB,MAAM,aAAa,CAAC;AAE9D,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B;IACE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACxD,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACnE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;IACrD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;CACtC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;AAEF,yEAAyE;AACzE,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAU,QAAQ,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { connectDB, disconnectDB } from "./db/connection.js";
4
+ import { server } from "./server.js";
5
+ async function main() {
6
+ await connectDB();
7
+ const transport = new StdioServerTransport();
8
+ await server.connect(transport);
9
+ console.error("[ninaivagam] MCP server running on stdio");
10
+ const shutdown = async () => {
11
+ await disconnectDB();
12
+ process.exit(0);
13
+ };
14
+ process.on("SIGINT", shutdown);
15
+ process.on("SIGTERM", shutdown);
16
+ }
17
+ main().catch((err) => {
18
+ console.error("[ninaivagam] Fatal error:", err);
19
+ process.exit(1);
20
+ });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,EAAE,CAAC;IAElB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare const server: McpServer;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,eAAO,MAAM,MAAM,WAGjB,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,12 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { config } from "./config.js";
3
+ import { storeMemorySchema, storeMemoryHandler, retrieveMemorySchema, retrieveMemoryHandler, listMemoriesSchema, listMemoriesHandler, deleteMemorySchema, deleteMemoryHandler, } from "./tools/index.js";
4
+ export const server = new McpServer({
5
+ name: config.SERVER_NAME,
6
+ version: config.SERVER_VERSION,
7
+ });
8
+ server.tool("store_memory", "Store or update a piece of project knowledge (architecture, stack, folder structure, git strategy, convention, task, decision, etc.)", storeMemorySchema, storeMemoryHandler);
9
+ server.tool("retrieve_memory", "Fetch a single memory entry by project and key", retrieveMemorySchema, retrieveMemoryHandler);
10
+ server.tool("list_memories", "List memory entries for a project, optionally filtered by category or tags", listMemoriesSchema, listMemoriesHandler);
11
+ server.tool("delete_memory", "Delete a memory entry by project, category, and key", deleteMemorySchema, deleteMemoryHandler);
12
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sIAAsI,EACtI,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,gDAAgD,EAChD,oBAAoB,EACpB,qBAAqB,CACtB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,4EAA4E,EAC5E,kBAAkB,EAClB,mBAAmB,CACpB,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,qDAAqD,EACrD,kBAAkB,EAClB,mBAAmB,CACpB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export declare const deleteMemorySchema: {
3
+ projectId: z.ZodString;
4
+ category: z.ZodEnum<["architecture", "stack", "folder-structure", "git", "convention", "task", "decision", "other"]>;
5
+ key: z.ZodString;
6
+ };
7
+ export declare function deleteMemoryHandler(input: z.infer<z.ZodObject<typeof deleteMemorySchema>>): Promise<{
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ isError?: undefined;
13
+ } | {
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError: boolean;
19
+ }>;
20
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/tools/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,kBAAkB,CAAC,CAAC;;;;;;;;;;;;GA0BvD"}
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ import { Memory } from "../db/memory.model.js";
3
+ import { MEMORY_CATEGORIES } from "../types.js";
4
+ export const deleteMemorySchema = {
5
+ projectId: z.string().min(1),
6
+ category: z.enum(MEMORY_CATEGORIES),
7
+ key: z.string().min(1),
8
+ };
9
+ export async function deleteMemoryHandler(input) {
10
+ try {
11
+ const result = await Memory.deleteOne({
12
+ projectId: input.projectId,
13
+ category: input.category,
14
+ key: input.key,
15
+ });
16
+ const deleted = result.deletedCount > 0;
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: deleted
22
+ ? `Memory deleted: project="${input.projectId}" category="${input.category}" key="${input.key}".`
23
+ : `No memory found to delete: project="${input.projectId}" category="${input.category}" key="${input.key}".`,
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ catch (err) {
29
+ return {
30
+ content: [{ type: "text", text: `Error deleting memory: ${String(err)}` }],
31
+ isError: true,
32
+ };
33
+ }
34
+ }
35
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/tools/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAsD;IAEtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;YACpC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;QACxC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO;wBACX,CAAC,CAAC,4BAA4B,KAAK,CAAC,SAAS,eAAe,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC,GAAG,IAAI;wBACjG,CAAC,CAAC,uCAAuC,KAAK,CAAC,SAAS,eAAe,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC,GAAG,IAAI;iBAC/G;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACnF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { storeMemorySchema, storeMemoryHandler } from "./store.js";
2
+ export { retrieveMemorySchema, retrieveMemoryHandler } from "./retrieve.js";
3
+ export { listMemoriesSchema, listMemoriesHandler } from "./list.js";
4
+ export { deleteMemorySchema, deleteMemoryHandler } from "./delete.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { storeMemorySchema, storeMemoryHandler } from "./store.js";
2
+ export { retrieveMemorySchema, retrieveMemoryHandler } from "./retrieve.js";
3
+ export { listMemoriesSchema, listMemoriesHandler } from "./list.js";
4
+ export { deleteMemorySchema, deleteMemoryHandler } from "./delete.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ export declare const listMemoriesSchema: {
3
+ projectId: z.ZodString;
4
+ category: z.ZodOptional<z.ZodEnum<["architecture", "stack", "folder-structure", "git", "convention", "task", "decision", "other"]>>;
5
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ limit: z.ZodOptional<z.ZodNumber>;
7
+ };
8
+ export declare function listMemoriesHandler(input: z.infer<z.ZodObject<typeof listMemoriesSchema>>): Promise<{
9
+ content: {
10
+ type: "text";
11
+ text: string;
12
+ }[];
13
+ isError?: undefined;
14
+ } | {
15
+ content: {
16
+ type: "text";
17
+ text: string;
18
+ }[];
19
+ isError: boolean;
20
+ }>;
21
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,kBAAkB,CAAC,CAAC;;;;;;;;;;;;GAoCvD"}
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { Memory } from "../db/memory.model.js";
3
+ import { MEMORY_CATEGORIES } from "../types.js";
4
+ export const listMemoriesSchema = {
5
+ projectId: z.string().min(1),
6
+ category: z.enum(MEMORY_CATEGORIES).optional(),
7
+ tags: z.array(z.string()).optional(),
8
+ limit: z.number().int().min(1).max(200).optional(),
9
+ };
10
+ export async function listMemoriesHandler(input) {
11
+ try {
12
+ const filter = { projectId: input.projectId };
13
+ if (input.category)
14
+ filter.category = input.category;
15
+ if (input.tags && input.tags.length > 0)
16
+ filter.tags = { $in: input.tags };
17
+ const docs = await Memory.find(filter)
18
+ .limit(input.limit ?? 50)
19
+ .lean();
20
+ const results = docs.map((d) => ({
21
+ category: d.category,
22
+ key: d.key,
23
+ value: d.value.length > 500 ? d.value.slice(0, 500) + "…" : d.value,
24
+ tags: d.tags,
25
+ updatedAt: d.updatedAt,
26
+ }));
27
+ return {
28
+ content: [
29
+ {
30
+ type: "text",
31
+ text: results.length === 0
32
+ ? `No memories found for project="${input.projectId}".`
33
+ : JSON.stringify(results, null, 2),
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ catch (err) {
39
+ return {
40
+ content: [{ type: "text", text: `Error listing memories: ${String(err)}` }],
41
+ isError: true,
42
+ };
43
+ }
44
+ }
45
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IAC9C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAsD;IAEtD,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACvE,IAAI,KAAK,CAAC,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACrD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAE3E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aACnC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;aACxB,IAAI,EAAE,CAAC;QAEV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YACnE,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EACF,OAAO,CAAC,MAAM,KAAK,CAAC;wBAClB,CAAC,CAAC,kCAAkC,KAAK,CAAC,SAAS,IAAI;wBACvD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACpF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export declare const retrieveMemorySchema: {
3
+ projectId: z.ZodString;
4
+ key: z.ZodString;
5
+ category: z.ZodOptional<z.ZodEnum<["architecture", "stack", "folder-structure", "git", "convention", "task", "decision", "other"]>>;
6
+ };
7
+ export declare function retrieveMemoryHandler(input: z.infer<z.ZodObject<typeof retrieveMemorySchema>>): Promise<{
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ isError?: undefined;
13
+ } | {
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError: boolean;
19
+ }>;
20
+ //# sourceMappingURL=retrieve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../src/tools/retrieve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,oBAAoB,CAAC,CAAC;;;;;;;;;;;;GA+CzD"}
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ import { Memory } from "../db/memory.model.js";
3
+ import { MEMORY_CATEGORIES } from "../types.js";
4
+ export const retrieveMemorySchema = {
5
+ projectId: z.string().min(1),
6
+ key: z.string().min(1),
7
+ category: z.enum(MEMORY_CATEGORIES).optional(),
8
+ };
9
+ export async function retrieveMemoryHandler(input) {
10
+ try {
11
+ const filter = {
12
+ projectId: input.projectId,
13
+ key: input.key,
14
+ };
15
+ if (input.category)
16
+ filter.category = input.category;
17
+ const doc = await Memory.findOne(filter).lean();
18
+ if (!doc) {
19
+ return {
20
+ content: [
21
+ {
22
+ type: "text",
23
+ text: `No memory found for project="${input.projectId}" key="${input.key}"${input.category ? ` category="${input.category}"` : ""}.`,
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ return {
29
+ content: [
30
+ {
31
+ type: "text",
32
+ text: JSON.stringify({
33
+ id: doc._id,
34
+ projectId: doc.projectId,
35
+ category: doc.category,
36
+ key: doc.key,
37
+ value: doc.value,
38
+ tags: doc.tags,
39
+ updatedAt: doc.updatedAt,
40
+ }, null, 2),
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ catch (err) {
46
+ return {
47
+ content: [{ type: "text", text: `Error retrieving memory: ${String(err)}` }],
48
+ isError: true,
49
+ };
50
+ }
51
+ }
52
+ //# sourceMappingURL=retrieve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../src/tools/retrieve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAwD;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B;YACtC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC;QACF,IAAI,KAAK,CAAC,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAErD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gCAAgC,KAAK,CAAC,SAAS,UAAU,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;qBACrI;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,EAAE,EAAE,GAAG,CAAC,GAAG;wBACX,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,GAAG,EAAE,GAAG,CAAC,GAAG;wBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,SAAS,EAAE,GAAG,CAAC,SAAS;qBACzB,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,4BAA4B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACrF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ export declare const storeMemorySchema: {
3
+ projectId: z.ZodString;
4
+ category: z.ZodEnum<["architecture", "stack", "folder-structure", "git", "convention", "task", "decision", "other"]>;
5
+ key: z.ZodString;
6
+ value: z.ZodString;
7
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
+ };
9
+ export declare function storeMemoryHandler(input: z.infer<z.ZodObject<typeof storeMemorySchema>>): Promise<{
10
+ content: {
11
+ type: "text";
12
+ text: string;
13
+ }[];
14
+ isError?: undefined;
15
+ } | {
16
+ content: {
17
+ type: "text";
18
+ text: string;
19
+ }[];
20
+ isError: boolean;
21
+ }>;
22
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;CAM7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,iBAAiB,CAAC,CAAC;;;;;;;;;;;;GAsBtD"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { Memory } from "../db/memory.model.js";
3
+ import { MEMORY_CATEGORIES } from "../types.js";
4
+ export const storeMemorySchema = {
5
+ projectId: z.string().min(1),
6
+ category: z.enum(MEMORY_CATEGORIES),
7
+ key: z.string().min(1).max(100),
8
+ value: z.string().min(1),
9
+ tags: z.array(z.string()).optional(),
10
+ };
11
+ export async function storeMemoryHandler(input) {
12
+ try {
13
+ const doc = await Memory.findOneAndUpdate({ projectId: input.projectId, category: input.category, key: input.key }, { value: input.value, tags: input.tags ?? [] }, { upsert: true, new: true });
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: `Memory stored.\nid: ${doc._id}\nproject: ${doc.projectId}\ncategory: ${doc.category}\nkey: ${doc.key}\nupdatedAt: ${doc.updatedAt.toISOString()}`,
19
+ },
20
+ ],
21
+ };
22
+ }
23
+ catch (err) {
24
+ return {
25
+ content: [{ type: "text", text: `Error storing memory: ${String(err)}` }],
26
+ isError: true,
27
+ };
28
+ }
29
+ }
30
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAqD;IAErD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CACvC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EACxE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,EAC9C,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAC5B,CAAC;QACF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,uBAAuB,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,SAAS,eAAe,GAAG,CAAC,QAAQ,UAAU,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;iBACzJ;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yBAAyB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YAClF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const MEMORY_CATEGORIES: readonly ["architecture", "stack", "folder-structure", "git", "convention", "task", "decision", "other"];
2
+ export type MemoryCategory = (typeof MEMORY_CATEGORIES)[number];
3
+ export interface IMemory {
4
+ projectId: string;
5
+ category: MemoryCategory;
6
+ key: string;
7
+ value: string;
8
+ tags: string[];
9
+ createdAt: Date;
10
+ updatedAt: Date;
11
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,0GASpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB"}
package/dist/types.js ADDED
@@ -0,0 +1,11 @@
1
+ export const MEMORY_CATEGORIES = [
2
+ "architecture",
3
+ "stack",
4
+ "folder-structure",
5
+ "git",
6
+ "convention",
7
+ "task",
8
+ "decision",
9
+ "other",
10
+ ];
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc;IACd,OAAO;IACP,kBAAkB;IAClB,KAAK;IACL,YAAY;IACZ,MAAM;IACN,UAAU;IACV,OAAO;CACC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "ninaivagam",
3
+ "version": "0.1.0",
4
+ "description": "MCP server that gives AI agents persistent, project-scoped memory backed by MongoDB",
5
+ "keywords": [
6
+ "mcp",
7
+ "claude",
8
+ "cursor",
9
+ "ai-agent",
10
+ "memory",
11
+ "modelcontextprotocol"
12
+ ],
13
+ "author": "thamizharasanj",
14
+ "license": "MIT",
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "bin": {
18
+ "ninaivagam": "dist/index.js"
19
+ },
20
+ "files": [
21
+ "dist/**/*",
22
+ "README.md"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "build:watch": "tsc --watch",
27
+ "start": "node dist/index.js",
28
+ "dev": "tsx src/index.ts",
29
+ "clean": "rimraf dist",
30
+ "prepublishOnly": "npm run clean && npm run build",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest"
33
+ },
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.28.0",
36
+ "mongoose": "^8.9.0",
37
+ "zod": "^3.25.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.0.0",
41
+ "rimraf": "^6.0.1",
42
+ "tsx": "^4.21.0",
43
+ "typescript": "^5.8.0",
44
+ "vitest": "^4.1.2"
45
+ },
46
+ "engines": {
47
+ "node": ">=20.0.0"
48
+ }
49
+ }