MCP server for accessing Ruby YARD documentation in a project
at main 1.6 kB view raw
1#!/usr/bin/env ruby 2 3require 'json' 4require 'open3' 5 6def test_mcp_server 7 puts "Testing YARD MCP Server..." 8 9 # Test messages 10 initialize_msg = { 11 jsonrpc: "2.0", 12 method: "initialize", 13 params: { 14 protocolVersion: "2024-11-05", 15 capabilities: {}, 16 clientInfo: { name: "test", version: "1.0" } 17 }, 18 id: 1 19 } 20 21 tools_list_msg = { 22 jsonrpc: "2.0", 23 method: "tools/list", 24 params: {}, 25 id: 2 26 } 27 28 lookup_msg = { 29 jsonrpc: "2.0", 30 method: "tools/call", 31 params: { 32 name: "lookup_object", 33 arguments: { object_path: "User" } 34 }, 35 id: 3 36 } 37 38 # Send messages to server 39 input = [ 40 initialize_msg.to_json, 41 tools_list_msg.to_json, 42 lookup_msg.to_json 43 ].join("\n") + "\n" 44 45 Open3.popen3("bin/yard-mcp --no-live") do |stdin, stdout, stderr, wait_thr| 46 stdin.write(input) 47 stdin.close 48 49 # Read responses with timeout 50 responses = [] 51 begin 52 Timeout.timeout(5) do 53 while line = stdout.gets 54 responses << line.strip 55 end 56 end 57 rescue Timeout::Error 58 puts "Server response timeout (expected)" 59 end 60 61 wait_thr.kill 62 63 puts "Server responses:" 64 responses.each_with_index do |response, i| 65 next if response.empty? 66 begin 67 parsed = JSON.parse(response) 68 puts "#{i + 1}. #{parsed['method'] || 'Response'}: #{response[0..100]}..." 69 rescue JSON::ParserError 70 puts "#{i + 1}. Raw: #{response[0..100]}..." 71 end 72 end 73 end 74end 75 76if __FILE__ == $0 77 require 'timeout' 78 test_mcp_server 79end