{"openapi":"3.1.0","info":{"title":"RubyGems (BYOK) API","version":"0.1.0","description":"RubyGems (BYOK) lets an AI assistant read your own RubyGems data through the RubyGems API with a key you supply (RubyGems API key (rubygems_...) with index_rubygems scope). Read-only: 12 tools (list_my_gems, get_gem, search_gems, list_gem_versions, get_gem_version, list_gem_owners, list_owner_gems, list_reverse_dependencies, get_gem_downloads, get_profile, list_recent_versions, list_my_webhooks)....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-rubygems.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-rubygems/docs"},"termsOfService":"https://connectorbay.com/byok-rubygems/terms"},"servers":[{"url":"https://byok-rubygems.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-rubygems/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_my_gems":{"post":{"operationId":"list_my_gems","summary":"List the gems your RubyGems account owns, with latest version, total downloads, summary and project link. Use for \"Which","description":"List the gems your RubyGems account owns, with latest version, total downloads, summary and project link. Use for \"Which gems do I own on RubyGems.org\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_my_gemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_gem":{"post":{"operationId":"get_gem","summary":"Get a gem's latest version, total and version downloads, authors, summary, licenses, links and runtime and development d","description":"Get a gem's latest version, total and version downloads, authors, summary, licenses, links and runtime and development dependencies. Use for \"What is the latest version of the rails gem and what does it depend on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gem_name":{"description":"Gem name, for example 'rails'.","maxLength":100,"title":"Gem Name","type":"string"}},"required":["gem_name"],"title":"get_gemArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_gems":{"post":{"operationId":"search_gems","summary":"Search active gems by name or keyword; returns 30 gems per page with version, downloads and summary. Use for \"Find Ruby ","description":"Search active gems by name or keyword; returns 30 gems per page with version, downloads and summary. Use for \"Find Ruby gems for parsing HTML\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Search text, for example 'nokogiri' or 'html parser'.","maxLength":200,"title":"Query","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (30 results per page).","title":"Page"}},"required":["query"],"title":"search_gemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_gem_versions":{"post":{"operationId":"list_gem_versions","summary":"List every released version of a gem with platform, release date, download count, prerelease flag, license and required ","description":"List every released version of a gem with platform, release date, download count, prerelease flag, license and required Ruby version. Use for \"Which versions of the rack gem have been released and when\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gem_name":{"description":"Gem name, for example 'rails'.","maxLength":100,"title":"Gem Name","type":"string"}},"required":["gem_name"],"title":"list_gem_versionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_gem_version":{"post":{"operationId":"get_gem_version","summary":"Get details of one gem version (optionally for one platform): downloads, release date, authors, licenses, required Ruby ","description":"Get details of one gem version (optionally for one platform): downloads, release date, authors, licenses, required Ruby version and dependencies. Use for \"What are the dependencies of rails 8.1.3.1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gem_name":{"description":"Gem name, for example 'rails'.","maxLength":100,"title":"Gem Name","type":"string"},"version":{"description":"Version number, for example '8.1.3.1'.","maxLength":60,"title":"Version","type":"string"},"platform":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Platform of the gem, for example ruby, java or x86_64-linux; default is the ruby platform.","title":"Platform"}},"required":["gem_name","version"],"title":"get_gem_versionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_gem_owners":{"post":{"operationId":"list_gem_owners","summary":"List the owners and maintainers of a gem with their handle and role. Use for \"Who owns the rake gem\".","description":"List the owners and maintainers of a gem with their handle and role. Use for \"Who owns the rake gem\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gem_name":{"description":"Gem name, for example 'rails'.","maxLength":100,"title":"Gem Name","type":"string"}},"required":["gem_name"],"title":"list_gem_ownersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_owner_gems":{"post":{"operationId":"list_owner_gems","summary":"List all gems a RubyGems user can push to, by user handle or numeric id. Use for \"Which gems does the RubyGems user qrus","description":"List all gems a RubyGems user can push to, by user handle or numeric id. Use for \"Which gems does the RubyGems user qrush own\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"handle":{"description":"RubyGems user handle (or numeric user id), for example 'qrush'.","maxLength":100,"title":"Handle","type":"string"}},"required":["handle"],"title":"list_owner_gemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_reverse_dependencies":{"post":{"operationId":"list_reverse_dependencies","summary":"List names of gems whose latest version depends on a gem; only=runtime or only=development narrows by dependency type. U","description":"List names of gems whose latest version depends on a gem; only=runtime or only=development narrows by dependency type. Use for \"Which gems depend on shoulda\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gem_name":{"description":"Gem name, for example 'rails'.","maxLength":100,"title":"Gem Name","type":"string"},"only":{"anyOf":[{"enum":["runtime","development"],"type":"string"},{"type":"null"}],"default":null,"description":"Restrict to runtime or development dependencies; default is both.","title":"Only"}},"required":["gem_name"],"title":"list_reverse_dependenciesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_gem_downloads":{"post":{"operationId":"get_gem_downloads","summary":"Get the total downloads of a gem and the downloads of one specific version. Use for \"How many times has rails_admin 0.0.","description":"Get the total downloads of a gem and the downloads of one specific version. Use for \"How many times has rails_admin 0.0.0 been downloaded\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gem_name":{"description":"Gem name, for example 'rails'.","maxLength":100,"title":"Gem Name","type":"string"},"version":{"description":"Version number, for example '0.0.0'.","maxLength":60,"title":"Version","type":"string"}},"required":["gem_name","version"],"title":"get_gem_downloadsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_profile":{"post":{"operationId":"get_profile","summary":"Get a RubyGems user's profile by handle or id: id and handle (email only if the user made it public). Use for \"Who is Ru","description":"Get a RubyGems user's profile by handle or id: id and handle (email only if the user made it public). Use for \"Who is RubyGems user qrush\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user":{"description":"RubyGems user handle or numeric id, for example 'qrush'.","maxLength":100,"title":"User","type":"string"}},"required":["user"],"title":"get_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_recent_versions":{"post":{"operationId":"list_recent_versions","summary":"List gem versions released within a time window of at most 7 days, 30 per page, with downloads, authors and summary. Use","description":"List gem versions released within a time window of at most 7 days, 30 per page, with downloads, authors and summary. Use for \"Which gem versions were released in the last day\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_time":{"description":"Start of the window, ISO 8601, for example 2026-10-15T00:00:00Z.","maxLength":40,"title":"From Time","type":"string"},"to_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the window, ISO 8601; the window may not exceed 7 days. Default is now.","title":"To Time"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (30 results per page).","title":"Page"}},"required":["from_time"],"title":"list_recent_versionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_my_webhooks":{"post":{"operationId":"list_my_webhooks","summary":"List the webhooks registered under your RubyGems account, grouped by gem name, with URL and failure count. Use for \"Whic","description":"List the webhooks registered under your RubyGems account, grouped by gem name, with URL and failure count. Use for \"Which RubyGems webhooks have I registered\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_my_webhooksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}