{"id":"541c63ca-3a6f-4ebd-9813-9bd92f72c5d8","shortId":"Fyfrzb","kind":"skill","title":"ruby-mcp-server-generator","tagline":"Generate a complete Model Context Protocol server project in Ruby using the official MCP Ruby SDK gem.","description":"# Ruby MCP Server Generator\n\nGenerate a complete, production-ready MCP server in Ruby using the official Ruby SDK.\n\n## Project Generation\n\nWhen asked to create a Ruby MCP server, generate a complete project with this structure:\n\n```\nmy-mcp-server/\n├── Gemfile\n├── Rakefile\n├── lib/\n│   ├── my_mcp_server.rb\n│   ├── my_mcp_server/\n│   │   ├── server.rb\n│   │   ├── tools/\n│   │   │   ├── greet_tool.rb\n│   │   │   └── calculate_tool.rb\n│   │   ├── prompts/\n│   │   │   └── code_review_prompt.rb\n│   │   └── resources/\n│   │       └── example_resource.rb\n├── bin/\n│   └── mcp-server\n├── test/\n│   ├── test_helper.rb\n│   └── tools/\n│       ├── greet_tool_test.rb\n│       └── calculate_tool_test.rb\n└── README.md\n```\n\n## Gemfile Template\n\n```ruby\nsource 'https://rubygems.org'\n\ngem 'mcp', '~> 0.4.0'\n\ngroup :development, :test do\n  gem 'minitest', '~> 5.0'\n  gem 'rake', '~> 13.0'\n  gem 'rubocop', '~> 1.50'\nend\n```\n\n## Rakefile Template\n\n```ruby\nrequire 'rake/testtask'\nrequire 'rubocop/rake_task'\n\nRake::TestTask.new(:test) do |t|\n  t.libs << 'test'\n  t.libs << 'lib'\n  t.test_files = FileList['test/**/*_test.rb']\nend\n\nRuboCop::RakeTask.new\n\ntask default: %i[test rubocop]\n```\n\n## lib/my_mcp_server.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nrequire 'mcp'\nrequire_relative 'my_mcp_server/server'\nrequire_relative 'my_mcp_server/tools/greet_tool'\nrequire_relative 'my_mcp_server/tools/calculate_tool'\nrequire_relative 'my_mcp_server/prompts/code_review_prompt'\nrequire_relative 'my_mcp_server/resources/example_resource'\n\nmodule MyMcpServer\n  VERSION = '1.0.0'\nend\n```\n\n## lib/my_mcp_server/server.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nmodule MyMcpServer\n  class Server\n    attr_reader :mcp_server\n    \n    def initialize(server_context: {})\n      @mcp_server = MCP::Server.new(\n        name: 'my_mcp_server',\n        version: MyMcpServer::VERSION,\n        tools: [\n          Tools::GreetTool,\n          Tools::CalculateTool\n        ],\n        prompts: [\n          Prompts::CodeReviewPrompt\n        ],\n        resources: [\n          Resources::ExampleResource.resource\n        ],\n        server_context: server_context\n      )\n      \n      setup_resource_handler\n    end\n    \n    def handle_json(json_string)\n      mcp_server.handle_json(json_string)\n    end\n    \n    def start_stdio\n      transport = MCP::Server::Transports::StdioTransport.new(mcp_server)\n      transport.open\n    end\n    \n    private\n    \n    def setup_resource_handler\n      mcp_server.resources_read_handler do |params|\n        Resources::ExampleResource.read(params[:uri])\n      end\n    end\n  end\nend\n```\n\n## lib/my_mcp_server/tools/greet_tool.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nmodule MyMcpServer\n  module Tools\n    class GreetTool < MCP::Tool\n      tool_name 'greet'\n      description 'Generate a greeting message'\n      \n      input_schema(\n        properties: {\n          name: {\n            type: 'string',\n            description: 'Name to greet'\n          }\n        },\n        required: ['name']\n      )\n      \n      output_schema(\n        properties: {\n          message: { type: 'string' },\n          timestamp: { type: 'string', format: 'date-time' }\n        },\n        required: ['message', 'timestamp']\n      )\n      \n      annotations(\n        read_only_hint: true,\n        idempotent_hint: true\n      )\n      \n      def self.call(name:, server_context:)\n        timestamp = Time.now.iso8601\n        message = \"Hello, #{name}! Welcome to MCP.\"\n        \n        structured_data = {\n          message: message,\n          timestamp: timestamp\n        }\n        \n        MCP::Tool::Response.new(\n          [{ type: 'text', text: message }],\n          structured_content: structured_data\n        )\n      end\n    end\n  end\nend\n```\n\n## lib/my_mcp_server/tools/calculate_tool.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nmodule MyMcpServer\n  module Tools\n    class CalculateTool < MCP::Tool\n      tool_name 'calculate'\n      description 'Perform mathematical calculations'\n      \n      input_schema(\n        properties: {\n          operation: {\n            type: 'string',\n            description: 'Operation to perform',\n            enum: ['add', 'subtract', 'multiply', 'divide']\n          },\n          a: {\n            type: 'number',\n            description: 'First operand'\n          },\n          b: {\n            type: 'number',\n            description: 'Second operand'\n          }\n        },\n        required: ['operation', 'a', 'b']\n      )\n      \n      output_schema(\n        properties: {\n          result: { type: 'number' },\n          operation: { type: 'string' }\n        },\n        required: ['result', 'operation']\n      )\n      \n      annotations(\n        read_only_hint: true,\n        idempotent_hint: true\n      )\n      \n      def self.call(operation:, a:, b:, server_context:)\n        result = case operation\n                 when 'add' then a + b\n                 when 'subtract' then a - b\n                 when 'multiply' then a * b\n                 when 'divide'\n                   return error_response('Division by zero') if b.zero?\n                   a / b.to_f\n                 else\n                   return error_response(\"Unknown operation: #{operation}\")\n                 end\n        \n        structured_data = {\n          result: result,\n          operation: operation\n        }\n        \n        MCP::Tool::Response.new(\n          [{ type: 'text', text: \"Result: #{result}\" }],\n          structured_content: structured_data\n        )\n      end\n      \n      def self.error_response(message)\n        MCP::Tool::Response.new(\n          [{ type: 'text', text: message }],\n          is_error: true\n        )\n      end\n    end\n  end\nend\n```\n\n## lib/my_mcp_server/prompts/code_review_prompt.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nmodule MyMcpServer\n  module Prompts\n    class CodeReviewPrompt < MCP::Prompt\n      prompt_name 'code_review'\n      description 'Generate a code review prompt'\n      \n      arguments [\n        MCP::Prompt::Argument.new(\n          name: 'language',\n          description: 'Programming language',\n          required: true\n        ),\n        MCP::Prompt::Argument.new(\n          name: 'focus',\n          description: 'Review focus area (e.g., performance, security)',\n          required: false\n        )\n      ]\n      \n      meta(\n        version: '1.0',\n        category: 'development'\n      )\n      \n      def self.template(args, server_context:)\n        language = args['language'] || 'Ruby'\n        focus = args['focus'] || 'general quality'\n        \n        MCP::Prompt::Result.new(\n          description: \"Code review for #{language} with focus on #{focus}\",\n          messages: [\n            MCP::Prompt::Message.new(\n              role: 'user',\n              content: MCP::Content::Text.new(\n                \"Please review this #{language} code with focus on #{focus}.\"\n              )\n            ),\n            MCP::Prompt::Message.new(\n              role: 'assistant',\n              content: MCP::Content::Text.new(\n                \"I'll review the code focusing on #{focus}. Please share the code.\"\n              )\n            ),\n            MCP::Prompt::Message.new(\n              role: 'user',\n              content: MCP::Content::Text.new(\n                '[paste code here]'\n              )\n            )\n          ]\n        )\n      end\n    end\n  end\nend\n```\n\n## lib/my_mcp_server/resources/example_resource.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nmodule MyMcpServer\n  module Resources\n    class ExampleResource\n      RESOURCE_URI = 'resource://data/example'\n      \n      def self.resource\n        MCP::Resource.new(\n          uri: RESOURCE_URI,\n          name: 'example-data',\n          description: 'Example resource data',\n          mime_type: 'application/json'\n        )\n      end\n      \n      def self.read(uri)\n        return [] unless uri == RESOURCE_URI\n        \n        data = {\n          message: 'Example resource data',\n          timestamp: Time.now.iso8601,\n          version: MyMcpServer::VERSION\n        }\n        \n        [{\n          uri: uri,\n          mimeType: 'application/json',\n          text: data.to_json\n        }]\n      end\n    end\n  end\nend\n```\n\n## bin/mcp-server Template\n\n```ruby\n#!/usr/bin/env ruby\n# frozen_string_literal: true\n\nrequire_relative '../lib/my_mcp_server'\n\nbegin\n  server = MyMcpServer::Server.new\n  server.start_stdio\nrescue Interrupt\n  warn \"\\nShutting down server...\"\n  exit 0\nrescue StandardError => e\n  warn \"Error: #{e.message}\"\n  warn e.backtrace.join(\"\\n\")\n  exit 1\nend\n```\n\nMake the file executable:\n```bash\nchmod +x bin/mcp-server\n```\n\n## test/test_helper.rb Template\n\n```ruby\n# frozen_string_literal: true\n\n$LOAD_PATH.unshift File.expand_path('../lib', __dir__)\nrequire 'my_mcp_server'\nrequire 'minitest/autorun'\n```\n\n## test/tools/greet_tool_test.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nrequire 'test_helper'\n\nmodule MyMcpServer\n  module Tools\n    class GreetToolTest < Minitest::Test\n      def test_greet_with_name\n        response = GreetTool.call(\n          name: 'Ruby',\n          server_context: {}\n        )\n        \n        refute response.is_error\n        assert_equal 1, response.content.length\n        assert_match(/Ruby/, response.content.first[:text])\n        \n        assert response.structured_content\n        assert_equal 'Hello, Ruby! Welcome to MCP.', response.structured_content[:message]\n      end\n      \n      def test_output_schema_validation\n        response = GreetTool.call(\n          name: 'Test',\n          server_context: {}\n        )\n        \n        assert response.structured_content.key?(:message)\n        assert response.structured_content.key?(:timestamp)\n      end\n    end\n  end\nend\n```\n\n## test/tools/calculate_tool_test.rb Template\n\n```ruby\n# frozen_string_literal: true\n\nrequire 'test_helper'\n\nmodule MyMcpServer\n  module Tools\n    class CalculateToolTest < Minitest::Test\n      def test_addition\n        response = CalculateTool.call(\n          operation: 'add',\n          a: 5,\n          b: 3,\n          server_context: {}\n        )\n        \n        refute response.is_error\n        assert_equal 8, response.structured_content[:result]\n      end\n      \n      def test_subtraction\n        response = CalculateTool.call(\n          operation: 'subtract',\n          a: 10,\n          b: 4,\n          server_context: {}\n        )\n        \n        refute response.is_error\n        assert_equal 6, response.structured_content[:result]\n      end\n      \n      def test_multiplication\n        response = CalculateTool.call(\n          operation: 'multiply',\n          a: 6,\n          b: 7,\n          server_context: {}\n        )\n        \n        refute response.is_error\n        assert_equal 42, response.structured_content[:result]\n      end\n      \n      def test_division\n        response = CalculateTool.call(\n          operation: 'divide',\n          a: 15,\n          b: 3,\n          server_context: {}\n        )\n        \n        refute response.is_error\n        assert_equal 5.0, response.structured_content[:result]\n      end\n      \n      def test_division_by_zero\n        response = CalculateTool.call(\n          operation: 'divide',\n          a: 10,\n          b: 0,\n          server_context: {}\n        )\n        \n        assert response.is_error\n        assert_match(/Division by zero/, response.content.first[:text])\n      end\n      \n      def test_unknown_operation\n        response = CalculateTool.call(\n          operation: 'modulo',\n          a: 10,\n          b: 3,\n          server_context: {}\n        )\n        \n        assert response.is_error\n        assert_match(/Unknown operation/, response.content.first[:text])\n      end\n    end\n  end\nend\n```\n\n## README.md Template\n\n```markdown\n# My MCP Server\n\nA Model Context Protocol server built with Ruby and the official MCP Ruby SDK.\n\n## Features\n\n- ✅ Tools: greet, calculate\n- ✅ Prompts: code_review\n- ✅ Resources: example-data\n- ✅ Input/output schemas\n- ✅ Tool annotations\n- ✅ Structured content\n- ✅ Full test coverage\n\n## Requirements\n\n- Ruby 3.0 or later\n\n## Installation\n\n```bash\nbundle install\n```\n\n## Usage\n\n### Stdio Transport\n\nRun the server:\n\n```bash\nbundle exec bin/mcp-server\n```\n\nThen send JSON-RPC requests:\n\n```bash\n{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"ping\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"tools/list\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"3\",\"method\":\"tools/call\",\"params\":{\"name\":\"greet\",\"arguments\":{\"name\":\"Ruby\"}}}\n```\n\n### Rails Integration\n\nAdd to your Rails controller:\n\n```ruby\nclass McpController < ApplicationController\n  def index\n    server = MyMcpServer::Server.new(\n      server_context: { user_id: current_user.id }\n    )\n    render json: server.handle_json(request.body.read)\n  end\nend\n```\n\n## Testing\n\nRun tests:\n\n```bash\nbundle exec rake test\n```\n\nRun linter:\n\n```bash\nbundle exec rake rubocop\n```\n\nRun all checks:\n\n```bash\nbundle exec rake\n```\n\n## Integration with Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"my-mcp-server\": {\n      \"command\": \"bundle\",\n      \"args\": [\"exec\", \"bin/mcp-server\"],\n      \"cwd\": \"/path/to/my-mcp-server\"\n    }\n  }\n}\n```\n\n## Project Structure\n\n```\nmy-mcp-server/\n├── Gemfile              # Dependencies\n├── Rakefile             # Build tasks\n├── lib/                 # Source code\n│   ├── my_mcp_server.rb # Main entry point\n│   └── my_mcp_server/   # Module namespace\n│       ├── server.rb    # Server setup\n│       ├── tools/       # Tool implementations\n│       ├── prompts/     # Prompt templates\n│       └── resources/   # Resource handlers\n├── bin/                 # Executables\n│   └── mcp-server       # Stdio server\n├── test/                # Test suite\n│   ├── test_helper.rb   # Test configuration\n│   └── tools/           # Tool tests\n└── README.md            # This file\n```\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\n1. **Ask for project name and description**\n2. **Generate all files** with proper naming and module structure\n3. **Use classes for tools and prompts** for better organization\n4. **Include input/output schemas** for type safety\n5. **Add tool annotations** for behavior hints\n6. **Include structured content** in responses\n7. **Implement comprehensive tests** for all tools\n8. **Follow Ruby conventions** (snake_case, modules, frozen_string_literal)\n9. **Add proper error handling** with is_error flag\n10. **Provide both stdio and HTTP** usage examples","tags":["ruby","mcp","server","generator","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest"],"capabilities":["skill","source-github","skill-ruby-mcp-server-generator","topic-agent-skills","topic-agents","topic-awesome","topic-custom-agents","topic-github-copilot","topic-hacktoberfest","topic-prompt-engineering"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/ruby-mcp-server-generator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add github/awesome-copilot","source_repo":"https://github.com/github/awesome-copilot","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 33270 github stars · SKILL.md body (14,362 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:24.468Z","embedding":null,"createdAt":"2026-04-18T20:26:15.673Z","updatedAt":"2026-05-18T18:52:24.468Z","lastSeenAt":"2026-05-18T18:52:24.468Z","tsv":"'/division':989 '/lib':775 '/lib/my_mcp_server':730 '/path/to/my-mcp-server':1181 '/ruby':821 '/unknown':1014 '/usr/bin/env':722 '0':744,981 '0.4.0':95 '1':755,817,1091,1240 '1.0':569 '1.0.0':176 '1.50':108 '10':908,979,1004,1313 '13.0':105 '15':954 '2':1097,1247 '2.0':1089,1095,1101 '3':887,956,1006,1103,1257 '3.0':1064 '4':910,1267 '42':941 '5':885,1274 '5.0':102,964 '6':918,931,1281 '7':933,1287 '8':895,1294 '9':1304 'add':394,445,883,1114,1166,1275,1305 'addit':879 'annot':318,426,1056,1277 'application/json':687,711 'applicationcontrol':1122 'area':561 'arg':574,578,582,1177 'argument':542,1109 'argument.new':545,555 'ask':45,1241 'assert':815,819,824,827,849,852,893,916,939,962,984,987,1009,1012 'assist':621 'attr':189 'b':404,413,438,448,453,458,886,909,932,955,980,1005 'b.to':470 'b.zero':468 'bash':761,1068,1077,1087,1143,1150,1158 'begin':731 'behavior':1279 'better':1265 'bin':78,1217 'bin/mcp-server':719,764,1080,1179 'build':1191 'built':1033 'bundl':1069,1078,1144,1151,1159,1176 'calcul':378,382,1045 'calculate_tool.rb':73 'calculate_tool_test.rb':86 'calculatetool':212,373 'calculatetool.call':881,904,927,950,975,1000 'calculatetooltest':874 'case':442,1299 'categori':570 'check':1157 'chmod':762 'class':187,278,372,528,665,797,873,1120,1259 'claud':1164 'claude_desktop_config.json':1168 'code':534,539,590,612,630,637,648,1047,1195 'code_review_prompt.rb':75 'codereviewprompt':215,529 'command':1175 'complet':8,29,54 'comprehens':1289 'configur':1229 'content':354,495,604,606,622,624,643,645,826,835,897,920,943,966,1058,1284 'context':10,196,220,222,330,440,576,811,848,889,912,935,958,983,1008,1030,1129 'control':1118 'convent':1297 'coverag':1061 'creat':47 'current_user.id':1132 'cwd':1180 'data':341,356,481,497,680,684,697,701,1052 'data.to':713 'data/example':669 'date':313 'date-tim':312 'def':193,227,237,250,326,434,499,572,670,689,801,838,877,900,923,946,969,995,1123 'default':135 'depend':1189 'descript':285,296,379,389,401,407,536,548,558,589,681,1246 'desktop':1165 'develop':97,571 'dir':776 'divid':397,460,952,977 'divis':464,948,971 'e':747 'e.backtrace.join':752 'e.g':562 'e.message':750 'els':472 'end':109,131,177,226,236,248,263,264,265,266,357,358,359,360,479,498,513,514,515,516,650,651,652,653,688,715,716,717,718,756,837,855,856,857,858,899,922,945,968,994,1018,1019,1020,1021,1138,1139 'entri':1198 'enum':393 'equal':816,828,894,917,940,963 'error':462,474,511,749,814,892,915,938,961,986,1011,1307,1311 'exampl':679,682,699,1051,1320 'example-data':678,1050 'example_resource.rb':77 'exampleresourc':666 'exampleresource.read':260 'exampleresource.resource':218 'exec':1079,1145,1152,1160,1178 'execut':760,1218 'exit':743,754 'f':471 'fals':566 'featur':1042 'file':127,759,1235,1250 'file.expand':773 'filelist':128 'first':402 'flag':1312 'focus':557,560,581,583,595,597,614,616,631,633 'follow':1295 'format':311 'frozen':142,181,270,364,520,657,724,768,786,862,1301 'full':1059 'gem':22,93,100,103,106 'gemfil':63,88,1188 'general':584 'generat':5,6,26,27,43,52,286,537,1238,1248 'greet':284,288,299,803,1044,1108 'greet_tool.rb':72 'greet_tool_test.rb':85 'greettool':210,279 'greettool.call':807,844 'greettooltest':798 'group':96 'handl':228,1308 'handler':225,253,256,1216 'hello':335,829 'helper':792,868 'hint':321,324,429,432,1280 'http':1318 'id':1090,1096,1102,1131 'idempot':323,431 'implement':1210,1288 'includ':1268,1282 'index':1124 'initi':194 'input':290,383 'input/output':1053,1269 'instal':1067,1070 'instruct':1239 'integr':1113,1162 'interrupt':738 'iso8601':333,704 'json':229,230,233,234,714,1084,1134,1136,1169 'json-rpc':1083 'jsonrpc':1088,1094,1100 'languag':547,550,577,579,593,611 'later':1066 'lib':65,125,1193 'lib/my_mcp_server.rb':139 'lib/my_mcp_server/prompts/code_review_prompt.rb':517 'lib/my_mcp_server/resources/example_resource.rb':654 'lib/my_mcp_server/server.rb':178 'lib/my_mcp_server/tools/calculate_tool.rb':361 'lib/my_mcp_server/tools/greet_tool.rb':267 'licens':1236 'linter':1149 'liter':144,183,272,366,522,659,726,770,788,864,1303 'll':627 'load_path.unshift':772 'main':1197 'make':757 'markdown':1024 'match':820,988,1013 'mathemat':381 'mcp':3,19,24,33,50,61,68,80,94,147,151,156,161,166,171,191,197,199,203,241,245,280,339,346,374,486,503,530,543,553,586,599,605,617,623,638,644,672,779,833,1026,1039,1173,1186,1201,1220 'mcp-server':79,1219 'mcp_server.handle':232 'mcp_server.resources':254 'mcpcontrol':1121 'mcpserver':1170 'messag':289,305,316,334,342,343,352,502,509,598,698,836,851 'message.new':601,619,640 'meta':567 'method':1092,1098,1104 'mime':685 'mimetyp':710 'minitest':101,799,875 'minitest/autorun':782 'mit':1237 'model':9,1029 'modul':173,185,274,276,368,370,524,526,661,663,793,795,869,871,1203,1255,1300 'modulo':1002 'multipl':925 'multipli':396,455,929 'my-mcp-serv':59,1171,1184 'my_mcp_server.rb':66,1196 'mymcpserv':174,186,206,275,369,525,662,706,733,794,870,1126 'n':753 'name':201,283,293,297,301,328,336,377,533,546,556,677,805,808,845,1107,1110,1244,1253 'namespac':1204 'nshut':740 'number':400,406,419 'offici':18,39,1038 'oper':386,390,411,420,425,436,443,477,478,484,485,882,905,928,951,976,998,1001,1015 'operand':403,409 'organ':1266 'output':302,414,840 'param':258,261,1106 'past':647 'path':774 'perform':380,392,563 'ping':1093 'pleas':608,634 'point':1199 'privat':249 'product':31 'production-readi':30 'program':549 'project':13,42,55,1182,1243 'prompt':74,213,214,527,531,532,541,544,554,587,600,618,639,1046,1211,1212,1263 'proper':1252,1306 'properti':292,304,385,416 'protocol':11,1031 'provid':1314 'qualiti':585 'rail':1112,1117 'rake':104,117,1146,1153,1161 'rake/testtask':114 'rakefil':64,110,1190 'raketask.new':133 'read':255,319,427 'reader':190 'readi':32 'readme.md':87,1022,1233 'refut':812,890,913,936,959 'relat':149,154,159,164,169,729 'render':1133 'request':1086 'request.body.read':1137 'requir':113,115,146,148,153,158,163,168,300,315,410,423,551,565,728,777,781,790,866,1062 'rescu':737,745 'resourc':76,216,217,224,252,259,664,667,675,683,695,700,1049,1214,1215 'resource.new':673 'respons':463,475,501,806,843,880,903,926,949,974,999,1286 'response.content.first':822,992,1016 'response.content.length':818 'response.is':813,891,914,937,960,985,1010 'response.new':348,488,505 'response.structured':825,834,896,919,942,965 'response.structured_content.key':850,853 'result':417,424,441,482,483,492,493,898,921,944,967 'result.new':588 'return':461,473,692 'review':535,540,559,591,609,628,1048 'role':602,620,641 'rpc':1085 'rubi':2,15,20,23,36,40,49,90,112,141,180,269,363,519,580,656,721,723,767,785,809,830,861,1035,1040,1063,1111,1119,1296 'rubocop':107,132,138,1154 'rubocop/rake_task':116 'ruby-mcp-server-gener':1 'rubygems.org':92 'run':1074,1141,1148,1155 'safeti':1273 'schema':291,303,384,415,841,1054,1270 'sdk':21,41,1041 'second':408 'secur':564 'self.call':327,435 'self.error':500 'self.read':690 'self.resource':671 'self.template':573 'send':1082 'server':4,12,25,34,51,62,69,81,188,192,195,198,204,219,221,242,246,329,439,575,732,742,780,810,847,888,911,934,957,982,1007,1027,1032,1076,1125,1128,1174,1187,1202,1206,1221,1223 'server.handle':1135 'server.new':200,734,1127 'server.rb':70,1205 'server.start':735 'server/prompts/code_review_prompt':167 'server/resources/example_resource':172 'server/server':152 'server/tools/calculate_tool':162 'server/tools/greet_tool':157 'setup':223,251,1207 'share':635 'skill' 'skill-ruby-mcp-server-generator' 'snake':1298 'sourc':91,1194 'source-github' 'standarderror':746 'start':238 'stdio':239,736,1072,1222,1316 'stdiotransport.new':244 'string':143,182,231,235,271,295,307,310,365,388,422,521,658,725,769,787,863,1302 'structur':58,340,353,355,480,494,496,1057,1183,1256,1283 'subtract':395,450,902,906 'suit':1226 't.libs':122,124 't.test':126 'task':134,1192 'templat':89,111,140,179,268,362,518,655,720,766,784,860,1023,1213 'test':82,98,119,123,129,137,791,800,802,839,846,867,876,878,901,924,947,970,996,1060,1140,1142,1147,1224,1225,1228,1232,1290 'test.rb':130 'test/test_helper.rb':765 'test/tools/calculate_tool_test.rb':859 'test/tools/greet_tool_test.rb':783 'test_helper.rb':83,1227 'testtask.new':118 'text':350,351,490,491,507,508,712,823,993,1017 'text.new':607,625,646 'time':314 'time.now':332,703 'timestamp':308,317,331,344,345,702,854 'tool':71,84,208,209,211,277,281,282,347,371,375,376,487,504,796,872,1043,1055,1208,1209,1230,1231,1261,1276,1293 'tools/call':1105 'tools/list':1099 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'transport':240,243,1073 'transport.open':247 'true':145,184,273,322,325,367,430,433,512,523,552,660,727,771,789,865 'type':294,306,309,349,387,399,405,418,421,489,506,686,1272 'unknown':476,997 'unless':693 'uri':262,668,674,676,691,694,696,708,709 'usag':1071,1319 'use':16,37,1258 'user':603,642,1130 'valid':842 'version':175,205,207,568,705,707 'warn':739,748,751 'welcom':337,831 'x':763 'zero':466,973,991","prices":[{"id":"3db0f73b-6fa2-4e8f-9ae3-232ae550c1a5","listingId":"541c63ca-3a6f-4ebd-9813-9bd92f72c5d8","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:26:15.673Z"}],"sources":[{"listingId":"541c63ca-3a6f-4ebd-9813-9bd92f72c5d8","source":"github","sourceId":"github/awesome-copilot/ruby-mcp-server-generator","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/ruby-mcp-server-generator","isPrimary":false,"firstSeenAt":"2026-04-18T21:51:07.867Z","lastSeenAt":"2026-05-18T18:52:24.468Z"},{"listingId":"541c63ca-3a6f-4ebd-9813-9bd92f72c5d8","source":"skills_sh","sourceId":"github/awesome-copilot/ruby-mcp-server-generator","sourceUrl":"https://skills.sh/github/awesome-copilot/ruby-mcp-server-generator","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:15.673Z","lastSeenAt":"2026-05-07T22:40:19.100Z"}],"details":{"listingId":"541c63ca-3a6f-4ebd-9813-9bd92f72c5d8","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"ruby-mcp-server-generator","github":{"repo":"github/awesome-copilot","stars":33270,"topics":["agent-skills","agents","ai","awesome","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"license":"mit","html_url":"https://github.com/github/awesome-copilot","pushed_at":"2026-05-18T01:26:59Z","description":"Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.","skill_md_sha":"fdbb376f38e4f917abc520972abc4fa6f0aef212","skill_md_path":"skills/ruby-mcp-server-generator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/ruby-mcp-server-generator"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"ruby-mcp-server-generator","description":"Generate a complete Model Context Protocol server project in Ruby using the official MCP Ruby SDK gem."},"skills_sh_url":"https://skills.sh/github/awesome-copilot/ruby-mcp-server-generator"},"updatedAt":"2026-05-18T18:52:24.468Z"}}