Lichess · Capability

Lichess API — Puzzles

Lichess API — Puzzles. 11 operations. Lead operation: Get the daily puzzle. Self-contained Naftiko capability covering one Lichess business surface.

Lichess API — Puzzles is a Naftiko capability published by Lichess, one of 23 capabilities the APIs.io network indexes for this provider. It bundles 11 operations across the GET and POST methods rooted at /v1/api.

The capability includes 9 read-only operations and 2 state-changing operations. Lead operation: Get the daily puzzle. Can be deployed as a REST endpoint, MCP tool, or Agent Skill via Naftiko.

Tagged areas include Lichess and Puzzles.

Run with Naftiko LichessPuzzles

What You Can Do

GET
Apipuzzledaily — Get the daily puzzle
/v1/api/puzzle/daily
GET
Apipuzzleid — Get a puzzle by its ID
/v1/api/puzzle/{id}
GET
Apipuzzlenext — Get a new puzzle
/v1/api/puzzle/next
GET
Apipuzzlebatchselect — Get multiple puzzles at once
/v1/api/puzzle/batch/{angle}
POST
Apipuzzlebatchsolve — Solve multiple puzzles at once
/v1/api/puzzle/batch/{angle}
GET
Apipuzzleactivity — Get your puzzle activity
/v1/api/puzzle/activity
GET
Apipuzzlereplay — Get puzzles to replay
/v1/api/puzzle/replay/{days}/{theme}
GET
Apipuzzledashboard — Get your puzzle dashboard
/v1/api/puzzle/dashboard/{days}
GET
Apistormdashboard — Get the storm dashboard of a player
/v1/api/storm/dashboard/{username}
POST
Racerpost — Create and join a puzzle race
/v1/api/racer
GET
Racerget — Get puzzle race results
/v1/api/racer/{id}

MCP Tools

lichess-apipuzzledaily

Get the daily puzzle

read-only
lichess-apipuzzleid

Get a puzzle by its ID

read-only
lichess-apipuzzlenext

Get a new puzzle

read-only
lichess-apipuzzlebatchselect

Get multiple puzzles at once

read-only
lichess-apipuzzlebatchsolve

Solve multiple puzzles at once

lichess-apipuzzleactivity

Get your puzzle activity

read-only
lichess-apipuzzlereplay

Get puzzles to replay

read-only
lichess-apipuzzledashboard

Get your puzzle dashboard

read-only
lichess-apistormdashboard

Get the storm dashboard of a player

read-only
lichess-racerpost

Create and join a puzzle race

lichess-racerget

Get puzzle race results

read-only

Capability Spec

puzzles.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Lichess API — Puzzles
  description: 'Lichess API — Puzzles. 11 operations. Lead operation: Get the daily puzzle. Self-contained Naftiko capability covering one Lichess business surface.'
  tags:
  - Lichess
  - Puzzles
  created: '2026-05-25'
  modified: '2026-05-25'
binds:
- namespace: env
  keys:
    LICHESS_API_TOKEN: LICHESS_API_TOKEN
