@silkweave/mcp 1.7.1 → 1.8.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.
@@ -1,16 +1,17 @@
1
-
2
- > @silkweave/mcp@1.6.0 build /Users/atomic/projects/ai/silkweave/packages/mcp
3
- > tsdown
4
-
5
- ℹ tsdown v0.21.8 powered by rolldown v1.0.0-rc.15
6
- ℹ config file: /Users/atomic/projects/ai/silkweave/packages/mcp/tsdown.config.ts
7
- ℹ entry: src/index.ts
8
- ℹ tsconfig: tsconfig.json
9
- ℹ Build start
10
- ℹ Cleaning 4 files
11
- ℹ build/index.mjs 15.68 kB │ gzip: 4.50 kB
12
- ℹ build/index.mjs.map 29.45 kB │ gzip: 8.09 kB
13
- ℹ build/index.d.mts.map  0.80 kB │ gzip: 0.39 kB
14
- ℹ build/index.d.mts  1.85 kB │ gzip: 0.70 kB
15
- ℹ 4 files, total: 47.79 kB
16
- ✔ Build complete in 645ms
1
+
2
+ 
3
+ > @silkweave/mcp@1.7.1 build /Users/atomic/projects/silkweave/silkweave/packages/mcp
4
+ > tsdown
5
+
6
+ ℹ tsdown v0.21.8 powered by rolldown v1.0.0-rc.15
7
+ ℹ config file: /Users/atomic/projects/silkweave/silkweave/packages/mcp/tsdown.config.ts
8
+ ℹ entry: src/index.ts
9
+ ℹ tsconfig: tsconfig.json
10
+ ℹ Build start
11
+ ℹ Cleaning 4 files
12
+ ℹ build/index.mjs 16.50 kB │ gzip: 4.74 kB
13
+ ℹ build/index.mjs.map 30.99 kB │ gzip: 8.52 kB
14
+ ℹ build/index.d.mts.map  0.93 kB │ gzip: 0.43 kB
15
+ ℹ build/index.d.mts  2.15 kB │ gzip: 0.80 kB
16
+ ℹ 4 files, total: 50.57 kB
17
+ ✔ Build complete in 1056ms
@@ -1,5 +1,5 @@
1
1
 
2
2
  
3
- > @silkweave/mcp@1.4.1 lint /Users/atomic/projects/ai/silkweave/packages/mcp
3
+ > @silkweave/mcp@1.7.1 lint /Users/atomic/projects/silkweave/silkweave/packages/mcp
4
4
  > eslint
5
5
 
@@ -1,24 +1,24 @@
1
1
 
2
2
  
3
- > @silkweave/mcp@1.6.0 prepack /Users/atomic/projects/ai/silkweave/packages/mcp
3
+ > @silkweave/mcp@1.7.1 prepack /Users/atomic/projects/silkweave/silkweave/packages/mcp
4
4
  > pnpm clean && pnpm build
5
5
 
6
6
 
7
- > @silkweave/mcp@1.6.0 clean /Users/atomic/projects/ai/silkweave/packages/mcp
7
+ > @silkweave/mcp@1.7.1 clean /Users/atomic/projects/silkweave/silkweave/packages/mcp
8
8
  > rimraf build
9
9
 
10
10
 
11
- > @silkweave/mcp@1.6.0 build /Users/atomic/projects/ai/silkweave/packages/mcp
11
+ > @silkweave/mcp@1.7.1 build /Users/atomic/projects/silkweave/silkweave/packages/mcp
12
12
  > tsdown
13
13
 
14
14
  ℹ tsdown v0.21.8 powered by rolldown v1.0.0-rc.15
15
- ℹ config file: /Users/atomic/projects/ai/silkweave/packages/mcp/tsdown.config.ts
15
+ ℹ config file: /Users/atomic/projects/silkweave/silkweave/packages/mcp/tsdown.config.ts
16
16
  ℹ entry: src/index.ts
17
17
  ℹ tsconfig: tsconfig.json
18
18
  ℹ Build start
19
- ℹ build/index.mjs 15.68 kB │ gzip: 4.50 kB
20
- ℹ build/index.mjs.map 29.45 kB │ gzip: 8.09 kB
21
- ℹ build/index.d.mts.map  0.80 kB │ gzip: 0.39 kB
22
- ℹ build/index.d.mts  1.85 kB │ gzip: 0.70 kB
23
- ℹ 4 files, total: 47.79 kB
24
- ✔ Build complete in 593ms
19
+ ℹ build/index.mjs 16.50 kB │ gzip: 4.74 kB
20
+ ℹ build/index.mjs.map 30.99 kB │ gzip: 8.52 kB
21
+ ℹ build/index.d.mts.map  0.93 kB │ gzip: 0.43 kB
22
+ ℹ build/index.d.mts  2.15 kB │ gzip: 0.80 kB
23
+ ℹ 4 files, total: 50.57 kB
24
+ ✔ Build complete in 600ms
package/build/index.mjs CHANGED
@@ -7,7 +7,7 @@ import { createCLILogger, createLogger } from "@silkweave/logger";
7
7
  import { capitalCase, kebabCase, pascalCase } from "change-case";
8
8
  import { Command } from "commander";
9
9
  import { randomUUID } from "crypto";
10
- import { z } from "zod";
10
+ import { z } from "zod/v4";
11
11
  import { randomUUID as randomUUID$1 } from "node:crypto";
12
12
  import { InMemoryEventStore } from "@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js";
