UNPKG

@intellectronica/ruler

Version:

Ruler — apply the same rules to all coding agents

66 lines (65 loc) 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAgentMcpCapabilities = getAgentMcpCapabilities; exports.agentSupportsMcp = agentSupportsMcp; exports.filterMcpConfigForAgent = filterMcpConfigForAgent; /** * Derives MCP capabilities for an agent */ function getAgentMcpCapabilities(agent) { return { supportsStdio: agent.supportsMcpStdio?.() ?? false, supportsRemote: agent.supportsMcpRemote?.() ?? false, }; } /** * Checks if an agent supports any MCP functionality */ function agentSupportsMcp(agent) { const capabilities = getAgentMcpCapabilities(agent); return capabilities.supportsStdio || capabilities.supportsRemote; } /** * Filters MCP configuration based on agent capabilities */ function filterMcpConfigForAgent(mcpConfig, agent) { const capabilities = getAgentMcpCapabilities(agent); if (!agentSupportsMcp(agent)) { return null; } const servers = mcpConfig.mcpServers; if (!servers) { return null; } const filteredServers = {}; for (const [serverName, serverConfig] of Object.entries(servers)) { const config = serverConfig; // Determine server type const hasCommand = 'command' in config; const hasUrl = 'url' in config; const isStdio = hasCommand && !hasUrl; const isRemote = hasUrl && !hasCommand; // Include server if agent supports its type if (isStdio && capabilities.supportsStdio) { filteredServers[serverName] = serverConfig; } else if (isRemote && capabilities.supportsRemote) { filteredServers[serverName] = serverConfig; } else if (isRemote && !capabilities.supportsRemote && capabilities.supportsStdio) { // Transform remote server to stdio server using mcp-remote const transformedConfig = { command: 'npx', args: ['-y', 'mcp-remote@latest', config.url], ...Object.fromEntries(Object.entries(config).filter(([key]) => key !== 'url')), }; filteredServers[serverName] = transformedConfig; } // Note: Mixed servers (both command and url) are excluded } return Object.keys(filteredServers).length > 0 ? { mcpServers: filteredServers } : null; }