capability:
  consumes:
  - type: http
    namespace: puzzles
    baseUri: https://lichess.org
    description: Lichess Puzzles business capability. Self-contained, no shared references.
    resources:
    - name: puzzle-daily
      path: /api/puzzle/daily
      operations:
      - name: apipuzzledaily
        method: GET
        description: 'Get the daily puzzle'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: puzzle-id
      path: /api/puzzle/{id}
      operations:
      - name: apipuzzleid
        method: GET
        description: 'Get a puzzle by its ID'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          required: true
    - name: puzzle-next
      path: /api/puzzle/next
      operations:
      - name: apipuzzlenext
        method: GET
        description: 'Get a new puzzle'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: angle
          in: query
          type: string
          required: false
        - name: difficulty
          in: query
          type: string
          required: false
        - name: color
          in: query
          type: string
          required: false
    - name: puzzle-batch-angle
      path: /api/puzzle/batch/{angle}
      operations:
      - name: apipuzzlebatchselect
        method: GET
        description: 'Get multiple puzzles at once'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: angle
          in: path
          type: string
          required: true
        - name: difficulty
          in: query
          type: string
          required: false
        - name: nb
          in: query
          type: string
          required: false
        - name: color
          in: query
          type: string
          required: false
      - name: apipuzzlebatchsolve
        method: POST
        description: 'Solve multiple puzzles at once'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: angle
          in: path
          type: string
          required: true
        - name: nb
          in: query
          type: string
          required: false
        - name: body
          in: body
          type: object
          required: false
    - name: puzzle-activity
      path: /api/puzzle/activity
      operations:
      - name: apipuzzleactivity
        method: GET
        description: 'Get your puzzle activity'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: max
          in: query
          type: string
          required: false
        - name: before
          in: query
          type: string
          required: false
        - name: since
          in: query
          type: string
          required: false
    - name: puzzle-replay-days-theme
      path: /api/puzzle/replay/{days}/{theme}
      operations:
      - name: apipuzzlereplay
        method: GET
        description: 'Get puzzles to replay'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: days
          in: path
          type: string
          required: true
        - name: theme
          in: path
          type: string
          required: true
    - name: puzzle-dashboard-days
      path: /api/puzzle/dashboard/{days}
      operations:
      - name: apipuzzledashboard
        method: GET
        description: 'Get your puzzle dashboard'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: days
          in: path
          type: string
          required: true
    - name: storm-dashboard-username
      path: /api/storm/dashboard/{username}
      operations:
      - name: apistormdashboard
        method: GET
        description: 'Get the storm dashboard of a player'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: username
          in: path
          type: string
          required: true
        - name: days
          in: query
          type: string
          required: false
    - name: racer
      path: /api/racer
      operations:
      - name: racerpost
        method: POST
        description: 'Create and join a puzzle race'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: racer-id
      path: /api/racer/{id}
      operations:
      - name: racerget
        method: GET
        description: 'Get puzzle race results'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: id
          in: path
          type: string
          required: true
    authentication:
      type: bearer
      value: '{{env.LICHESS_API_TOKEN}}'
      placement: header
  exposes:
  - type: rest
    namespace: puzzles-rest
    port: 8080
    description: REST adapter for Lichess Puzzles. One Spectral-compliant resource per consumed operation.
    resources:
    - path: /v1/api/puzzle/daily
      name: puzzle-daily
      description: REST surface for puzzle-daily.
      operations:
      - method: GET
        name: apipuzzledaily
        description: 'Get the daily puzzle'
        call: puzzles.apipuzzledaily
        with:
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/puzzle/{id}
      name: puzzle-id
      description: REST surface for puzzle-id.
      operations:
      - method: GET
        name: apipuzzleid
        description: 'Get a puzzle by its ID'
        call: puzzles.apipuzzleid
        with:
          id: rest.path.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/puzzle/next
      name: puzzle-next
      description: REST surface for puzzle-next.
      operations:
      - method: GET
        name: apipuzzlenext
        description: 'Get a new puzzle'
        call: puzzles.apipuzzlenext
        with:
          angle: rest.query.angle
          difficulty: rest.query.difficulty
          color: rest.query.color
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/puzzle/batch/{angle}
      name: puzzle-batch-angle
      description: REST surface for puzzle-batch-angle.
      operations:
      - method: GET
        name: apipuzzlebatchselect
        description: 'Get multiple puzzles at once'
        call: puzzles.apipuzzlebatchselect
        with:
          angle: rest.path.angle
          difficulty: rest.query.difficulty
          nb: rest.query.nb
          color: rest.query.color
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: apipuzzlebatchsolve
        description: 'Solve multiple puzzles at once'
        call: puzzles.apipuzzlebatchsolve
        with:
          angle: rest.path.angle
          nb: rest.query.nb
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/puzzle/activity
      name: puzzle-activity
      description: REST surface for puzzle-activity.
      operations:
      - method: GET
        name: apipuzzleactivity
        description: 'Get your puzzle activity'
        call: puzzles.apipuzzleactivity
        with:
          max: rest.query.max
          before: rest.query.before
          since: rest.query.since
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/puzzle/replay/{days}/{theme}
      name: puzzle-replay-days-theme
      description: REST surface for puzzle-replay-days-theme.
      operations:
      - method: GET
        name: apipuzzlereplay
        description: 'Get puzzles to replay'
        call: puzzles.apipuzzlereplay
        with:
          days: rest.path.days
          theme: rest.path.theme
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/puzzle/dashboard/{days}
      name: puzzle-dashboard-days
      description: REST surface for puzzle-dashboard-days.
      operations:
      - method: GET
        name: apipuzzledashboard
        description: 'Get your puzzle dashboard'
        call: puzzles.apipuzzledashboard
        with:
          days: rest.path.days
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/storm/dashboard/{username}
      name: storm-dashboard-username
      description: REST surface for storm-dashboard-username.
      operations:
      - method: GET
        name: apistormdashboard
        description: 'Get the storm dashboard of a player'
        call: puzzles.apistormdashboard
        with:
          username: rest.path.username
          days: rest.query.days
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/racer
      name: racer
      description: REST surface for racer.
      operations:
      - method: POST
        name: racerpost
        description: 'Create and join a puzzle race'
        call: puzzles.racerpost
        with:
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/api/racer/{id}
      name: racer-id
      description: REST surface for racer-id.
      operations:
      - method: GET
        name: racerget
        description: 'Get puzzle race results'
        call: puzzles.racerget
        with:
          id: rest.path.id
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: puzzles-mcp
    port: 9090
    transport: http
    description: MCP adapter for Lichess Puzzles. One tool per consumed operation.
    tools:
    - name: lichess-apipuzzledaily
      description: 'Get the daily puzzle'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzledaily
      with:
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzleid
      description: 'Get a puzzle by its ID'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzleid
      with:
        id: tools.id
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzlenext
      description: 'Get a new puzzle'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzlenext
      with:
        angle: tools.angle
        difficulty: tools.difficulty
        color: tools.color
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzlebatchselect
      description: 'Get multiple puzzles at once'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzlebatchselect
      with:
        angle: tools.angle
        difficulty: tools.difficulty
        nb: tools.nb
        color: tools.color
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzlebatchsolve
      description: 'Solve multiple puzzles at once'
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: puzzles.apipuzzlebatchsolve
      with:
        angle: tools.angle
        nb: tools.nb
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzleactivity
      description: 'Get your puzzle activity'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzleactivity
      with:
        max: tools.max
        before: tools.before
        since: tools.since
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzlereplay
      description: 'Get puzzles to replay'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzlereplay
      with:
        days: tools.days
        theme: tools.theme
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apipuzzledashboard
      description: 'Get your puzzle dashboard'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apipuzzledashboard
      with:
        days: tools.days
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-apistormdashboard
      description: 'Get the storm dashboard of a player'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.apistormdashboard
      with:
        username: tools.username
        days: tools.days
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-racerpost
      description: 'Create and join a puzzle race'
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: puzzles.racerpost
      with:
      outputParameters:
      - type: object
        mapping: $.
    - name: lichess-racerget
      description: 'Get puzzle race results'
      hints:
        readOnly: true
        destructive: false
        idempotent: false
      call: puzzles.racerget
      with:
        id: tools.id
      outputParameters:
      - type: object
        mapping: $.