13
13
  import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["randomUUID","registerTools"],"sources":["../src/util/result.ts","../src/adapter/cliProxy.ts","../src/adapter/http.ts","../src/adapter/stdio.ts","../src/util/sideload.ts"],"sourcesContent":["import { EmbeddedResource, type CallToolResult } from '@modelcontextprotocol/sdk/types.js'\nimport { SilkweaveError } from '@silkweave/core'\nimport { randomUUID } from 'node:crypto'\n\nexport function smartToolResult(data: string | object | object[]): CallToolResult {\n const text = typeof data === 'string' ? data : JSON.stringify(data)\n const mimeType = typeof data === 'string' ? 'text/plain' : 'application/json'\n const ext = typeof data === 'string' ? 'txt' : 'json'\n if (text.length > 4096) {\n const uri = `mcp://toolResult/${randomUUID()}.${ext}`\n const buffer = Buffer.from(text)\n const blob = buffer.toString('base64')\n return {\n content: [\n { type: 'text', text: `Received resource ${uri} with ${buffer.byteLength} bytes` },\n { type: 'resource', resource: { uri, mimeType, blob } }\n ]\n }\n } else {\n return {\n content: [{ type: 'text' as const, text }]\n }\n }\n}\n\nexport function jsonToolResult(data: object, isError = false): CallToolResult {\n const result: CallToolResult = { content: [{ type: 'text' as const, text: JSON.stringify(data) }] }\n if (isError) { result.isError = true }\n return result\n}\n\nexport function errorToolResult({ code, name, message }: SilkweaveError): CallToolResult {\n return {\n isError: true,\n content: [{\n type: 'text',\n text: JSON.stringify({ success: false, code, name, message })\n }]\n }\n}\n\nexport function handleToolError(error: unknown): CallToolResult {\n if (error instanceof SilkweaveError) {\n return jsonToolResult({ success: false, name: error.name, message: error.message, code: error.code }, true)\n } else if (error instanceof Error) {\n return jsonToolResult({ success: false, name: error.name, message: error.message, stack: error.stack }, true)\n } else {\n return jsonToolResult({ success: false, name: 'Unknown error', message: 'An unknown error occurred', error }, true)\n }\n}\n\nexport function parseResourceMessage({ resource }: EmbeddedResource) {\n const text = ('blob' in resource) ? Buffer.from(resource.blob, 'base64').toString('utf-8') : resource.text\n return text\n}\n","import { intro } from '@clack/prompts'\nimport { Client } from '@modelcontextprotocol/sdk/client'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { ContentBlock, LoggingMessageNotificationSchema, ProgressNotificationSchema, ToolResultContent } from '@modelcontextprotocol/sdk/types.js'\nimport { AdapterFactory, unwrap } from '@silkweave/core'\nimport { createCLILogger } from '@silkweave/logger'\nimport { kebabCase } from 'change-case'\nimport { Command } from 'commander'\nimport { randomUUID } from 'crypto'\nimport { z } from 'zod'\nimport { JSONSchema } from 'zod/v4/core'\nimport { parseResourceMessage } from '../util/result.js'\n\nexport type CLIFormatterFn = (message: ContentBlock, index: number, messages: ContentBlock[]) => string | undefined\n\nexport interface CliProxyOptions {\n url: URL\n formatter?: CLIFormatterFn\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction addCliOption(command: Command, key: string, type: z.ZodType, defaultValue: any) {\n const description = type.description\n const flag = kebabCase(key)\n if (type instanceof z.ZodBoolean) {\n command.option(`--${flag}`, description, defaultValue)\n command.option(`--no-${flag}`)\n } else if (type instanceof z.ZodNumber) {\n command.option(`--${flag} <number>`, description, defaultValue)\n } else if (type instanceof z.ZodString || type instanceof z.ZodEnum) {\n command.option(`--${flag} <string>`, description, defaultValue)\n } else if (type instanceof z.ZodObject || type instanceof z.ZodRecord || type instanceof z.ZodArray) {\n command.option(`--${flag} <json>`, description ?? '', JSON.parse, defaultValue)\n } else {\n throw new Error(`Invalid zod type: ${type.def.type}`)\n }\n}\n\nconst defaultFormatter: CLIFormatterFn = (message) => {\n if (message.type === 'text' && !message.text.includes('mcp://toolResult/')) {\n return `${message.text}`\n } else if (message.type === 'resource') {\n return parseResourceMessage(message)\n } else {\n return JSON.stringify(message)\n }\n\n}\n\nexport const cliProxy: AdapterFactory<CliProxyOptions> = ({ url, formatter = defaultFormatter }) => {\n return (options, baseContext) => {\n const context = baseContext.fork({ adapter: 'cliProxy' })\n const program = new Command()\n .name(options.name)\n .description(options.description)\n .version(options.version)\n .option('-s, --silent', 'Silent mode, prevent log messages', false)\n\n return {\n context,\n start: async () => {\n const client = new Client({\n name: options.name,\n description: options.description,\n version: options.version\n })\n const transport = new StreamableHTTPClientTransport(url)\n await client.connect(transport)\n const { tools } = await client.listTools()\n for (const tool of tools) {\n const name = kebabCase(tool.name)\n const command = program.command(name)\n if (tool.description) { command.description(tool.description) }\n const schema = z.fromJSONSchema(tool.inputSchema as JSONSchema.JSONSchema)\n if (!(schema instanceof z.ZodObject)) { throw new Error('Invalid schema') }\n const shape = schema.shape\n for (const key of Object.keys(shape)) {\n const [type, { defaultValue }] = unwrap(shape[key])\n addCliOption(command, key, type, defaultValue)\n }\n command.action(async (args) => {\n const { silent } = program.opts<{ silent: boolean }>()\n const logger = createCLILogger()\n if (!silent) {\n intro(`${options.name} - ${tool.name}`)\n client.setNotificationHandler(LoggingMessageNotificationSchema, ({ params: { level, data } }) => {\n logger[level](data)\n })\n client.setNotificationHandler(ProgressNotificationSchema, ({ params: { progress, total, message } }) => {\n logger.info({ progress, total, message })\n })\n }\n const input = await schema.parseAsync(args)\n const response = await client.callTool({\n name: tool.name,\n arguments: input,\n _meta: { progressToken: randomUUID(), disposition: 'json' }\n }) as ToolResultContent\n response.content.forEach((message, index, messages) => {\n const text = formatter(message, index, messages)\n process.stdout.write(`${text}\\n`)\n })\n })\n }\n await program.parseAsync()\n await transport.close()\n },\n stop: async () => { }\n }\n }\n}\n","import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js'\nimport { createMcpExpressApp, CreateMcpExpressAppOptions } from '@modelcontextprotocol/sdk/server/express.js'\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'\nimport { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js'\nimport { AuthConfig, AuthInfo, generateProtectedResourceMetadata, OAuthRequest, OAuthResponse, validateToken } from '@silkweave/auth'\nimport { Action, AdapterFactory, SilkweaveContext, SilkweaveOptions } from '@silkweave/core'\nimport { createLogger } from '@silkweave/logger'\nimport { capitalCase, pascalCase } from 'change-case'\nimport cors, { CorsOptions } from 'cors'\nimport { randomUUID } from 'crypto'\nimport express, { Express, Request, Response } from 'express'\nimport { readFile } from 'fs/promises'\nimport { Server } from 'http'\nimport { AsyncLocalStorage } from 'node:async_hooks'\nimport { handleToolError, jsonToolResult, smartToolResult } from '../util/result.js'\nimport { SideloadResource } from '../util/sideload.js'\n\nconst authStorage = new AsyncLocalStorage<AuthInfo>()\n\n/** Headers required by the MCP protocol that must always be exposed */\nconst MCP_REQUIRED_HEADERS = ['WWW-Authenticate', 'Mcp-Session-Id', 'Last-Event-Id', 'Mcp-Protocol-Version']\n\nexport interface HttpAdapterOptions extends CreateMcpExpressAppOptions {\n host: string\n port: number\n auth?: AuthConfig\n /** CORS configuration. `false` to disable, `true`/`undefined` for permissive defaults, or a CorsOptions object. */\n cors?: CorsOptions | boolean\n}\n\nfunction mountOAuthRoutes(app: Express, auth: AuthConfig): Set<string> {\n const provider = auth.provider!\n const callbackPath = auth.callbackPath ?? '/auth/callback'\n\n const toOAuthReq = (req: Request): OAuthRequest => ({\n method: req.method,\n url: new URL(req.url, `${req.protocol}://${req.get('host')}`),\n headers: Object.fromEntries(Object.entries(req.headers).map(([k, v]) => [k, Array.isArray(v) ? v[0] : v])),\n body: req.body as Record<string, string> | undefined\n })\n\n const sendOAuth = (res: Response, oauthRes: OAuthResponse) => {\n for (const [key, value] of Object.entries(oauthRes.headers)) { res.header(key, value) }\n if (oauthRes.body) {\n res.status(oauthRes.status).send(typeof oauthRes.body === 'string' ? oauthRes.body : JSON.stringify(oauthRes.body))\n } else {\n res.status(oauthRes.status).end()\n }\n }\n\n app.get('/.well-known/oauth-authorization-server', (_req: Request, res: Response) => {\n sendOAuth(res, provider.metadata())\n })\n app.get('/authorize', async (req: Request, res: Response) => {\n sendOAuth(res, await provider.authorize(toOAuthReq(req)))\n })\n app.get(callbackPath, async (req: Request, res: Response) => {\n sendOAuth(res, await provider.callback(toOAuthReq(req)))\n })\n app.post('/token', express.urlencoded({ extended: false }), async (req: Request, res: Response) => {\n sendOAuth(res, await provider.token(toOAuthReq(req)))\n })\n app.post('/register', express.json(), async (req: Request, res: Response) => {\n sendOAuth(res, await provider.register(toOAuthReq(req)))\n })\n\n return new Set(['/.well-known/oauth-authorization-server', '/authorize', callbackPath, '/token', '/register'])\n}\n\nfunction mountAuthMiddleware(app: Express, auth: AuthConfig, oauthPaths: Set<string>, context: SilkweaveContext) {\n app.use(async (req: Request, res: Response, next: (err?: unknown) => void) => {\n if (req.path.startsWith('/.well-known/') || oauthPaths.has(req.path)) { return next() }\n const result = await validateToken(req.headers.authorization, auth, context.fork({ request: req }))\n if (result.error) {\n for (const [key, value] of Object.entries(result.error.headers)) {\n res.header(key, value)\n }\n res.status(result.error.statusCode).json(result.error.body)\n return\n }\n if (result.auth) {\n authStorage.run(result.auth, () => { next() })\n } else {\n next()\n }\n })\n}\n\nfunction registerTools(server: McpServer, actions: Action[], context: SilkweaveContext) {\n for (const action of actions) {\n server.registerTool(pascalCase(action.name), {\n title: capitalCase(action.name),\n description: action.description,\n inputSchema: action.input\n }, async (input, extra) => {\n const logger = createLogger({\n stream: process.stderr,\n onLog: (level, data) => {\n extra.sendNotification({ method: 'notifications/message', params: { level, data } })\n },\n onProgress: ({ progress, total, message }) => {\n if (!extra._meta?.progressToken) { return }\n extra.sendNotification({\n method: 'notifications/progress',\n params: { progress, total, message, progressToken: extra._meta.progressToken }\n })\n }\n })\n const currentAuth = authStorage.getStore()\n const actionContext = context.fork({ logger, extra, ...(currentAuth ? { auth: currentAuth } : {}) })\n const disposition = extra._meta?.disposition\n return action.run(input, actionContext).then((result) => {\n if (action.toolResult) {\n const response = action.toolResult(result, actionContext)\n if (response) { return response }\n }\n if (disposition === 'json') {\n return jsonToolResult(result)\n } else {\n return smartToolResult(result)\n }\n }).catch(handleToolError)\n })\n }\n}\n\nfunction createMcpServer(options: SilkweaveOptions, actions: Action[], context: SilkweaveContext): McpServer {\n const server = new McpServer({\n name: options.name,\n description: options.description,\n version: options.version\n }, {\n capabilities: { tools: {}, logging: {} }\n })\n registerTools(server, actions, context)\n return server\n}\n\nfunction createSessionTransport(transports: Record<string, StreamableHTTPServerTransport>): StreamableHTTPServerTransport {\n const eventStore = new InMemoryEventStore()\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: () => randomUUID(),\n enableJsonResponse: false,\n eventStore,\n onsessioninitialized: (sId) => {\n console.log(`Session initialized with ID: ${sId}`)\n transports[sId] = transport\n }\n })\n transport.onerror = (error) => {\n console.error(error)\n }\n transport.onclose = () => {\n const sid = transport.sessionId\n if (sid && transports[sid]) {\n console.log(`Transport closed for session ${sid}, removing from transports map`)\n delete transports[sid]\n }\n }\n return transport\n}\n\nfunction mountMcpTransport(\n app: Express,\n transports: Record<string, StreamableHTTPServerTransport>,\n createServer: () => McpServer\n) {\n app.post('/mcp', async (req: Request, res: Response) => {\n const sessionId = req.headers['mcp-session-id'] as string | undefined\n try {\n if (sessionId && transports[sessionId]) {\n await transports[sessionId].handleRequest(req, res, req.body)\n return\n }\n\n if (!isInitializeRequest(req.body)) {\n res.status(404).json({\n jsonrpc: '2.0',\n error: { code: -32_000, message: 'Session not found' },\n id: null\n })\n return\n }\n\n const transport = createSessionTransport(transports)\n await createServer().connect(transport)\n await transport.handleRequest(req, res, req.body)\n } catch (error) {\n console.error('Error handling MCP request:', error)\n if (!res.headersSent) {\n res.status(500).json({\n jsonrpc: '2.0',\n error: { code: -32_603, message: 'Internal server error' },\n id: null\n })\n }\n }\n })\n\n const handleSessionStream = async (req: Request, res: Response) => {\n const sessionId = req.headers['mcp-session-id'] as string | undefined\n if (!sessionId || !transports[sessionId]) {\n res.status(400).send('Invalid or missing session ID')\n return\n }\n const transport = transports[sessionId]\n await transport.handleRequest(req, res)\n }\n\n app.get('/mcp', handleSessionStream)\n app.delete('/mcp', handleSessionStream)\n app.get('/mcp/resource/:id', handleSessionStream)\n}\n\nexport const http: AdapterFactory<HttpAdapterOptions> = ({ host, port, auth, cors: corsConfig, ...mcpOptions }) => {\n return (options, baseContext) => {\n const context = baseContext.fork({ adapter: 'http' })\n const app = createMcpExpressApp({ ...mcpOptions, host })\n\n if (corsConfig !== false) {\n const userConfig = corsConfig === true || corsConfig === undefined ? {} : corsConfig\n const userExposed = userConfig.exposedHeaders\n const exposedHeaders = [\n ...MCP_REQUIRED_HEADERS,\n ...(Array.isArray(userExposed) ? userExposed : userExposed ? [userExposed] : [])\n ]\n app.use(cors({ origin: '*', ...userConfig, exposedHeaders }))\n }\n\n if (auth?.authorizationServers?.length && auth.resourceUrl) {\n app.get('/.well-known/oauth-protected-resource', (_req: Request, res: Response) => {\n const metadata = generateProtectedResourceMetadata(auth.resourceUrl!, auth.authorizationServers!)\n res.json(metadata)\n })\n }\n\n const oauthPaths = auth?.provider ? mountOAuthRoutes(app, auth) : new Set<string>()\n\n if (auth) {\n mountAuthMiddleware(app, auth, oauthPaths, context)\n }\n\n const transports: Record<string, StreamableHTTPServerTransport> = {}\n let mountedActions: Action[] = []\n\n app.get('/resource/:id', async (req: Request, res: Response) => {\n const id = req.params.id\n if (!id || typeof id !== 'string') { throw new Error('Invalid ID') }\n const resourceMeta: SideloadResource = JSON.parse(await readFile(`resources/${id}.json`, 'utf-8'))\n const buffer = await readFile(`resources/${id}`)\n res.status(200)\n res.header('Content-Type', resourceMeta.contentType)\n res.send(buffer)\n })\n\n mountMcpTransport(app, transports, () => createMcpServer(options, mountedActions, context))\n\n let httpServer: Server | undefined\n return {\n context,\n start: async (actions) => {\n mountedActions = actions\n httpServer = app.listen(port, host, (error) => {\n if (error) {\n console.error('Failed to start server:', error)\n process.exit(1)\n }\n console.log(`MCP Streamable HTTP Server listening on http://${host}:${port}/mcp`)\n })\n },\n stop: async () => {\n if (httpServer) {\n await new Promise<void>((resolve, reject) => {\n return httpServer!.close((err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n }\n httpServer = undefined\n }\n }\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { Action, AdapterFactory, SilkweaveContext } from '@silkweave/core'\nimport { createLogger } from '@silkweave/logger'\nimport { capitalCase, pascalCase } from 'change-case'\nimport { handleToolError, smartToolResult } from '../util/result.js'\n\nfunction registerTools(server: McpServer, actions: Action[], context: SilkweaveContext) {\n for (const action of actions) {\n server.registerTool(pascalCase(action.name), {\n title: capitalCase(action.name),\n description: action.description,\n inputSchema: action.input\n }, async (input, extra) => {\n const logger = createLogger({\n stream: false,\n onLog: (level, data) => {\n extra.sendNotification({ method: 'notifications/message', params: { level, data } })\n },\n onProgress: ({ progress, total, message }) => {\n if (!extra._meta?.progressToken) { return }\n extra.sendNotification({\n method: 'notifications/progress',\n params: { progress, total, message, progressToken: extra._meta.progressToken }\n })\n }\n })\n const actionContext = context.fork({ logger, extra })\n return action.run(input, actionContext)\n .then((result) => action.toolResult?.(result, actionContext) ?? smartToolResult(result))\n .catch(handleToolError)\n })\n }\n}\n\nexport const stdio: AdapterFactory = () => {\n return (options, baseContext) => {\n const context = baseContext.fork({ adapter: 'stdio' })\n const server = new McpServer({\n name: options.name,\n description: options.description,\n version: options.version\n }, {\n capabilities: { tools: {}, logging: {} }\n })\n return {\n context,\n start: async (actions) => {\n registerTools(server, actions, context)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n },\n stop: async () => {\n await server?.close()\n }\n }\n }\n}\n","import { randomUUID } from 'crypto'\nimport { writeFile } from 'fs/promises'\n\nexport interface SideloadResource {\n id: string\n name: string\n contentType: string\n size: number\n}\n\nexport async function createSideloadResource(buffer: Buffer, { name, contentType }: Pick<SideloadResource, 'name' | 'contentType'>) {\n const id = randomUUID()\n const resource: SideloadResource = { id, name, contentType, size: buffer.length }\n await Promise.all([\n writeFile(`resources/${id}`, buffer),\n writeFile(`resources/${id}.json`, JSON.stringify(resource), 'utf-8')\n ])\n return resource\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["randomUUID","registerTools"],"sources":["../src/util/result.ts","../src/adapter/cliProxy.ts","../src/adapter/http.ts","../src/adapter/stdio.ts","../src/util/sideload.ts"],"sourcesContent":["import { EmbeddedResource, type CallToolResult } from '@modelcontextprotocol/sdk/types.js'\nimport { SilkweaveError } from '@silkweave/core'\nimport { randomUUID } from 'node:crypto'\n\nexport function smartToolResult(data: string | object | object[]): CallToolResult {\n const text = typeof data === 'string' ? data : JSON.stringify(data)\n const mimeType = typeof data === 'string' ? 'text/plain' : 'application/json'\n const ext = typeof data === 'string' ? 'txt' : 'json'\n if (text.length > 4096) {\n const uri = `mcp://toolResult/${randomUUID()}.${ext}`\n const buffer = Buffer.from(text)\n const blob = buffer.toString('base64')\n return {\n content: [\n { type: 'text', text: `Received resource ${uri} with ${buffer.byteLength} bytes` },\n { type: 'resource', resource: { uri, mimeType, blob } }\n ]\n }\n } else {\n return {\n content: [{ type: 'text' as const, text }]\n }\n }\n}\n\nexport function jsonToolResult(data: object, isError = false): CallToolResult {\n const result: CallToolResult = { content: [{ type: 'text' as const, text: JSON.stringify(data) }] }\n if (isError) { result.isError = true }\n return result\n}\n\nexport function errorToolResult({ code, name, message }: SilkweaveError): CallToolResult {\n return {\n isError: true,\n content: [{\n type: 'text',\n text: JSON.stringify({ success: false, code, name, message })\n }]\n }\n}\n\nexport function handleToolError(error: unknown): CallToolResult {\n if (error instanceof SilkweaveError) {\n return jsonToolResult({ success: false, name: error.name, message: error.message, code: error.code }, true)\n } else if (error instanceof Error) {\n return jsonToolResult({ success: false, name: error.name, message: error.message, stack: error.stack }, true)\n } else {\n return jsonToolResult({ success: false, name: 'Unknown error', message: 'An unknown error occurred', error }, true)\n }\n}\n\nexport function parseResourceMessage({ resource }: EmbeddedResource) {\n const text = ('blob' in resource) ? Buffer.from(resource.blob, 'base64').toString('utf-8') : resource.text\n return text\n}\n","import { intro } from '@clack/prompts'\nimport { Client } from '@modelcontextprotocol/sdk/client'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { ContentBlock, LoggingMessageNotificationSchema, ProgressNotificationSchema, ToolResultContent } from '@modelcontextprotocol/sdk/types.js'\nimport { AdapterFactory, unwrap } from '@silkweave/core'\nimport { createCLILogger } from '@silkweave/logger'\nimport { kebabCase } from 'change-case'\nimport { Command } from 'commander'\nimport { randomUUID } from 'crypto'\nimport { z } from 'zod/v4'\nimport { JSONSchema } from 'zod/v4/core'\nimport { parseResourceMessage } from '../util/result.js'\n\nexport type CLIFormatterFn = (message: ContentBlock, index: number, messages: ContentBlock[]) => string | undefined\n\nexport interface CliProxyOptions {\n url: URL\n formatter?: CLIFormatterFn\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction addCliOption(command: Command, key: string, type: z.ZodType, defaultValue: any) {\n const description = type.description\n const flag = kebabCase(key)\n if (type instanceof z.ZodBoolean) {\n command.option(`--${flag}`, description, defaultValue)\n command.option(`--no-${flag}`)\n } else if (type instanceof z.ZodNumber) {\n command.option(`--${flag} <number>`, description, defaultValue)\n } else if (type instanceof z.ZodString || type instanceof z.ZodEnum) {\n command.option(`--${flag} <string>`, description, defaultValue)\n } else if (type instanceof z.ZodObject || type instanceof z.ZodRecord || type instanceof z.ZodArray) {\n command.option(`--${flag} <json>`, description ?? '', JSON.parse, defaultValue)\n } else {\n throw new Error(`Invalid zod type: ${type.def.type}`)\n }\n}\n\nconst defaultFormatter: CLIFormatterFn = (message) => {\n if (message.type === 'text' && !message.text.includes('mcp://toolResult/')) {\n return `${message.text}`\n } else if (message.type === 'resource') {\n return parseResourceMessage(message)\n } else {\n return JSON.stringify(message)\n }\n\n}\n\nexport const cliProxy: AdapterFactory<CliProxyOptions> = ({ url, formatter = defaultFormatter }) => {\n return (options, baseContext) => {\n const context = baseContext.fork({ adapter: 'cliProxy' })\n const program = new Command()\n .name(options.name)\n .description(options.description)\n .version(options.version)\n .option('-s, --silent', 'Silent mode, prevent log messages', false)\n\n return {\n context,\n start: async () => {\n const client = new Client({\n name: options.name,\n description: options.description,\n version: options.version\n })\n const transport = new StreamableHTTPClientTransport(url)\n await client.connect(transport)\n const { tools } = await client.listTools()\n for (const tool of tools) {\n const name = kebabCase(tool.name)\n const command = program.command(name)\n if (tool.description) { command.description(tool.description) }\n const schema = z.fromJSONSchema(tool.inputSchema as JSONSchema.JSONSchema)\n if (!(schema instanceof z.ZodObject)) { throw new Error('Invalid schema') }\n const shape = schema.shape\n for (const key of Object.keys(shape)) {\n const [type, { defaultValue }] = unwrap(shape[key])\n addCliOption(command, key, type, defaultValue)\n }\n command.action(async (args) => {\n const { silent } = program.opts<{ silent: boolean }>()\n const logger = createCLILogger()\n if (!silent) {\n intro(`${options.name} - ${tool.name}`)\n client.setNotificationHandler(LoggingMessageNotificationSchema, ({ params: { level, data } }) => {\n logger[level](data)\n })\n client.setNotificationHandler(ProgressNotificationSchema, ({ params: { progress, total, message } }) => {\n logger.info({ progress, total, message })\n })\n }\n const input = await schema.parseAsync(args)\n const response = await client.callTool({\n name: tool.name,\n arguments: input,\n _meta: { progressToken: randomUUID(), disposition: 'json' }\n }) as ToolResultContent\n response.content.forEach((message, index, messages) => {\n const text = formatter(message, index, messages)\n process.stdout.write(`${text}\\n`)\n })\n })\n }\n await program.parseAsync()\n await transport.close()\n },\n stop: async () => { }\n }\n }\n}\n","import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js'\nimport { createMcpExpressApp, CreateMcpExpressAppOptions } from '@modelcontextprotocol/sdk/server/express.js'\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'\nimport { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js'\nimport { AuthConfig, AuthInfo, generateProtectedResourceMetadata, OAuthRequest, OAuthResponse, validateToken } from '@silkweave/auth'\nimport { Action, AdapterFactory, SilkweaveContext, SilkweaveOptions } from '@silkweave/core'\nimport { createLogger } from '@silkweave/logger'\nimport { capitalCase, pascalCase } from 'change-case'\nimport cors, { CorsOptions } from 'cors'\nimport { randomUUID } from 'crypto'\nimport express, { Express, Request, Response } from 'express'\nimport { readFile } from 'fs/promises'\nimport { Server } from 'http'\nimport { AsyncLocalStorage } from 'node:async_hooks'\nimport { handleToolError, jsonToolResult, smartToolResult } from '../util/result.js'\nimport { SideloadResource } from '../util/sideload.js'\n\nconst authStorage = new AsyncLocalStorage<AuthInfo>()\n\n/** Headers required by the MCP protocol that must always be exposed */\nconst MCP_REQUIRED_HEADERS = ['WWW-Authenticate', 'Mcp-Session-Id', 'Last-Event-Id', 'Mcp-Protocol-Version']\n\nexport interface HttpAdapterOptions extends CreateMcpExpressAppOptions {\n host: string\n port: number\n auth?: AuthConfig\n /** CORS configuration. `false` to disable, `true`/`undefined` for permissive defaults, or a CorsOptions object. */\n cors?: CorsOptions | boolean\n}\n\nfunction mountOAuthRoutes(app: Express, auth: AuthConfig): Set<string> {\n const provider = auth.provider!\n const callbackPath = auth.callbackPath ?? '/auth/callback'\n\n const toOAuthReq = (req: Request): OAuthRequest => ({\n method: req.method,\n url: new URL(req.url, `${req.protocol}://${req.get('host')}`),\n headers: Object.fromEntries(Object.entries(req.headers).map(([k, v]) => [k, Array.isArray(v) ? v[0] : v])),\n body: req.body as Record<string, string> | undefined\n })\n\n const sendOAuth = (res: Response, oauthRes: OAuthResponse) => {\n for (const [key, value] of Object.entries(oauthRes.headers)) { res.header(key, value) }\n if (oauthRes.body) {\n res.status(oauthRes.status).send(typeof oauthRes.body === 'string' ? oauthRes.body : JSON.stringify(oauthRes.body))\n } else {\n res.status(oauthRes.status).end()\n }\n }\n\n app.get('/.well-known/oauth-authorization-server', (_req: Request, res: Response) => {\n sendOAuth(res, provider.metadata())\n })\n app.get('/authorize', async (req: Request, res: Response) => {\n sendOAuth(res, await provider.authorize(toOAuthReq(req)))\n })\n app.get(callbackPath, async (req: Request, res: Response) => {\n sendOAuth(res, await provider.callback(toOAuthReq(req)))\n })\n app.post('/token', express.urlencoded({ extended: false }), async (req: Request, res: Response) => {\n sendOAuth(res, await provider.token(toOAuthReq(req)))\n })\n app.post('/register', express.json(), async (req: Request, res: Response) => {\n sendOAuth(res, await provider.register(toOAuthReq(req)))\n })\n\n return new Set(['/.well-known/oauth-authorization-server', '/authorize', callbackPath, '/token', '/register'])\n}\n\nfunction mountAuthMiddleware(app: Express, auth: AuthConfig, oauthPaths: Set<string>, context: SilkweaveContext) {\n app.use(async (req: Request, res: Response, next: (err?: unknown) => void) => {\n if (req.path.startsWith('/.well-known/') || oauthPaths.has(req.path)) { return next() }\n const result = await validateToken(req.headers.authorization, auth, context.fork({ request: req }))\n if (result.error) {\n for (const [key, value] of Object.entries(result.error.headers)) {\n res.header(key, value)\n }\n res.status(result.error.statusCode).json(result.error.body)\n return\n }\n if (result.auth) {\n authStorage.run(result.auth, () => { next() })\n } else {\n next()\n }\n })\n}\n\nfunction registerTools(server: McpServer, actions: Action[], context: SilkweaveContext) {\n for (const action of actions) {\n server.registerTool(pascalCase(action.name), {\n title: capitalCase(action.name),\n description: action.description,\n inputSchema: action.input\n }, async (input, extra) => {\n const logger = createLogger({\n stream: process.stderr,\n onLog: (level, data) => {\n extra.sendNotification({ method: 'notifications/message', params: { level, data } })\n },\n onProgress: ({ progress, total, message }) => {\n if (!extra._meta?.progressToken) { return }\n extra.sendNotification({\n method: 'notifications/progress',\n params: { progress, total, message, progressToken: extra._meta.progressToken }\n })\n }\n })\n const currentAuth = authStorage.getStore()\n const actionContext = context.fork({ logger, extra, ...(currentAuth ? { auth: currentAuth } : {}) })\n const disposition = extra._meta?.disposition\n return action.run(input, actionContext).then((result) => {\n if (action.toolResult) {\n const response = action.toolResult(result, actionContext)\n if (response) { return response }\n }\n if (disposition === 'json') {\n return jsonToolResult(result)\n } else {\n return smartToolResult(result)\n }\n }).catch(handleToolError)\n })\n }\n}\n\nfunction createMcpServer(options: SilkweaveOptions, actions: Action[], context: SilkweaveContext): McpServer {\n const server = new McpServer({\n name: options.name,\n description: options.description,\n version: options.version\n }, {\n capabilities: { tools: {}, logging: {} }\n })\n registerTools(server, actions, context)\n return server\n}\n\nfunction createSessionTransport(transports: Record<string, StreamableHTTPServerTransport>): StreamableHTTPServerTransport {\n const eventStore = new InMemoryEventStore()\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: () => randomUUID(),\n enableJsonResponse: false,\n eventStore,\n onsessioninitialized: (sId) => {\n console.log(`Session initialized with ID: ${sId}`)\n transports[sId] = transport\n }\n })\n transport.onerror = (error) => {\n console.error(error)\n }\n transport.onclose = () => {\n const sid = transport.sessionId\n if (sid && transports[sid]) {\n console.log(`Transport closed for session ${sid}, removing from transports map`)\n delete transports[sid]\n }\n }\n return transport\n}\n\nfunction mountMcpTransport(\n app: Express,\n transports: Record<string, StreamableHTTPServerTransport>,\n createServer: () => McpServer\n) {\n app.post('/mcp', async (req: Request, res: Response) => {\n const sessionId = req.headers['mcp-session-id'] as string | undefined\n try {\n if (sessionId && transports[sessionId]) {\n await transports[sessionId].handleRequest(req, res, req.body)\n return\n }\n\n if (!isInitializeRequest(req.body)) {\n res.status(404).json({\n jsonrpc: '2.0',\n error: { code: -32_000, message: 'Session not found' },\n id: null\n })\n return\n }\n\n const transport = createSessionTransport(transports)\n await createServer().connect(transport)\n await transport.handleRequest(req, res, req.body)\n } catch (error) {\n console.error('Error handling MCP request:', error)\n if (!res.headersSent) {\n res.status(500).json({\n jsonrpc: '2.0',\n error: { code: -32_603, message: 'Internal server error' },\n id: null\n })\n }\n }\n })\n\n const handleSessionStream = async (req: Request, res: Response) => {\n const sessionId = req.headers['mcp-session-id'] as string | undefined\n if (!sessionId || !transports[sessionId]) {\n res.status(400).send('Invalid or missing session ID')\n return\n }\n const transport = transports[sessionId]\n await transport.handleRequest(req, res)\n }\n\n app.get('/mcp', handleSessionStream)\n app.delete('/mcp', handleSessionStream)\n app.get('/mcp/resource/:id', handleSessionStream)\n}\n\nexport const http: AdapterFactory<HttpAdapterOptions> = ({ host, port, auth, cors: corsConfig, ...mcpOptions }) => {\n return (options, baseContext) => {\n const context = baseContext.fork({ adapter: 'http' })\n const app = createMcpExpressApp({ ...mcpOptions, host })\n\n if (corsConfig !== false) {\n const userConfig = corsConfig === true || corsConfig === undefined ? {} : corsConfig\n const userExposed = userConfig.exposedHeaders\n const exposedHeaders = [\n ...MCP_REQUIRED_HEADERS,\n ...(Array.isArray(userExposed) ? userExposed : userExposed ? [userExposed] : [])\n ]\n app.use(cors({ origin: '*', ...userConfig, exposedHeaders }))\n }\n\n if (auth?.authorizationServers?.length && auth.resourceUrl) {\n app.get('/.well-known/oauth-protected-resource', (_req: Request, res: Response) => {\n const metadata = generateProtectedResourceMetadata(auth.resourceUrl!, auth.authorizationServers!)\n res.json(metadata)\n })\n }\n\n const oauthPaths = auth?.provider ? mountOAuthRoutes(app, auth) : new Set<string>()\n\n if (auth) {\n mountAuthMiddleware(app, auth, oauthPaths, context)\n }\n\n const transports: Record<string, StreamableHTTPServerTransport> = {}\n let mountedActions: Action[] = []\n\n app.get('/resource/:id', async (req: Request, res: Response) => {\n const id = req.params.id\n if (!id || typeof id !== 'string') { throw new Error('Invalid ID') }\n const resourceMeta: SideloadResource = JSON.parse(await readFile(`resources/${id}.json`, 'utf-8'))\n const buffer = await readFile(`resources/${id}`)\n res.status(200)\n res.header('Content-Type', resourceMeta.contentType)\n res.send(buffer)\n })\n\n mountMcpTransport(app, transports, () => createMcpServer(options, mountedActions, context))\n\n let httpServer: Server | undefined\n return {\n context,\n start: async (actions) => {\n mountedActions = actions\n httpServer = app.listen(port, host, (error) => {\n if (error) {\n console.error('Failed to start server:', error)\n process.exit(1)\n }\n console.log(`MCP Streamable HTTP Server listening on http://${host}:${port}/mcp`)\n })\n },\n stop: async () => {\n if (httpServer) {\n await new Promise<void>((resolve, reject) => {\n return httpServer!.close((err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n }\n httpServer = undefined\n }\n }\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { Action, AdapterFactory, SilkweaveContext } from '@silkweave/core'\nimport { createLogger } from '@silkweave/logger'\nimport { capitalCase, pascalCase } from 'change-case'\nimport { handleToolError, smartToolResult } from '../util/result.js'\n\nfunction registerTools(server: McpServer, actions: Action[], context: SilkweaveContext) {\n for (const action of actions) {\n server.registerTool(pascalCase(action.name), {\n title: capitalCase(action.name),\n description: action.description,\n inputSchema: action.input\n }, async (input, extra) => {\n const logger = createLogger({\n stream: false,\n onLog: (level, data) => {\n extra.sendNotification({ method: 'notifications/message', params: { level, data } })\n },\n onProgress: ({ progress, total, message }) => {\n if (!extra._meta?.progressToken) { return }\n extra.sendNotification({\n method: 'notifications/progress',\n params: { progress, total, message, progressToken: extra._meta.progressToken }\n })\n }\n })\n const actionContext = context.fork({ logger, extra })\n return action.run(input, actionContext)\n .then((result) => action.toolResult?.(result, actionContext) ?? smartToolResult(result))\n .catch(handleToolError)\n })\n }\n}\n\nexport const stdio: AdapterFactory = () => {\n return (options, baseContext) => {\n const context = baseContext.fork({ adapter: 'stdio' })\n const server = new McpServer({\n name: options.name,\n description: options.description,\n version: options.version\n }, {\n capabilities: { tools: {}, logging: {} }\n })\n return {\n context,\n start: async (actions) => {\n registerTools(server, actions, context)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n },\n stop: async () => {\n await server?.close()\n }\n }\n }\n}\n","import { randomUUID } from 'crypto'\nimport { writeFile } from 'fs/promises'\n\nexport interface SideloadResource {\n id: string\n name: string\n contentType: string\n size: number\n}\n\nexport async function createSideloadResource(buffer: Buffer, { name, contentType }: Pick<SideloadResource, 'name' | 'contentType'>) {\n const id = randomUUID()\n const resource: SideloadResource = { id, name, contentType, size: buffer.length }\n await Promise.all([\n writeFile(`resources/${id}`, buffer),\n writeFile(`resources/${id}.json`, JSON.stringify(resource), 'utf-8')\n ])\n return resource\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silkweave/mcp",
3
- "version": "1.7.1",
3
+ "version": "1.8.0",
4
4
  "description": "Silkweave MCP Package",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,10 +16,10 @@
16
16
  "commander": "^13.1.0",
17
17
  "cors": "^2.8.6",
18
18
  "express": "^5.2.1",
19
- "zod": "^4.3.6",
20
- "@silkweave/auth": "1.7.1",
21
- "@silkweave/core": "1.7.1",
22
- "@silkweave/logger": "1.7.1"
19
+ "zod": "^3.25.0",
20
+ "@silkweave/logger": "1.8.0",
21
+ "@silkweave/core": "1.8.0",
22
+ "@silkweave/auth": "1.8.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@eslint/js": "^10.0.1",