naftiko: "1.0.0-alpha2" info: label: "RubyGems.org Registry API — Gems" description: >- Gems surface — Gems. 5 operations. Lead operation: Get Gem Info. Self-contained Naftiko capability covering one RubyGems business surface. tags: - RubyGems - Registry - Gems created: "2026-05-23" modified: "2026-05-23" binds: - namespace: env keys: RUBYGEMS_API_KEY: RUBYGEMS_API_KEY capability: consumes: - type: http namespace: "rubygems-registry-gems" baseUri: "https://rubygems.org" description: "RubyGems.org Registry — Gems surface. Self-contained, no shared references." authentication: type: apikey key: Authorization value: "{{env.RUBYGEMS_API_KEY}}" placement: header resources: - name: "gem-detail" path: "/api/v1/gems/{gem_name}.json" operations: - name: "getGem" method: GET description: "Get Gem Info." inputParameters: - name: "gem_name" in: path type: string required: true description: "Canonical gem name." outputRawFormat: json outputParameters: - name: result type: object value: "$." - name: "owned-gems" path: "/api/v1/gems.json" operations: - name: "listOwnedGems" method: GET description: "List gems owned by the authenticated user." inputParameters: [] outputRawFormat: json outputParameters: - name: result type: object value: "$." - name: "pushGem" method: POST description: "Push a built .gem file for publication." inputParameters: - name: "body" in: body type: object required: true description: "Binary .gem file payload." outputRawFormat: json outputParameters: - name: result type: object value: "$." - name: "yank" path: "/api/v1/gems/yank" operations: - name: "yankVersion" method: DELETE description: "Yank a specific gem version from the index." inputParameters: - name: "gem_name" in: query type: string required: true description: "Gem name." - name: "version" in: query type: string required: true description: "Version to yank." - name: "platform" in: query type: string required: false description: "Optional platform identifier." outputRawFormat: json outputParameters: - name: result type: object value: "$." - name: "search" path: "/api/v1/search.json" operations: - name: "searchGems" method: GET description: "Search gems by name or description." inputParameters: - name: "query" in: query type: string required: true description: "Search query string." - name: "page" in: query type: integer required: false description: "Page number, 1-indexed." outputRawFormat: json outputParameters: - name: result type: object value: "$." exposes: - type: rest namespace: "rubygems-registry-gems-rest" port: 8080 description: "REST adapter for RubyGems.org Registry — Gems." resources: - path: "/v1/gems/{gem-name}" name: "gem-detail" description: "REST surface for gem detail." operations: - method: GET name: "getGem" description: "Get Gem Info." call: "rubygems-registry-gems.getGem" with: gem_name: "rest.gem_name" outputParameters: - type: object mapping: "$." - path: "/v1/gems" name: "owned-gems" description: "REST surface for the authenticated user's gems collection." operations: - method: GET name: "listOwnedGems" description: "List gems owned by the authenticated user." call: "rubygems-registry-gems.listOwnedGems" with: {} outputParameters: - type: object mapping: "$." - method: POST name: "pushGem" description: "Push a built .gem file for publication." call: "rubygems-registry-gems.pushGem" with: body: "rest.body" outputParameters: - type: object mapping: "$." - path: "/v1/gems/yank" name: "yank" description: "REST surface for yanking a gem version." operations: - method: DELETE name: "yankVersion" description: "Yank a specific gem version from the index." call: "rubygems-registry-gems.yankVersion" with: gem_name: "rest.gem_name" version: "rest.version" platform: "rest.platform" outputParameters: - type: object mapping: "$." - path: "/v1/search" name: "search" description: "REST surface for gem search." operations: - method: GET name: "searchGems" description: "Search gems by name or description." call: "rubygems-registry-gems.searchGems" with: query: "rest.query" page: "rest.page" outputParameters: - type: object mapping: "$." - type: mcp namespace: "rubygems-registry-gems-mcp" port: 9090 transport: http description: "MCP adapter for RubyGems.org Registry — Gems." tools: - name: "get-gem" description: "Get Gem Info." hints: readOnly: true destructive: false idempotent: true call: "rubygems-registry-gems.getGem" with: gem_name: "tools.gem_name" outputParameters: - type: object mapping: "$." - name: "list-owned-gems" description: "List gems owned by the authenticated user." hints: readOnly: true destructive: false idempotent: true call: "rubygems-registry-gems.listOwnedGems" with: {} outputParameters: - type: object mapping: "$." - name: "push-gem" description: "Push a built .gem file for publication." hints: readOnly: false destructive: false idempotent: false call: "rubygems-registry-gems.pushGem" with: body: "tools.body" outputParameters: - type: object mapping: "$." - name: "yank-version" description: "Yank a specific gem version from the index." hints: readOnly: false destructive: true idempotent: true call: "rubygems-registry-gems.yankVersion" with: gem_name: "tools.gem_name" version: "tools.version" platform: "tools.platform" outputParameters: - type: object mapping: "$." - name: "search-gems" description: "Search gems by name or description." hints: readOnly: true destructive: false idempotent: true call: "rubygems-registry-gems.searchGems" with: query: "tools.query" page: "tools.page" outputParameters: - type: object mapping: "$."