diff options
| author | MaheshtheDev <[email protected]> | 2026-01-17 00:57:48 +0000 |
|---|---|---|
| committer | MaheshtheDev <[email protected]> | 2026-01-17 00:57:48 +0000 |
| commit | acdb4226350b93047dea590cadcb2e72a37471d5 (patch) | |
| tree | 8529ad6891c531577f1e90a428ec027b041adc8c | |
| parent | fix: mintlify build (#677) (diff) | |
| download | supermemory-acdb4226350b93047dea590cadcb2e72a37471d5.tar.xz supermemory-acdb4226350b93047dea590cadcb2e72a37471d5.zip | |
add (mcp): projects aware tool on every init (#676)01-16-add_mcp_projects_aware_tool_on_every_init
| -rw-r--r-- | apps/mcp/package.json | 4 | ||||
| -rw-r--r-- | apps/mcp/src/index.ts | 5 | ||||
| -rw-r--r-- | apps/mcp/src/server.ts | 88 | ||||
| -rw-r--r-- | bun.lock | 46 |
4 files changed, 96 insertions, 47 deletions
diff --git a/apps/mcp/package.json b/apps/mcp/package.json index a0042da6..5ba472ad 100644 --- a/apps/mcp/package.json +++ b/apps/mcp/package.json @@ -9,8 +9,8 @@ }, "dependencies": { "@cloudflare/workers-oauth-provider": "^0.2.2", - "@modelcontextprotocol/sdk": "^1.12.1", - "agents": "^0.2.32", + "@modelcontextprotocol/sdk": "^1.25.2", + "agents": "^0.3.5", "hono": "^4.11.1", "posthog-node": "^5.18.0", "supermemory": "^4.0.0", diff --git a/apps/mcp/src/index.ts b/apps/mcp/src/index.ts index a1fe7bac..0586492f 100644 --- a/apps/mcp/src/index.ts +++ b/apps/mcp/src/index.ts @@ -1,8 +1,9 @@ -import { Hono } from "hono" import { cors } from "hono/cors" +import { Hono } from "hono" import { SupermemoryMCP } from "./server" import { isApiKey, validateApiKey, validateOAuthToken } from "./auth" import { initPosthog } from "./posthog" +import type { ContentfulStatusCode } from "hono/utils/http-status" type Bindings = { MCP_SERVER: DurableObjectNamespace @@ -78,7 +79,7 @@ app.get("/.well-known/oauth-authorization-server", async (c) => { if (!response.ok) { return c.json( { error: "Failed to fetch authorization server metadata" }, - response.status, + { status: response.status as ContentfulStatusCode }, ) } diff --git a/apps/mcp/src/server.ts b/apps/mcp/src/server.ts index bbcd493e..d83d2326 100644 --- a/apps/mcp/src/server.ts +++ b/apps/mcp/src/server.ts @@ -20,6 +20,7 @@ type Props = { export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { private clientInfo: { name: string; version?: string } | null = null + private cachedContainerTags: string[] = [] server = new McpServer({ name: "supermemory", @@ -37,7 +38,6 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { initPosthog(this.env.POSTHOG_API_KEY) - // Hook MCP McpAgent to capture client info this.server.server.oninitialized = async () => { const clientVersion = this.server.server.getClientVersion() @@ -49,6 +49,11 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { await this.ctx.storage.put("clientInfo", this.clientInfo) } } + + await this.refreshContainerTags() // Fetch available projects for schema descriptions + + const containerTagDescription = this.getContainerTagDescription() + const memorySchema = z.object({ content: z .string() @@ -58,7 +63,7 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { containerTag: z .string() .max(128, "Container tag exceeds maximum length") - .describe("Optional container tag") + .describe(containerTagDescription) .optional(), }) @@ -71,7 +76,7 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { containerTag: z .string() .max(128, "Container tag exceeds maximum length") - .describe("Optional container tag") + .describe(containerTagDescription) .optional(), }) @@ -79,7 +84,7 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { containerTag: z .string() .max(128, "Container tag exceeds maximum length") - .describe("Optional container tag to scope the profile") + .describe(containerTagDescription) .optional(), includeRecent: z .boolean() @@ -176,6 +181,63 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { }, ) + // Register listProjects tool + this.server.registerTool( + "listProjects", + { + description: + "List all available projects for organizing memories. Use this to discover valid project names for memory/recall operations.", + inputSchema: z.object({ + refresh: z + .boolean() + .optional() + .default(true) + .describe("Refresh the list from the server (default: true)"), + }), + }, + // @ts-expect-error - zod type inference issue with MCP SDK + async (args: { refresh?: boolean }) => { + try { + if (args.refresh !== false) { + await this.refreshContainerTags() + } + const projects = this.cachedContainerTags + + if (projects.length === 0) { + return { + content: [ + { + type: "text" as const, + text: "No projects found. Memories will use the default project.", + }, + ], + } + } + + return { + content: [ + { + type: "text" as const, + text: `Available projects:\n${projects.map((p) => `- ${p}`).join("\n")}`, + }, + ], + } + } catch (error) { + const message = + error instanceof Error ? error.message : "An unexpected error occurred" + return { + content: [ + { + type: "text" as const, + text: `Error listing projects: ${message}`, + }, + ], + isError: true, + } + } + }, + ) + // Register whoAmI tool this.server.registerTool( "whoAmI", @@ -222,6 +284,7 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { "User profile and preferences for system context injection. Returns a formatted system message with user's stable preferences and recent activity.", //argsSchema: contextPromptSchema.shape, TODO: commenting out for now as it will add more friction to the user }, + // @ts-expect-error - zod type inference issue with MCP SDK async (args: ContextPromptArgs) => { try { const { containerTag, includeRecent = true } = args @@ -543,4 +606,21 @@ export class SupermemoryMCP extends McpAgent<Env, unknown, Props> { private getMcpSessionId(): string { return this.ctx.id.name || "unknown" } + + private async refreshContainerTags(): Promise<void> { + try { + const client = this.getClient() + this.cachedContainerTags = await client.getProjects() + } catch (error) { + console.error("Failed to fetch container tags:", error) + } + } + + private getContainerTagDescription(): string { + const baseDescription = "Optional project to scope memories" + if (this.cachedContainerTags.length === 0) { + return baseDescription + } + return `${baseDescription}. Available projects: ${this.cachedContainerTags.join(", ")}` + } } @@ -87,8 +87,8 @@ "version": "4.0.0", "dependencies": { "@cloudflare/workers-oauth-provider": "^0.2.2", - "@modelcontextprotocol/sdk": "^1.12.1", - "agents": "^0.2.32", + "@modelcontextprotocol/sdk": "^1.25.2", + "agents": "^0.3.5", "hono": "^4.11.1", "posthog-node": "^5.18.0", "supermemory": "^4.0.0", @@ -658,6 +658,10 @@ "@chevrotain/utils": ["@chevrotain/[email protected]", "", {}, "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ=="], + "@cloudflare/ai-chat": ["@cloudflare/[email protected]", "", { "peerDependencies": { "agents": "^0.3.4", "ai": "^6.0.0", "react": "^19.0.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-NGQRt34X/UI+mx9fss7LmTTNBDVlFrtu+7JFoaykLUI738w9gjDplsMbOenCRbSr7UW4ngHGnv3YWUmV99eEnQ=="], + + "@cloudflare/codemode": ["@cloudflare/[email protected]", "", { "dependencies": { "zod-to-ts": "^2.0.0" }, "peerDependencies": { "agents": "^0.3.4", "ai": "^6.0.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-hsHu9q03yBSi8UaQKbVjpEMLJjr2BJ9BpPrH/up9I6JBrvZiMSymVOGuPSPJGso2HGlOfwLEZq9gyFyRmBsSCA=="], + "@cloudflare/kv-asset-handler": ["@cloudflare/[email protected]", "", { "dependencies": { "mime": "^3.0.0" } }, "sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg=="], "@cloudflare/unenv-preset": ["@cloudflare/[email protected]", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": "^1.20251202.0" }, "optionalPeers": ["workerd"] }, "sha512-99nEvuOTCGGGRNaIat8UVVXJ27aZK+U09SYDp0kVjQLwC9wyxcrQ28IqLwrQq2DjWLmBI1+UalGJzdPqYgPlRw=="], @@ -2102,7 +2106,7 @@ "agentkeepalive": ["[email protected]", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], - "agents": ["[email protected]", "", { "dependencies": { "@cfworker/json-schema": "^4.1.1", "@modelcontextprotocol/sdk": "1.23.0", "cron-schedule": "^6.0.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "mimetext": "^3.0.27", "nanoid": "^5.1.6", "partyserver": "^0.1.0", "partysocket": "1.1.10", "yargs": "^18.0.0", "zod-to-ts": "^2.0.0" }, "peerDependencies": { "@ai-sdk/openai": ">=2.0.0", "@ai-sdk/react": ">=1.0.0", "ai": ">=5.0.0", "react": "^19.0.0", "viem": ">=2.0.0", "x402": "^0.7.1", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@ai-sdk/openai", "@ai-sdk/react", "ai", "viem", "x402"], "bin": { "agents": "dist/cli/index.js" } }, "sha512-e6Ift6X0sFceYgFBIZGK4jQ+vyFq9caSF80ilsAVHzfFHvqb21013UrgGzZac4X+fzAP103YBSgS7C57tjAj8w=="], + "agents": ["[email protected]", "", { "dependencies": { "@cfworker/json-schema": "^4.1.1", "@modelcontextprotocol/sdk": "1.25.2", "cron-schedule": "^6.0.0", "json-schema": "^0.4.0", "json-schema-to-typescript": "^15.0.4", "mimetext": "^3.0.27", "nanoid": "^5.1.6", "partyserver": "^0.1.0", "partysocket": "1.1.10", "yargs": "^18.0.0" }, "peerDependencies": { "@ai-sdk/openai": "^3.0.0", "@ai-sdk/react": "^3.0.0", "@cloudflare/ai-chat": "^0.0.4", "@cloudflare/codemode": "^0.0.4", "ai": "^6.0.0", "react": "^19.0.0", "viem": ">=2.0.0", "x402": "^0.7.1", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@ai-sdk/openai", "@ai-sdk/react", "viem", "x402"], "bin": { "agents": "dist/cli/index.js" } }, "sha512-+qEW8jWP8JHEDE8izdMBYFXvh+bWIhnlSujf+zI9m8XWkWWpRUhiiZz7eB40lMeEBZ35p4MEDWmHUL55PnaUDA=="], "aggregate-error": ["[email protected]", "", { "dependencies": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" } }, "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w=="], @@ -5294,8 +5298,6 @@ "accepts/negotiator": ["[email protected]", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], - "agents/@modelcontextprotocol/sdk": ["@modelcontextprotocol/[email protected]", "", { "dependencies": { "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.0" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-MCGd4K9aZKvuSqdoBkdMvZNcYXCkZRYVs/Gh92mdV5IHbctX9H9uIvd4X93+9g8tBbXv08sxc/QHXTzf8y65bA=="], - "aggregate-error/clean-stack": ["[email protected]", "", { "dependencies": { "escape-string-regexp": "5.0.0" } }, "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg=="], "aggregate-error/indent-string": ["[email protected]", "", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="], @@ -6322,12 +6324,6 @@ "accepts/mime-types/mime-db": ["[email protected]", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "agents/@modelcontextprotocol/sdk/ajv": ["[email protected]", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "agents/@modelcontextprotocol/sdk/express": ["[email protected]", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], - - "agents/@modelcontextprotocol/sdk/zod": ["[email protected]", "", {}, "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g=="], - "aggregate-error/clean-stack/escape-string-regexp": ["[email protected]", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "ai-gateway-provider/ai/@ai-sdk/react": ["@ai-sdk/[email protected]", "", { "dependencies": { "@ai-sdk/provider-utils": "2.2.8", "@ai-sdk/ui-utils": "1.2.11", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "zod": "^3.23.8" }, "optionalPeers": ["zod"] }, "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g=="], @@ -6784,30 +6780,6 @@ "@repo/web/ai/@ai-sdk/provider-utils/@standard-schema/spec": ["@standard-schema/[email protected]", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "agents/@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["[email protected]", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "agents/@modelcontextprotocol/sdk/express/accepts": ["[email protected]", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], - - "agents/@modelcontextprotocol/sdk/express/body-parser": ["[email protected]", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], - - "agents/@modelcontextprotocol/sdk/express/content-disposition": ["[email protected]", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], - - "agents/@modelcontextprotocol/sdk/express/cookie": ["[email protected]", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "agents/@modelcontextprotocol/sdk/express/cookie-signature": ["[email protected]", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], - - "agents/@modelcontextprotocol/sdk/express/finalhandler": ["[email protected]", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], - - "agents/@modelcontextprotocol/sdk/express/fresh": ["[email protected]", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - - "agents/@modelcontextprotocol/sdk/express/merge-descriptors": ["[email protected]", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], - - "agents/@modelcontextprotocol/sdk/express/send": ["[email protected]", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], - - "agents/@modelcontextprotocol/sdk/express/serve-static": ["[email protected]", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], - - "agents/@modelcontextprotocol/sdk/express/type-is": ["[email protected]", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], - "ansi-align/string-width/strip-ansi/ansi-regex": ["[email protected]", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "memory-graph-playground/next/postcss/nanoid": ["[email protected]", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], @@ -6863,9 +6835,5 @@ "@puppeteer/browsers/yargs/cliui/wrap-ansi/ansi-styles": ["[email protected]", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "@puppeteer/browsers/yargs/string-width/strip-ansi/ansi-regex": ["[email protected]", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "agents/@modelcontextprotocol/sdk/express/accepts/negotiator": ["[email protected]", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - - "agents/@modelcontextprotocol/sdk/express/type-is/media-typer": ["[email protected]", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], } } |