66 lines
2.3 KiB
JavaScript
66 lines
2.3 KiB
JavaScript
"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;
|
|
}
|