jService · Capability

jService Trivia API — Clues

Clues — Jeopardy! questions, answers, and metadata. 3 operations. Lead operation: Get Random Clues. Self-contained Naftiko capability covering one jService business surface (trivia clue retrieval over the open-source jService Rails API).

Run with Naftiko JserviceTriviaClues

What You Can Do

GET
Getrandomclues — Get N random clues.
/v1/random-clues
GET
Getfinalclues — Get N random Final Jeopardy clues.
/v1/final-clues
GET
Listclues — List clues with filters.
/v1/clues

MCP Tools

get-random-clues

Get N random Jeopardy! clues with their categories.

read-only idempotent
get-final-clues

Get N random Final Jeopardy clues.

read-only idempotent
list-clues

List clues filtered by value, category, airdate window, and game ID.

read-only idempotent

Capability Spec

jservice-clues.yaml Raw ↑
naftiko: "1.0.0-alpha2"

info:
  label: "jService Trivia API — Clues"
  description: >-
    Clues — Jeopardy! questions, answers, and metadata. 3 operations. Lead operation:
    Get Random Clues. Self-contained Naftiko capability covering one jService business
    surface (trivia clue retrieval over the open-source jService Rails API).
  tags:
    - Jservice
    - Trivia
    - Clues
  created: "2026-05-30"
  modified: "2026-05-30"

binds:
  - namespace: env
    keys:
      JSERVICE_BASE_URL: JSERVICE_BASE_URL

capability:

  consumes:
    - type: http
      namespace: "jservice-clues"
      baseUri: "{{env.JSERVICE_BASE_URL}}"
      description: "jService Trivia API — Clues business capability. Self-contained, no shared references. Default baseUri is http://localhost:3000 for self-hosted instances; the historical http://jservice.io endpoint is offline."
      resources:
        - name: "random"
          path: "/api/random"
          operations:
            - name: "getRandomClues"
              method: GET
              description: "Get N random clues (default 1, max 100), including parent category."
              inputParameters:
                - name: "count"
                  in: query
                  type: integer
                  required: false
                  description: "Number of clues to return (1-100)."
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: "$."
        - name: "final"
          path: "/api/final"
          operations:
            - name: "getFinalClues"
              method: GET
              description: "Get N random Final Jeopardy clues (clues with no value)."
              inputParameters:
                - name: "count"
                  in: query
                  type: integer
                  required: false
                  description: "Number of clues to return (1-100)."
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: "$."
        - name: "clues"
          path: "/api/clues"
          operations:
            - name: "listClues"
              method: GET
              description: "List clues with filters: value, category, min_date, max_date, game_id, offset."
              inputParameters:
                - name: "value"
                  in: query
                  type: integer
                  required: false
                  description: "Dollar value of the clue."
                - name: "category"
                  in: query
                  type: integer
                  required: false
                  description: "Category ID."
                - name: "min_date"
                  in: query
                  type: string
                  required: false
                  description: "Earliest airdate."
                - name: "max_date"
                  in: query
                  type: string
                  required: false
                  description: "Latest airdate."
                - name: "game_id"
                  in: query
                  type: integer
                  required: false
                  description: "Jeopardy! game ID."
                - name: "offset"
                  in: query
                  type: integer
                  required: false
                  description: "Pagination offset."
              outputRawFormat: json
              outputParameters:
                - name: result
                  type: object
                  value: "$."

  exposes:
    - type: rest
      namespace: "jservice-clues-rest"
      port: 8080
      description: "REST adapter for jService — Clues. One Spectral-compliant resource per consumed operation, prefixed with /v1."
      resources:
        - path: "/v1/random-clues"
          name: "random-clues"
          description: "REST surface for random clue retrieval."
          operations:
            - method: GET
              name: "getRandomClues"
              description: "Get N random clues."
              call: "jservice-clues.getRandomClues"
              with:
                "count": "rest.count"
              outputParameters:
                - type: object
                  mapping: "$."
        - path: "/v1/final-clues"
          name: "final-clues"
          description: "REST surface for Final Jeopardy clue retrieval."
          operations:
            - method: GET
              name: "getFinalClues"
              description: "Get N random Final Jeopardy clues."
              call: "jservice-clues.getFinalClues"
              with:
                "count": "rest.count"
              outputParameters:
                - type: object
                  mapping: "$."
        - path: "/v1/clues"
          name: "clues"
          description: "REST surface for filtered clue listing."
          operations:
            - method: GET
              name: "listClues"
              description: "List clues with filters."
              call: "jservice-clues.listClues"
              with:
                "value": "rest.value"
                "category": "rest.category"
                "min_date": "rest.min_date"
                "max_date": "rest.max_date"
                "game_id": "rest.game_id"
                "offset": "rest.offset"
              outputParameters:
                - type: object
                  mapping: "$."

    - type: mcp
      namespace: "jservice-clues-mcp"
      port: 9090
      transport: http
      description: "MCP adapter for jService — Clues. One tool per consumed operation, routed inline through this capability's consumes block."
      tools:
        - name: "get-random-clues"
          description: "Get N random Jeopardy! clues with their categories."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "jservice-clues.getRandomClues"
          with:
            "count": "tools.count"
          outputParameters:
            - type: object
              mapping: "$."
        - name: "get-final-clues"
          description: "Get N random Final Jeopardy clues."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "jservice-clues.getFinalClues"
          with:
            "count": "tools.count"
          outputParameters:
            - type: object
              mapping: "$."
        - name: "list-clues"
          description: "List clues filtered by value, category, airdate window, and game ID."
          hints:
            readOnly: true
            destructive: false
            idempotent: true
          call: "jservice-clues.listClues"
          with:
            "value": "tools.value"
            "category": "tools.category"
            "min_date": "tools.min_date"
            "max_date": "tools.max_date"
            "game_id": "tools.game_id"
            "offset": "tools.offset"
          outputParameters:
            - type: object
              mapping: "$."