@nextclaw/mcp 0.1.86 → 0.1.88

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.
package/dist/index.d.ts CHANGED
@@ -235,4 +235,5 @@ declare class McpInstalledViewService {
235
235
  listInstalled(): McpInstalledRecord[];
236
236
  }
237
237
  //#endregion
238
- export { McpCatalogFilter, McpClientFactory, McpConfigReconcileResult, McpDoctorFacade, McpDoctorReport, McpDoctorService, McpInstallTemplateMaterializer, McpInstalledRecord, McpInstalledViewService, McpLifecycleState, McpMarketplaceInputField, McpMarketplaceInstallTemplate, McpMarketplaceTransportType, McpMaterializeInstallParams, McpMutationResult, McpMutationService, McpRegistryService, McpServerLifecycleManager, McpServerRecord, McpServerWarmResult, McpToolCatalogEntry, buildQualifiedMcpToolName, getMcpServer, isServerAccessibleToAgent, listMcpServers, normalizeMcpServerName, readDefaultAgentId, sanitizeMcpSegment };
238
+ export { McpCatalogFilter, McpClientFactory, McpConfigReconcileResult, McpDoctorFacade, McpDoctorReport, McpDoctorService, McpInstallTemplateMaterializer, McpInstalledRecord, McpInstalledViewService, McpLifecycleState, McpMarketplaceInputField, McpMarketplaceInstallTemplate, McpMarketplaceTransportType, McpMaterializeInstallParams, McpMutationResult, McpMutationService, McpRegistryService, McpServerLifecycleManager, McpServerRecord, McpServerWarmResult, McpToolCatalogEntry, buildQualifiedMcpToolName, getMcpServer, isServerAccessibleToAgent, listMcpServers, normalizeMcpServerName, readDefaultAgentId, sanitizeMcpSegment };
239
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/config/mcp-config-normalizer.ts","../src/client/mcp-client-factory.ts","../src/lifecycle/mcp-server-lifecycle-manager.ts","../src/registry/mcp-registry-service.ts","../src/doctor/mcp-doctor-service.ts","../src/doctor/mcp-doctor-facade.ts","../src/install/mcp-install-template-materializer.ts","../src/manage/mcp-mutation-service.ts","../src/view/mcp-installed-view-service.ts"],"mappings":";;;;;KAQY,eAAA;EACV,IAAA;EACA,UAAA,EAAY,mBAAA;AAAA;AAAA,KAGF,mBAAA;EACV,aAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,UAAA,GAAa,MAAA;AAAA;AAAA,KAGH,mBAAA;EACV,IAAA;EACA,EAAA;EACA,SAAA;EACA,KAAA;AAAA;AAAA,KAGU,eAAA;EACV,IAAA;EACA,OAAA;EACA,SAAA,EAAW,YAAA;EACX,UAAA;EACA,SAAA;EACA,KAAA;AAAA;AAAA,KAGU,wBAAA;EACV,KAAA;EACA,OAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;EACA,MAAA,EAAQ,mBAAA;AAAA;AAAA,KAGE,gBAAA;EACV,OAAA;AAAA;AAAA,KAGU,iBAAA;EACV,MAAA,EAAQ,eAAA;EACR,KAAA,EAAO,mBAAA;EACP,WAAA;EACA,WAAA;EACA,SAAA;AAAA;AAAA,KAGU,2BAAA,GAA8B,YAAA;AAAA,KAE9B,wBAAA;EACV,EAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,MAAA;EACA,YAAA;AAAA;AAAA,KAGU,6BAAA;EACV,IAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA;EACA,cAAA,EAAgB,2BAAA;EAChB,QAAA,EAAU,mBAAA;EACV,MAAA,EAAQ,wBAAA;AAAA;AAAA,KAGE,kBAAA;EACV,IAAA;EACA,OAAA;EACA,SAAA,EAAW,YAAA;EACX,KAAA,EAAO,cAAA;EACP,MAAA;EACA,WAAA;EACA,WAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;AAAA;AAAA,KAGU,iBAAA;EACV,OAAA;EACA,IAAA;EACA,OAAA;EACA,UAAA,GAAa,mBAAA;AAAA;AAAA,KAGH,2BAAA;EACV,QAAA,EAAU,6BAAA;EACV,IAAA;EACA,OAAA;EACA,KAAA,GAAQ,OAAA,CAAQ,cAAA;EAChB,MAAA,GAAS,MAAA;EACT,QAAA,GAAW,OAAA,CAAQ,iBAAA;AAAA;AAAA,iBAGL,sBAAA,CAAuB,IAAA;AAAA,iBAWvB,kBAAA,CAAmB,MAAA,EAAQ,MAAA;AAAA,iBAQ3B,yBAAA,CAA0B,MAAA;EACxC,MAAA,EAAQ,MAAA;EACR,KAAA,EAAO,cAAA;EACP,OAAA;AAAA;AAAA,iBAiBc,yBAAA,CAA0B,UAAA,UAAoB,QAAA;AAAA,iBAI9C,kBAAA,CAAmB,KAAA;;;iBC1JnB,cAAA,CAAe,MAAA,EAAQ,MAAA,GAAS,eAAA;AAAA,iBAShC,YAAA,CAAa,MAAA,EAAQ,MAAA,EAAQ,IAAA,WAAe,eAAA;;;KCHvD,eAAA;EACH,MAAA,EAAQ,MAAA;EACR,SAAA,EAAW,SAAA;AAAA;AAAA,cAiEA,gBAAA;EAAA,iBACkB,OAAA;cAAA,OAAA,GAAU,MAAA;EAIvC,MAAA,CAAO,MAAA,EAAQ,eAAA,GAAkB,eAAA;AAAA;;;cChEtB,yBAAA;EAAA,iBAKQ,OAAA;EAAA,iBAJF,kBAAA;EAAA,iBACA,gBAAA;cAGE,OAAA;IACf,SAAA,QAAiB,MAAA;IACjB,aAAA,GAAgB,gBAAA;IAChB,GAAA,SAAY,IAAA;EAAA;EAIV,UAAA,CAAW,MAAA,EAAQ,eAAA,GAAkB,OAAA,CAAQ,iBAAA;EAKnD,gBAAA,CAAiB,UAAA,WAAqB,mBAAA;EAItC,cAAA,CAAe,UAAA,WAAqB,iBAAA;EAQ9B,QAAA,CAAS,MAAA,EAAQ,eAAA,EAAiB,QAAA,UAAkB,IAAA,EAAM,MAAA,oBAA0B,OAAA;EASpF,QAAA,CAAA,GAAY,OAAA;EAcZ,WAAA,CAAY,UAAA,WAAqB,OAAA;EAAA,QAwBzB,gBAAA;EAAA,QAyBA,OAAA;EAAA,QAwBN,eAAA;EAAA,QAUA,mBAAA;AAAA;;;cC5IG,kBAAA;EAAA,iBAIQ,OAAA;EAAA,iBAHF,gBAAA;cAGE,OAAA;IACf,SAAA,QAAiB,MAAA;IACjB,gBAAA,GAAmB,yBAAA;EAAA;EAQvB,WAAA,CAAA,GAAe,eAAA;EAIf,SAAA,CAAU,IAAA,WAAe,eAAA;EAInB,qBAAA,CAAA,GAAyB,OAAA,CAAQ,mBAAA;EAyBjC,UAAA,CAAW,IAAA,WAAe,OAAA,CAAQ,mBAAA;EAuBlC,eAAA,CAAgB,MAAA;IACpB,UAAA,EAAY,MAAA;IACZ,UAAA,EAAY,MAAA;EAAA,IACV,OAAA,CAAQ,wBAAA;EA0DZ,mBAAA,CAAoB,MAAA,GAAQ,gBAAA,GAAwB,mBAAA;EAepD,cAAA,CAAe,UAAA,WAfwD,iBAAA;EAmBjE,QAAA,CAAS,MAAA;IACb,UAAA;IACA,QAAA;IACA,IAAA,EAAM,MAAA;EAAA,IACJ,OAAA;EAQE,KAAA,CAAA,GAAS,OAAA;EAAA,QAID,UAAA;AAAA;;;cC9KH,gBAAA;EAAA,iBAEQ,OAAA;cAAA,OAAA;IACf,SAAA,QAAiB,MAAA;IACjB,eAAA,GAAkB,kBAAA;EAAA;EAIhB,OAAA,CAAQ,IAAA,YAAgB,OAAA,CAAQ,eAAA;AAAA;;;cCP3B,eAAA;EAAA,iBAIQ,OAAA;EAAA,iBAHF,aAAA;cAGE,OAAA;IACf,SAAA,QAAiB,MAAA;IACjB,eAAA,GAAkB,kBAAA;EAAA;EAShB,OAAA,CAAQ,IAAA,YAAgB,OAAA,CAAQ,eAAA;EAIhC,UAAA,CAAW,IAAA,WAAe,OAAA,CAAQ,eAAA;AAAA;;;cCjB7B,8BAAA;EACX,WAAA,CAAY,MAAA,EAAQ,2BAAA;IAAgC,IAAA;IAAc,UAAA,EAAY,mBAAA;EAAA;EAAA,QAUtE,WAAA;EAAA,QAsBA,UAAA;EAAA,QAYA,aAAA;AAAA;;;cC1CG,kBAAA;EAAA,iBAIQ,OAAA;EAAA,iBAHF,YAAA;cAGE,OAAA;IACf,SAAA,QAAiB,MAAA;IACjB,UAAA,GAAa,MAAA,EAAQ,MAAA;IACrB,YAAA,GAAe,8BAAA;EAAA;EAMnB,eAAA,CAAA;EAIA,SAAA,CAAU,IAAA,UAAc,UAAA,EAAY,mBAAA,GAAsB,iBAAA;EAsB1D,YAAA,CAAa,IAAA,UAAc,UAAA,EAAY,mBAAA,GAAsB,iBAAA;EAqB7D,YAAA,CAAa,IAAA,WAAe,iBAAA;EAmB5B,aAAA,CAAc,IAAA,UAAc,OAAA,YAAmB,iBAAA;EAqB/C,mBAAA,CAAoB,MAAA,EAAQ,IAAA,CAAK,2BAAA;IAC/B,QAAA,EAAU,6BAAA;EAAA,IACR,iBAAA;EAKJ,eAAA,CAAgB,UAAA,UAAoB,UAAA,WAAqB,iBAAA;EAmBzD,YAAA,CAAa,UAAA,UAAoB,UAAA,WAAqB,iBAAA;AAAA;;;cCpI3C,uBAAA;EAAA,iBAIQ,OAAA;EAAA,iBAHF,eAAA;cAGE,OAAA;IACf,SAAA,QAAiB,MAAA;IACjB,eAAA,GAAkB,kBAAA;EAAA;EAQtB,aAAA,CAAA,GAAiB,kBAAA;AAAA"}
package/dist/index.js CHANGED
@@ -605,3 +605,5 @@ var McpInstalledViewService = class {
605
605
  };
