Module: AgentHarness::McpConfigTranslator
- Defined in:
- lib/agent_harness/mcp_config_translator.rb
Class Method Summary collapse
- .for_provider(provider, mcp_servers) ⇒ Object
- .normalize_servers(mcp_servers) ⇒ Object
- .translate_for_claude(mcp_servers) ⇒ Object
- .translate_for_codex(mcp_servers) ⇒ Object
- .translate_for_openai(mcp_servers) ⇒ Object
Class Method Details
.for_provider(provider, mcp_servers) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/agent_harness/mcp_config_translator.rb', line 7 def for_provider(provider, mcp_servers) servers = normalize_servers(mcp_servers) case provider.to_sym when :anthropic, :claude, :claude_code translate_for_claude(servers) when :codex translate_for_codex(servers) when :openai translate_for_openai(servers) else servers.map(&:to_h) end end |
.normalize_servers(mcp_servers) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/agent_harness/mcp_config_translator.rb', line 22 def normalize_servers(mcp_servers) Array(mcp_servers).map do |server| case server when McpServer server when Hash McpServer.from_hash(server) else raise McpConfigurationError, "MCP server must be a Hash or McpServer, got #{server.class}" end end end |
.translate_for_claude(mcp_servers) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/agent_harness/mcp_config_translator.rb', line 35 def translate_for_claude(mcp_servers) { mcpServers: mcp_servers.each_with_object({}) do |server, memo| entry = server.stdio? ? {command: server.command} : {url: server.url} entry[:args] = server.args if server.stdio? && !server.args.empty? entry[:env] = server.env unless server.env.empty? entry[:headers] = server.headers if server.http? && !server.headers.empty? memo[server.name] = entry end } end |
.translate_for_codex(mcp_servers) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/agent_harness/mcp_config_translator.rb', line 47 def translate_for_codex(mcp_servers) { mcp_servers: mcp_servers.each_with_object({}) do |server, memo| entry = server.stdio? ? {command: server.command, transport: server.transport} : {url: server.url, transport: server.transport} entry[:args] = server.args if server.stdio? && !server.args.empty? entry[:env] = server.env unless server.env.empty? entry[:headers] = server.headers if server.http? && !server.headers.empty? memo[server.name] = entry end } end |
.translate_for_openai(mcp_servers) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/agent_harness/mcp_config_translator.rb', line 59 def translate_for_openai(mcp_servers) mcp_servers.map do |server| unless server.http? raise McpTransportUnsupportedError.new( "Provider 'openai' only supports remote MCP servers over HTTP/SSE (server: '#{server.name}')", provider: :openai ) end unsupported_headers = server.headers.keys - ["Authorization"] unless unsupported_headers.empty? raise McpConfigurationError, "OpenAI MCP translation only supports the Authorization header (server: '#{server.name}')" end tool = { type: "mcp", server_label: server.name, server_url: server.url, require_approval: "never" } tool[:authorization] = server.headers["Authorization"] if server.headers.key?("Authorization") tool end end |