Files
patchy631--ai-engineering-hub/open-agent-builder/lib/mcp/mcp-registry.ts
T
2026-07-13 12:37:47 +08:00

187 lines
4.5 KiB
TypeScript

/**
* MCP Registry - Centralized MCP Server Configuration
*
* All MCP servers are defined here and stored in Redis
* This provides a single source of truth for MCP configurations
*/
export interface MCPServerConfig {
id: string;
name: string;
description: string;
url: string;
authType: 'none' | 'api-key' | 'url' | 'bearer';
apiKeyPlaceholder?: string;
tools: string[];
category: 'web' | 'ai' | 'productivity' | 'data' | 'automation';
enabled: boolean;
official: boolean;
documentation?: string;
}
/**
* Official MCP Servers
*/
export const officialMCPServers: MCPServerConfig[] = [
{
id: 'browserbase',
name: 'Browserbase',
description: 'Browser automation and headless browsing',
url: 'https://mcp.browserbase.com',
authType: 'api-key',
apiKeyPlaceholder: 'BROWSERBASE_API_KEY',
tools: [
'create_session',
'navigate',
'screenshot',
'get_content',
'click',
'fill_form',
],
category: 'automation',
enabled: true,
official: true,
documentation: 'https://docs.browserbase.com/mcp',
},
{
id: 'e2b',
name: 'E2B Code Interpreter',
description: 'Execute code in secure sandboxes',
url: 'https://mcp.e2b.dev',
authType: 'api-key',
apiKeyPlaceholder: 'E2B_API_KEY',
tools: [
'execute_python',
'execute_javascript',
'run_sandbox',
'install_package',
],
category: 'automation',
enabled: true,
official: true,
documentation: 'https://e2b.dev/docs/mcp',
},
{
id: 'brave-search',
name: 'Brave Search',
description: 'Web search with Brave Search API',
url: 'https://mcp.brave.com',
authType: 'api-key',
apiKeyPlaceholder: 'BRAVE_API_KEY',
tools: [
'web_search',
'news_search',
'image_search',
],
category: 'web',
enabled: true,
official: true,
documentation: 'https://brave.com/search/api/',
},
{
id: 'google-drive',
name: 'Google Drive',
description: 'Access and manage Google Drive files',
url: 'https://mcp.google.com/drive',
authType: 'bearer',
tools: [
'list_files',
'get_file',
'create_file',
'upload_file',
'search_files',
],
category: 'productivity',
enabled: false,
official: true,
documentation: 'https://developers.google.com/drive',
},
{
id: 'coingecko',
name: 'CoinGecko',
description: 'Cryptocurrency prices and market data',
url: 'https://mcp.api.coingecko.com/sse',
authType: 'none',
tools: [
'get_coin_price',
'get_coin_data',
'search_coins',
'get_trending',
'get_market_chart',
],
category: 'data',
enabled: true,
official: true,
documentation: 'https://www.coingecko.com/api/documentation',
},
];
/**
* Get all enabled MCP servers
*/
export function getEnabledMCPServers(): MCPServerConfig[] {
return officialMCPServers.filter(s => s.enabled);
}
/**
* Get MCP server by ID
*/
export function getMCPServerById(id: string): MCPServerConfig | null {
return officialMCPServers.find(s => s.id === id) || null;
}
/**
* Get MCP servers by category
*/
export function getMCPServersByCategory(category: string): MCPServerConfig[] {
return officialMCPServers.filter(s => s.category === category && s.enabled);
}
/**
* Format MCP server URL with API key
*/
export function formatMCPUrl(server: MCPServerConfig, apiKeys: Record<string, string>): string {
let url = server.url;
// Replace API key placeholders
if (server.authType === 'url' && server.apiKeyPlaceholder) {
const keyValue = apiKeys[server.apiKeyPlaceholder] || process.env[server.apiKeyPlaceholder] || '';
url = url.replace(`{${server.apiKeyPlaceholder}}`, keyValue);
}
return url;
}
/**
* Check if MCP server is configured (has required API key)
*/
export function isMCPConfigured(server: MCPServerConfig): boolean {
if (server.authType === 'none') return true;
if (!server.apiKeyPlaceholder) return true;
// Check if API key exists in environment
if (typeof process !== 'undefined' && process.env) {
return !!process.env[server.apiKeyPlaceholder];
}
return false;
}
/**
* Get MCP server configuration for Agent nodes
*/
export function getMCPConfigForAgent(serverId: string, apiKeys: Record<string, string>) {
const server = getMCPServerById(serverId);
if (!server) return null;
return {
id: server.id,
name: server.name,
label: server.name,
url: formatMCPUrl(server, apiKeys),
authType: server.authType,
description: server.description,
availableTools: server.tools,
};
}