diff --git a/apps/docs/supermemory-mcp/mcp.mdx b/apps/docs/supermemory-mcp/mcp.mdx index 2835f497..094a3705 100644 --- a/apps/docs/supermemory-mcp/mcp.mdx +++ b/apps/docs/supermemory-mcp/mcp.mdx @@ -48,7 +48,7 @@ Your assistant chooses these tools automatically. Use this table when you need t | --- | --- | --- | --- | | `search_memory` | Semantic recall from one space | `query` (required), `containerTag` | Matching memories | | `get_profile` | Stable and recent profile context for one space | `containerTag` | Profile facts | -| `add_memory` | Save information | `content` (required), `namespace` | Save confirmation | +| `add_memory` | Save information | `content` (required), `namespace`, optional `metadata` | Save confirmation | | `forget_memory` | Forget outdated information | `content` (required), `namespace` | Forget confirmation | | `list_documents` | Browse stored source documents and their summaries | `page`, `limit`, `containerTag` | Document IDs, titles, types, status, dates, and summaries | | `get_document` | Read the available content of one document | `documentId` (required) | Document metadata, summary, and available content | diff --git a/apps/mcp/e2e/space-scope.test.ts b/apps/mcp/e2e/space-scope.test.ts index c1157951..27b7fb15 100644 --- a/apps/mcp/e2e/space-scope.test.ts +++ b/apps/mcp/e2e/space-scope.test.ts @@ -22,10 +22,12 @@ describeWithAuth("MCP - space scoping", () => { const plainTools = (await plain.client.listTools()).tools expect(propsOf(plainTools, "add_memory")).toHaveProperty("namespace") + expect(propsOf(plainTools, "add_memory")).toHaveProperty("metadata") expect(propsOf(plainTools, "search_memory")).toHaveProperty("namespace") expect(propsOf(plainTools, "get_profile")).toHaveProperty("namespace") expect(propsOf(scopedTools, "add_memory")).toHaveProperty("namespace") + expect(propsOf(scopedTools, "add_memory")).toHaveProperty("metadata") expect(propsOf(scopedTools, "search_memory")).toHaveProperty("namespace") expect(propsOf(scopedTools, "get_profile")).toHaveProperty("namespace") } finally { diff --git a/apps/mcp/src/server/client/index.ts b/apps/mcp/src/server/client/index.ts index 3a327115..0835ca32 100644 --- a/apps/mcp/src/server/client/index.ts +++ b/apps/mcp/src/server/client/index.ts @@ -196,11 +196,12 @@ export class SupermemoryClient { async createMemory( content: string, + metadata?: Record, ): Promise<{ id: string; status: string; namespace: string }> { try { const result = await this.client.add(this.namespace, { content, - metadata: { sm_source: MCP_SOURCE }, + metadata: { ...metadata, sm_source: MCP_SOURCE }, }) return { id: result.id, diff --git a/apps/mcp/src/server/tools/add-memory.ts b/apps/mcp/src/server/tools/add-memory.ts index 99254f25..e2dd70a4 100644 --- a/apps/mcp/src/server/tools/add-memory.ts +++ b/apps/mcp/src/server/tools/add-memory.ts @@ -25,6 +25,7 @@ export function register(deps: ToolDeps) { ), namespace: optionalNamespaceSchema, ...legacyNamespaceInput, + metadata: z.record(z.string(), z.unknown()).optional().describe("Optional metadata to attach to the saved memory"), }) deps.server.registerTool( @@ -42,7 +43,7 @@ export function register(deps: ToolDeps) { const namespace = await deps.resolveNamespace(namespaceArg(args)) const client = deps.getClient(namespace) - const result = await client.createMemory(args.content) + const result = await client.createMemory(args.content, args.metadata) const message = `Memory saved (ID: ${result.id}, space: ${result.namespace})` const structuredContent: AddMemoryOutput = withLegacyNamespace({ action: "save",