UNPKG

@builder.io/dev-tools

Version:

Builder.io Visual CMS Devtools

76 lines (75 loc) 3.1 kB
/** * Local MCP (Model Context Protocol) Client Manager for stdio transport * * This module manages local MCP servers that run as child processes using stdio transport. * Local MCP servers are defined in mcp.json configuration file in the working directory. * * Tool naming follows the same convention as remote MCPs: * - Tools are prefixed with server name: `mcp__servername__toolname` * - This prevents conflicts with built-in tools and other MCP tools */ import type { ContentMessageItemImage, ContentMessageItemText, MCPClientStatus, MCPServerConfig } from "$/ai-utils"; import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; import type { DevToolsSys } from "../core"; export interface MCPServerStdioDefinition { name: string; command: string; args?: string[]; env?: Record<string, string>; envFile?: string; } export interface MCPConfig { mcpServers: Record<string, Omit<MCPServerStdioDefinition, "name">>; } export interface LocalMCPClient { client: Client | undefined; transport: StdioClientTransport | undefined; status: MCPClientStatus; serverName: string; command: string; resources?: { uri: string; name?: string; description?: string; mimeType?: string; }[]; } export interface LocalMCPClientManager { clients: LocalMCPClient[]; listTools: () => { name: string; description?: string; inputSchema?: any; serverName: string; }[]; callTool: (name: string, args?: any, signal?: AbortSignal) => Promise<{ content: (ContentMessageItemText | ContentMessageItemImage)[]; isError?: boolean; }>; getResources: (serverName?: string) => Array<{ uri: string; name?: string; description?: string; mimeType?: string; serverName: string; text?: string; }>; getStatus: () => Record<string, MCPClientStatus>; cleanup: () => Promise<void>; } /** * Create a local MCP client manager from server definitions */ export declare function createLocalMCPClientManager(servers: MCPServerStdioDefinition[], sys: DevToolsSys, workingDirectory: string, signal?: AbortSignal): Promise<LocalMCPClientManager>; /** * Apply environment variable substitution to MCP server configuration * This is separated from loadMCPConfig to allow easy unit testing */ export declare function applyEnvSubstitution(serverConfig: Omit<MCPServerStdioDefinition, "name">, name: string, baseEnv: Record<string, string | undefined>, envFileVars: Record<string, string>): MCPServerStdioDefinition; /** * Discover and load MCP configuration from working directory and fusionConfig * Servers from fusionConfig will be merged with servers from mcp.json * If a server with the same name exists in both, fusionConfig takes precedence */ export declare function loadMCPConfig(sys: DevToolsSys, workingDirectory: string, serverConfigs: MCPServerConfig, autoImportLocalMCPs: boolean): Promise<MCPServerStdioDefinition[]>;