diff --git a/apps/mcp/src/server.ts b/apps/mcp/src/server.ts index 6baa9d2c..b188b2c3 100644 --- a/apps/mcp/src/server.ts +++ b/apps/mcp/src/server.ts @@ -50,47 +50,52 @@ export class SupermemoryMCP extends McpAgent { } } - await this.refreshContainerTags() // Fetch available projects for schema descriptions + await this.refreshContainerTags() - const containerTagDescription = this.getContainerTagDescription() + const hasRootContainerTag = !!this.props?.containerTag - const memorySchema = z.object({ - content: z - .string() - .max(200000, "Content exceeds maximum length of 200,000 characters") - .describe("The memory content to save or forget"), - action: z.enum(["save", "forget"]).optional().default("save"), + const containerTagField = { containerTag: z .string() .max(128, "Container tag exceeds maximum length") - .describe(containerTagDescription) + .describe(this.getContainerTagDescription()) .optional(), + } + + const memorySchema = z.object({ + content: z + .string() + .max( + 200000, + "Content exceeds maximum length of 200,000 characters", + ) + .describe("The memory content to save or forget"), + action: z + .enum(["save", "forget"]) + .optional() + .default("save"), + ...(hasRootContainerTag ? {} : containerTagField), }) const recallSchema = z.object({ query: z .string() - .max(1000, "Query exceeds maximum length of 1,000 characters") + .max( + 1000, + "Query exceeds maximum length of 1,000 characters", + ) .describe("The search query to find relevant memories"), includeProfile: z.boolean().optional().default(true), - containerTag: z - .string() - .max(128, "Container tag exceeds maximum length") - .describe(containerTagDescription) - .optional(), + ...(hasRootContainerTag ? {} : containerTagField), }) const contextPromptSchema = z.object({ - containerTag: z - .string() - .max(128, "Container tag exceeds maximum length") - .describe(containerTagDescription) - .optional(), includeRecent: z .boolean() .optional() .default(true) .describe("Include recent activity in the profile"), + ...(hasRootContainerTag ? {} : containerTagField), }) type ContextPromptArgs = z.infer @@ -289,7 +294,8 @@ export class SupermemoryMCP extends McpAgent { // @ts-expect-error - zod type inference issue with MCP SDK async (args: ContextPromptArgs) => { try { - const { containerTag, includeRecent = true } = args + const { includeRecent = true } = args + const containerTag = (args as { containerTag?: string }).containerTag const client = this.getClient(containerTag) const profileResult = await client.getProfile() @@ -384,9 +390,10 @@ export class SupermemoryMCP extends McpAgent { containerTag?: string }) { const { content, action = "save", containerTag } = args + const effectiveContainerTag = containerTag || this.props?.containerTag try { - const client = this.getClient(containerTag) + const client = this.getClient(effectiveContainerTag) const clientInfo = await this.getClientInfo() if (action === "forget") {