606
606
  //#endregion
607
607
  export { McpClientFactory, McpDoctorFacade, McpDoctorService, McpInstallTemplateMaterializer, McpInstalledViewService, McpMutationService, McpRegistryService, McpServerLifecycleManager, buildQualifiedMcpToolName, getMcpServer, isServerAccessibleToAgent, listMcpServers, normalizeMcpServerName, readDefaultAgentId, sanitizeMcpSegment };
608
+
609
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["undiciFetch"],"sources":["../src/types.ts","../src/config/mcp-config-normalizer.ts","../src/client/mcp-client-factory.ts","../src/lifecycle/mcp-server-lifecycle-manager.ts","../src/registry/mcp-registry-service.ts","../src/doctor/mcp-doctor-service.ts","../src/doctor/mcp-doctor-facade.ts","../src/install/mcp-install-template-materializer.ts","../src/manage/mcp-mutation-service.ts","../src/view/mcp-installed-view-service.ts"],"sourcesContent":["import type {\n Config,\n McpServerDefinition,\n McpServerMetadata,\n McpServerScope,\n McpTransport\n} from \"@nextclaw/core\";\n\nexport type McpServerRecord = {\n name: string;\n definition: McpServerDefinition;\n};\n\nexport type McpToolCatalogEntry = {\n qualifiedName: string;\n serverName: string;\n toolName: string;\n description?: string;\n parameters?: Record<string, unknown>;\n};\n\nexport type McpServerWarmResult = {\n name: string;\n ok: boolean;\n toolCount: number;\n error?: string;\n};\n\nexport type McpDoctorReport = {\n name: string;\n enabled: boolean;\n transport: McpTransport[\"type\"];\n accessible: boolean;\n toolCount: number;\n error?: string;\n};\n\nexport type McpConfigReconcileResult = {\n added: string[];\n removed: string[];\n enabled: string[];\n disabled: string[];\n restarted: string[];\n warmed: McpServerWarmResult[];\n};\n\nexport type McpCatalogFilter = {\n agentId?: string;\n};\n\nexport type McpLifecycleState = {\n record: McpServerRecord;\n tools: McpToolCatalogEntry[];\n clientReady: boolean;\n lastReadyAt?: string;\n lastError?: string;\n};\n\nexport type McpMarketplaceTransportType = McpTransport[\"type\"];\n\nexport type McpMarketplaceInputField = {\n id: string;\n label: string;\n description?: string;\n required?: boolean;\n secret?: boolean;\n defaultValue?: string;\n};\n\nexport type McpMarketplaceInstallTemplate = {\n kind: \"template\";\n spec: string;\n command: string;\n defaultName: string;\n transportTypes: McpMarketplaceTransportType[];\n template: McpServerDefinition;\n inputs: McpMarketplaceInputField[];\n};\n\nexport type McpInstalledRecord = {\n name: string;\n enabled: boolean;\n transport: McpTransport[\"type\"];\n scope: McpServerScope;\n source: \"manual\" | \"marketplace\";\n catalogSlug?: string;\n displayName?: string;\n vendor?: string;\n docsUrl?: string;\n homepage?: string;\n trustLevel?: \"official\" | \"verified\" | \"community\";\n installedAt?: string;\n toolCount?: number;\n accessible?: boolean;\n lastReadyAt?: string;\n lastError?: string;\n};\n\nexport type McpMutationResult = {\n changed: boolean;\n name: string;\n message: string;\n definition?: McpServerDefinition;\n};\n\nexport type McpMaterializeInstallParams = {\n template: McpMarketplaceInstallTemplate;\n name?: string;\n enabled?: boolean;\n scope?: Partial<McpServerScope>;\n inputs?: Record<string, string | undefined>;\n metadata?: Partial<McpServerMetadata>;\n};\n\nexport function normalizeMcpServerName(name: string): string {\n const normalized = name.trim();\n if (!normalized) {\n throw new Error(\"MCP server name is required.\");\n }\n if (!/^[A-Za-z0-9._-]+$/.test(normalized)) {\n throw new Error(\"MCP server name may only contain letters, numbers, dot, underscore, and dash.\");\n }\n return normalized;\n}\n\nexport function readDefaultAgentId(config: Config): string {\n return (\n config.agents.list.find((entry) => entry.default)?.id?.trim() ||\n config.agents.list[0]?.id?.trim() ||\n \"main\"\n );\n}\n\nexport function isServerAccessibleToAgent(params: {\n config: Config;\n scope: McpServerScope;\n agentId?: string;\n}): boolean {\n if (params.scope.allAgents) {\n return true;\n }\n\n const targetAgentId = params.agentId?.trim() || readDefaultAgentId(params.config);\n const explicitAgents = params.scope.agents\n .map((agentId) => agentId.trim())\n .filter(Boolean);\n if (explicitAgents.length > 0) {\n return explicitAgents.includes(targetAgentId);\n }\n\n return targetAgentId === readDefaultAgentId(params.config);\n}\n\nexport function buildQualifiedMcpToolName(serverName: string, toolName: string): string {\n return `mcp_${sanitizeMcpSegment(serverName)}__${sanitizeMcpSegment(toolName)}`;\n}\n\nexport function sanitizeMcpSegment(value: string): string {\n const sanitized = value\n .trim()\n .replace(/[^A-Za-z0-9_]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n return sanitized || \"unnamed\";\n}\n","import type { Config } from \"@nextclaw/core\";\nimport { normalizeMcpServerName, type McpServerRecord } from \"../types.js\";\n\nexport function listMcpServers(config: Config): McpServerRecord[] {\n return Object.entries(config.mcp.servers)\n .map(([name, definition]) => ({\n name: normalizeMcpServerName(name),\n definition\n }))\n .sort((left, right) => left.name.localeCompare(right.name));\n}\n\nexport function getMcpServer(config: Config, name: string): McpServerRecord | undefined {\n const normalizedName = normalizeMcpServerName(name);\n const definition = config.mcp.servers[normalizedName];\n if (!definition) {\n return undefined;\n }\n return {\n name: normalizedName,\n definition\n };\n}\n","import { Agent, fetch as undiciFetch } from \"undici\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport type { Config, McpTransportHttp, McpTransportSse, McpTransportStdio } from \"@nextclaw/core\";\nimport type { McpServerRecord } from \"../types.js\";\n\ntype McpClientHandle = {\n client: Client;\n transport: Transport;\n};\n\nfunction createClient(): Client {\n return new Client({\n name: \"nextclaw-mcp-client\",\n version: \"0.1.0\"\n });\n}\n\nfunction buildFetch(transport: McpTransportHttp | McpTransportSse): typeof fetch {\n const timeoutMs = transport.timeoutMs;\n const insecureAgent = transport.verifyTls ? null : new Agent({\n connect: {\n rejectUnauthorized: false\n }\n });\n\n return async (input, init) => {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await undiciFetch(input, {\n ...init,\n dispatcher: insecureAgent ?? (init as { dispatcher?: Agent } | undefined)?.dispatcher,\n signal: controller.signal\n });\n } finally {\n clearTimeout(timeout);\n }\n };\n}\n\nfunction createStdioTransport(transport: McpTransportStdio): Transport {\n return new StdioClientTransport({\n command: transport.command,\n args: transport.args,\n cwd: transport.cwd,\n env: Object.keys(transport.env).length > 0 ? transport.env : undefined,\n stderr: transport.stderr\n });\n}\n\nfunction createHttpTransport(transport: McpTransportHttp): Transport {\n return new StreamableHTTPClientTransport(new URL(transport.url), {\n requestInit: {\n headers: transport.headers\n },\n fetch: buildFetch(transport)\n });\n}\n\nfunction createSseTransport(transport: McpTransportSse): Transport {\n return new SSEClientTransport(new URL(transport.url), {\n requestInit: {\n headers: transport.headers\n },\n eventSourceInit: {\n fetch: buildFetch(transport),\n headers: transport.headers\n } as RequestInit & { fetch: typeof fetch },\n fetch: buildFetch(transport)\n });\n}\n\nexport class McpClientFactory {\n constructor(private readonly _config?: Config) {\n void this._config;\n }\n\n create(record: McpServerRecord): McpClientHandle {\n const transport = (() => {\n switch (record.definition.transport.type) {\n case \"stdio\":\n return createStdioTransport(record.definition.transport);\n case \"http\":\n return createHttpTransport(record.definition.transport);\n case \"sse\":\n return createSseTransport(record.definition.transport);\n default:\n throw new Error(`Unsupported MCP transport: ${String((record.definition.transport as { type?: string }).type)}`);\n }\n })();\n\n return {\n client: createClient(),\n transport\n };\n }\n}\n","import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport type { Config } from \"@nextclaw/core\";\nimport { McpClientFactory } from \"../client/mcp-client-factory.js\";\nimport {\n buildQualifiedMcpToolName,\n type McpLifecycleState,\n type McpServerRecord,\n type McpToolCatalogEntry\n} from \"../types.js\";\n\ntype ActiveConnection = McpLifecycleState & {\n client: Client;\n transport: Transport;\n};\n\nexport class McpServerLifecycleManager {\n private readonly pendingConnections = new Map<string, Promise<ActiveConnection>>();\n private readonly readyConnections = new Map<string, ActiveConnection>();\n\n constructor(\n private readonly options: {\n getConfig: () => Config;\n clientFactory?: McpClientFactory;\n now?: () => Date;\n }\n ) {}\n\n async warmServer(record: McpServerRecord): Promise<McpLifecycleState> {\n const connection = await this.ensureConnection(record);\n return this.stripConnection(connection);\n }\n\n getCachedCatalog(serverName: string): McpToolCatalogEntry[] {\n return this.readyConnections.get(serverName)?.tools ?? [];\n }\n\n getCachedState(serverName: string): McpLifecycleState | undefined {\n const ready = this.readyConnections.get(serverName);\n if (!ready) {\n return undefined;\n }\n return this.stripConnection(ready);\n }\n\n async callTool(record: McpServerRecord, toolName: string, args: Record<string, unknown>): Promise<unknown> {\n const connection = await this.ensureConnection(record);\n const result = await connection.client.callTool({\n name: toolName,\n arguments: args\n });\n return this.normalizeToolResult(result);\n }\n\n async closeAll(): Promise<void> {\n const pending = await Promise.allSettled(this.pendingConnections.values());\n for (const result of pending) {\n if (result.status === \"fulfilled\") {\n this.readyConnections.set(result.value.record.name, result.value);\n }\n }\n for (const connection of this.readyConnections.values()) {\n await connection.transport.close().catch(() => {});\n }\n this.pendingConnections.clear();\n this.readyConnections.clear();\n }\n\n async closeServer(serverName: string): Promise<void> {\n const ready = this.readyConnections.get(serverName);\n this.readyConnections.delete(serverName);\n\n const pending = this.pendingConnections.get(serverName);\n this.pendingConnections.delete(serverName);\n\n if (ready) {\n await ready.transport.close().catch(() => {});\n }\n\n if (!pending) {\n return;\n }\n\n const result = await Promise.allSettled([pending]);\n const settled = result[0];\n if (settled?.status === \"fulfilled\") {\n await settled.value.transport.close().catch(() => {});\n }\n this.readyConnections.delete(serverName);\n this.pendingConnections.delete(serverName);\n }\n\n private async ensureConnection(record: McpServerRecord): Promise<ActiveConnection> {\n const ready = this.readyConnections.get(record.name);\n if (ready) {\n return ready;\n }\n\n const existing = this.pendingConnections.get(record.name);\n if (existing) {\n return existing;\n }\n\n const task = this.connect(record);\n this.pendingConnections.set(record.name, task);\n\n try {\n const connection = await task;\n this.readyConnections.set(record.name, connection);\n this.pendingConnections.delete(record.name);\n return connection;\n } catch (error) {\n this.pendingConnections.delete(record.name);\n throw error;\n }\n }\n\n private async connect(record: McpServerRecord): Promise<ActiveConnection> {\n const config = this.options.getConfig();\n const clientFactory = this.options.clientFactory ?? new McpClientFactory(config);\n const { client, transport } = clientFactory.create(record);\n await client.connect(transport);\n const listedTools = await client.listTools();\n const tools = listedTools.tools.map((tool) => ({\n qualifiedName: buildQualifiedMcpToolName(record.name, tool.name),\n serverName: record.name,\n toolName: tool.name,\n description: tool.description,\n parameters: tool.inputSchema\n }));\n const now = (this.options.now ?? (() => new Date()))().toISOString();\n return {\n record,\n tools,\n clientReady: true,\n lastReadyAt: now,\n client,\n transport\n };\n }\n\n private stripConnection(connection: ActiveConnection): McpLifecycleState {\n return {\n record: connection.record,\n tools: connection.tools,\n clientReady: connection.clientReady,\n lastReadyAt: connection.lastReadyAt,\n lastError: connection.lastError\n };\n }\n\n private normalizeToolResult(result: CallToolResult | { toolResult: unknown }): unknown {\n if (\"toolResult\" in result) {\n return result.toolResult;\n }\n return {\n content: result.content,\n structuredContent: result.structuredContent,\n isError: result.isError ?? false\n };\n }\n}\n","import type { Config, McpServerDefinition } from \"@nextclaw/core\";\nimport { getMcpServer, listMcpServers } from \"../config/mcp-config-normalizer.js\";\nimport { McpServerLifecycleManager } from \"../lifecycle/mcp-server-lifecycle-manager.js\";\nimport {\n isServerAccessibleToAgent,\n type McpConfigReconcileResult,\n type McpCatalogFilter,\n type McpServerRecord,\n type McpServerWarmResult,\n type McpToolCatalogEntry\n} from \"../types.js\";\n\nexport class McpRegistryService {\n private readonly lifecycleManager: McpServerLifecycleManager;\n\n constructor(\n private readonly options: {\n getConfig: () => Config;\n lifecycleManager?: McpServerLifecycleManager;\n }\n ) {\n this.lifecycleManager = this.options.lifecycleManager ?? new McpServerLifecycleManager({\n getConfig: this.options.getConfig\n });\n }\n\n listServers(): McpServerRecord[] {\n return listMcpServers(this.options.getConfig());\n }\n\n getServer(name: string): McpServerRecord | undefined {\n return getMcpServer(this.options.getConfig(), name);\n }\n\n async prewarmEnabledServers(): Promise<McpServerWarmResult[]> {\n const results = await Promise.all(\n this.listServers()\n .filter((record) => record.definition.enabled)\n .map(async (record) => {\n try {\n const state = await this.lifecycleManager.warmServer(record);\n return {\n name: record.name,\n ok: true,\n toolCount: state.tools.length\n } satisfies McpServerWarmResult;\n } catch (error) {\n return {\n name: record.name,\n ok: false,\n toolCount: 0,\n error: toErrorMessage(error)\n } satisfies McpServerWarmResult;\n }\n })\n );\n return results.sort((left, right) => left.name.localeCompare(right.name));\n }\n\n async warmServer(name: string): Promise<McpServerWarmResult> {\n const server = this.getServer(name);\n if (!server) {\n throw new Error(`Unknown MCP server: ${name}`);\n }\n\n try {\n const state = await this.lifecycleManager.warmServer(server);\n return {\n name: server.name,\n ok: true,\n toolCount: state.tools.length\n };\n } catch (error) {\n return {\n name: server.name,\n ok: false,\n toolCount: 0,\n error: toErrorMessage(error)\n };\n }\n }\n\n async reconcileConfig(params: {\n prevConfig: Config;\n nextConfig: Config;\n }): Promise<McpConfigReconcileResult> {\n const previousServers = new Map(listMcpServers(params.prevConfig).map((record) => [record.name, record]));\n const nextServers = new Map(listMcpServers(params.nextConfig).map((record) => [record.name, record]));\n const serverNames = Array.from(new Set([...previousServers.keys(), ...nextServers.keys()])).sort((left, right) =>\n left.localeCompare(right)\n );\n\n const result: McpConfigReconcileResult = {\n added: [],\n removed: [],\n enabled: [],\n disabled: [],\n restarted: [],\n warmed: []\n };\n\n for (const serverName of serverNames) {\n const previous = previousServers.get(serverName);\n const next = nextServers.get(serverName);\n\n if (!next) {\n await this.lifecycleManager.closeServer(serverName);\n result.removed.push(serverName);\n continue;\n }\n\n if (!previous) {\n result.added.push(serverName);\n if (next.definition.enabled) {\n result.warmed.push(await this.warmRecord(next));\n }\n continue;\n }\n\n if (previous.definition.enabled && !next.definition.enabled) {\n await this.lifecycleManager.closeServer(serverName);\n result.disabled.push(serverName);\n continue;\n }\n\n if (!previous.definition.enabled && next.definition.enabled) {\n result.enabled.push(serverName);\n result.warmed.push(await this.warmRecord(next));\n continue;\n }\n\n if (hasReconnectRelevantChange(previous.definition, next.definition)) {\n await this.lifecycleManager.closeServer(serverName);\n result.restarted.push(serverName);\n if (next.definition.enabled) {\n result.warmed.push(await this.warmRecord(next));\n }\n }\n }\n\n return result;\n }\n\n listAccessibleTools(filter: McpCatalogFilter = {}): McpToolCatalogEntry[] {\n const config = this.options.getConfig();\n return this.listServers()\n .filter((record) => record.definition.enabled)\n .filter((record) =>\n isServerAccessibleToAgent({\n config,\n scope: record.definition.scope,\n agentId: filter.agentId\n })\n )\n .flatMap((record) => this.lifecycleManager.getCachedCatalog(record.name))\n .sort((left, right) => left.qualifiedName.localeCompare(right.qualifiedName));\n }\n\n getCachedState(serverName: string) {\n return this.lifecycleManager.getCachedState(serverName);\n }\n\n async callTool(params: {\n serverName: string;\n toolName: string;\n args: Record<string, unknown>;\n }): Promise<unknown> {\n const server = this.getServer(params.serverName);\n if (!server) {\n throw new Error(`Unknown MCP server: ${params.serverName}`);\n }\n return this.lifecycleManager.callTool(server, params.toolName, params.args);\n }\n\n async close(): Promise<void> {\n await this.lifecycleManager.closeAll();\n }\n\n private async warmRecord(record: McpServerRecord): Promise<McpServerWarmResult> {\n try {\n const state = await this.lifecycleManager.warmServer(record);\n return {\n name: record.name,\n ok: true,\n toolCount: state.tools.length\n };\n } catch (error) {\n return {\n name: record.name,\n ok: false,\n toolCount: 0,\n error: toErrorMessage(error)\n };\n }\n }\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction hasReconnectRelevantChange(left: McpServerDefinition, right: McpServerDefinition): boolean {\n return JSON.stringify(left.transport) !== JSON.stringify(right.transport);\n}\n","import type { Config } from \"@nextclaw/core\";\nimport { McpRegistryService } from \"../registry/mcp-registry-service.js\";\nimport { type McpDoctorReport } from \"../types.js\";\n\nexport class McpDoctorService {\n constructor(\n private readonly options: {\n getConfig: () => Config;\n registryService?: McpRegistryService;\n }\n ) {}\n\n async inspect(name?: string): Promise<McpDoctorReport[]> {\n const registry = this.options.registryService ?? new McpRegistryService({\n getConfig: this.options.getConfig\n });\n const specificServer = name ? registry.getServer(name) : undefined;\n const servers = specificServer ? [specificServer] : name ? [] : registry.listServers();\n return await Promise.all(\n servers.map(async (server) => {\n const warmResult = await registry.warmServer(server.name);\n return {\n name: server.name,\n enabled: server.definition.enabled,\n transport: server.definition.transport.type,\n accessible: warmResult.ok,\n toolCount: warmResult.toolCount,\n ...(warmResult.error ? { error: warmResult.error } : {})\n } satisfies McpDoctorReport;\n })\n );\n }\n}\n","import type { Config } from \"@nextclaw/core\";\nimport { McpDoctorService } from \"./mcp-doctor-service.js\";\nimport type { McpRegistryService } from \"../registry/mcp-registry-service.js\";\nimport { type McpDoctorReport } from \"../types.js\";\n\nexport class McpDoctorFacade {\n private readonly doctorService: McpDoctorService;\n\n constructor(\n private readonly options: {\n getConfig: () => Config;\n registryService?: McpRegistryService;\n }\n ) {\n this.doctorService = new McpDoctorService({\n getConfig: this.options.getConfig,\n registryService: this.options.registryService\n });\n }\n\n async inspect(name?: string): Promise<McpDoctorReport[]> {\n return await this.doctorService.inspect(name);\n }\n\n async inspectOne(name: string): Promise<McpDoctorReport | null> {\n const reports = await this.inspect(name);\n return reports[0] ?? null;\n }\n}\n","import type { McpServerDefinition, McpServerMetadata, McpServerScope } from \"@nextclaw/core\";\nimport {\n normalizeMcpServerName,\n type McpMarketplaceInstallTemplate,\n type McpMaterializeInstallParams\n} from \"../types.js\";\n\nexport class McpInstallTemplateMaterializer {\n materialize(params: McpMaterializeInstallParams): { name: string; definition: McpServerDefinition } {\n const name = normalizeMcpServerName(params.name?.trim() || params.template.defaultName);\n const inputs = params.inputs ?? {};\n const definition = this.applyInputs(params.template.template, inputs);\n definition.enabled = params.enabled ?? definition.enabled;\n definition.scope = this.mergeScope(definition.scope, params.scope);\n definition.metadata = this.mergeMetadata(definition.metadata, params.template, params.metadata);\n return { name, definition };\n }\n\n private applyInputs(definition: McpServerDefinition, inputs: Record<string, string | undefined>): McpServerDefinition {\n const replacer = (value: string): string =>\n value.replace(/\\{\\{\\s*([A-Za-z0-9._-]+)\\s*\\}\\}/g, (_, key: string) => inputs[key]?.trim() ?? \"\");\n\n const transform = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n return replacer(value);\n }\n if (Array.isArray(value)) {\n return value.map((entry) => transform(entry));\n }\n if (!value || typeof value !== \"object\") {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, transform(entry)])\n );\n };\n\n return transform(structuredClone(definition)) as McpServerDefinition;\n }\n\n private mergeScope(current: McpServerScope, override?: Partial<McpServerScope>): McpServerScope {\n if (!override) {\n return current;\n }\n const agents = Array.from(new Set((override.agents ?? current.agents ?? []).map((entry) => entry.trim()).filter(Boolean)));\n const allAgents = override.allAgents ?? current.allAgents ?? agents.length === 0;\n return {\n allAgents,\n agents: allAgents ? [] : agents\n };\n }\n\n private mergeMetadata(\n current: McpServerMetadata | undefined,\n template: McpMarketplaceInstallTemplate,\n override?: Partial<McpServerMetadata>\n ): McpServerMetadata {\n return {\n ...current,\n source: \"marketplace\",\n catalogSlug: template.spec,\n displayName: override?.displayName ?? current?.displayName,\n vendor: override?.vendor ?? current?.vendor,\n docsUrl: override?.docsUrl ?? current?.docsUrl,\n homepage: override?.homepage ?? current?.homepage,\n trustLevel: override?.trustLevel ?? current?.trustLevel ?? \"official\",\n installedAt: override?.installedAt ?? current?.installedAt ?? new Date().toISOString(),\n ...(override ?? {})\n };\n }\n}\n","import type { Config, McpServerDefinition } from \"@nextclaw/core\";\nimport { getMcpServer, listMcpServers } from \"../config/mcp-config-normalizer.js\";\nimport { McpInstallTemplateMaterializer } from \"../install/mcp-install-template-materializer.js\";\nimport {\n normalizeMcpServerName,\n type McpMarketplaceInstallTemplate,\n type McpMaterializeInstallParams,\n type McpMutationResult\n} from \"../types.js\";\n\nexport class McpMutationService {\n private readonly materializer: McpInstallTemplateMaterializer;\n\n constructor(\n private readonly options: {\n getConfig: () => Config;\n saveConfig: (config: Config) => void;\n materializer?: McpInstallTemplateMaterializer;\n }\n ) {\n this.materializer = this.options.materializer ?? new McpInstallTemplateMaterializer();\n }\n\n listServerNames(): string[] {\n return listMcpServers(this.options.getConfig()).map((record) => record.name);\n }\n\n addServer(name: string, definition: McpServerDefinition): McpMutationResult {\n const normalizedName = normalizeMcpServerName(name);\n const config = this.options.getConfig();\n if (config.mcp.servers[normalizedName]) {\n return {\n changed: false,\n name: normalizedName,\n message: `MCP server already exists: ${normalizedName}. Use 'mcp list' or remove it first.`,\n definition: config.mcp.servers[normalizedName]\n };\n }\n\n config.mcp.servers[normalizedName] = definition;\n this.options.saveConfig(config);\n return {\n changed: true,\n name: normalizedName,\n message: `Added MCP server ${normalizedName}.`,\n definition\n };\n }\n\n updateServer(name: string, definition: McpServerDefinition): McpMutationResult {\n const normalizedName = normalizeMcpServerName(name);\n const config = this.options.getConfig();\n if (!config.mcp.servers[normalizedName]) {\n return {\n changed: false,\n name: normalizedName,\n message: `Unknown MCP server: ${normalizedName}`\n };\n }\n\n config.mcp.servers[normalizedName] = definition;\n this.options.saveConfig(config);\n return {\n changed: true,\n name: normalizedName,\n message: `Updated MCP server ${normalizedName}.`,\n definition\n };\n }\n\n removeServer(name: string): McpMutationResult {\n const normalizedName = normalizeMcpServerName(name);\n const config = this.options.getConfig();\n if (!config.mcp.servers[normalizedName]) {\n return {\n changed: false,\n name: normalizedName,\n message: `Unknown MCP server: ${normalizedName}`\n };\n }\n delete config.mcp.servers[normalizedName];\n this.options.saveConfig(config);\n return {\n changed: true,\n name: normalizedName,\n message: `Removed MCP server ${normalizedName}.`\n };\n }\n\n toggleEnabled(name: string, enabled: boolean): McpMutationResult {\n const normalizedName = normalizeMcpServerName(name);\n const config = this.options.getConfig();\n const current = config.mcp.servers[normalizedName];\n if (!current) {\n return {\n changed: false,\n name: normalizedName,\n message: `Unknown MCP server: ${normalizedName}`\n };\n }\n current.enabled = enabled;\n this.options.saveConfig(config);\n return {\n changed: true,\n name: normalizedName,\n message: `${enabled ? \"Enabled\" : \"Disabled\"} MCP server ${normalizedName}.`,\n definition: current\n };\n }\n\n installFromTemplate(params: Omit<McpMaterializeInstallParams, \"template\"> & {\n template: McpMarketplaceInstallTemplate;\n }): McpMutationResult {\n const materialized = this.materializer.materialize(params);\n return this.addServer(materialized.name, materialized.definition);\n }\n\n duplicateServer(sourceName: string, targetName: string): McpMutationResult {\n const source = getMcpServer(this.options.getConfig(), sourceName);\n if (!source) {\n return {\n changed: false,\n name: normalizeMcpServerName(sourceName),\n message: `Unknown MCP server: ${normalizeMcpServerName(sourceName)}`\n };\n }\n const definition = structuredClone(source.definition) as McpServerDefinition;\n if (definition.metadata) {\n definition.metadata = {\n ...definition.metadata,\n installedAt: new Date().toISOString()\n };\n }\n return this.addServer(targetName, definition);\n }\n\n renameServer(sourceName: string, targetName: string): McpMutationResult {\n const source = getMcpServer(this.options.getConfig(), sourceName);\n if (!source) {\n return {\n changed: false,\n name: normalizeMcpServerName(sourceName),\n message: `Unknown MCP server: ${normalizeMcpServerName(sourceName)}`\n };\n }\n\n const nextName = normalizeMcpServerName(targetName);\n const config = this.options.getConfig();\n if (source.name === nextName) {\n return {\n changed: false,\n name: nextName,\n message: `MCP server already named ${nextName}.`,\n definition: source.definition\n };\n }\n if (config.mcp.servers[nextName]) {\n return {\n changed: false,\n name: nextName,\n message: `MCP server already exists: ${nextName}. Use another name.`\n };\n }\n\n delete config.mcp.servers[source.name];\n config.mcp.servers[nextName] = source.definition;\n this.options.saveConfig(config);\n return {\n changed: true,\n name: nextName,\n message: `Renamed MCP server ${source.name} -> ${nextName}.`,\n definition: source.definition\n };\n }\n}\n","import type { Config } from \"@nextclaw/core\";\nimport { McpRegistryService } from \"../registry/mcp-registry-service.js\";\nimport { type McpInstalledRecord } from \"../types.js\";\n\nexport class McpInstalledViewService {\n private readonly registryService: McpRegistryService;\n\n constructor(\n private readonly options: {\n getConfig: () => Config;\n registryService?: McpRegistryService;\n }\n ) {\n this.registryService = this.options.registryService ?? new McpRegistryService({\n getConfig: this.options.getConfig\n });\n }\n\n listInstalled(): McpInstalledRecord[] {\n return this.registryService.listServers().map((server) => {\n const metadata = server.definition.metadata;\n const cached = this.registryService.getCachedState(server.name);\n return {\n name: server.name,\n enabled: server.definition.enabled,\n transport: server.definition.transport.type,\n scope: server.definition.scope,\n source: metadata?.source === \"marketplace\" ? \"marketplace\" : \"manual\",\n catalogSlug: metadata?.catalogSlug,\n displayName: metadata?.displayName,\n vendor: metadata?.vendor,\n docsUrl: metadata?.docsUrl,\n homepage: metadata?.homepage,\n trustLevel: metadata?.trustLevel,\n installedAt: metadata?.installedAt,\n accessible: cached?.clientReady,\n toolCount: cached?.tools.length,\n lastReadyAt: cached?.lastReadyAt,\n lastError: cached?.lastError\n } satisfies McpInstalledRecord;\n });\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/mcp",
3
- "version": "0.1.86",
3
+ "version": "0.1.88",
4
4
  "private": false,
5
5
  "description": "Platform-level MCP registry, lifecycle, and diagnostics for NextClaw.",
6
6
  "type": "module",
@@ -17,7 +17,7 @@
17
17
  "dependencies": {
18
18
  "@modelcontextprotocol/sdk": "^1.27.1",
19
19
  "undici": "^6.21.0",
20
- "@nextclaw/core": "0.12.21"
20
+ "@nextclaw/core": "0.12.23"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/node": "^20.17.6",
@@ -27,7 +27,7 @@
27
27
  "zod": "^4.3.6"
28
28
  },
29
29
  "scripts": {
30
- "build": "tsdown src/index.ts --dts --clean --target es2022 --no-fixedExtension",
30
+ "build": "tsdown src/index.ts --dts.sourcemap --clean --target es2022 --no-fixedExtension",
31
31
  "lint": "cd ../.. && pnpm exec eslint packages/nextclaw-mcp --config eslint.config.mjs",
32
32
  "tsc": "tsc -p tsconfig.json",
33
33
  "test": "vitest run"