NYPL What's On The Menu API

The New York Public Library's What's On The Menu API provides programmatic access to over 17,000 historical restaurant menus from the New York City area dating back to the 1850s. Explore menus, pages, and dishes including prices, names, dates, and full-text search across the dataset.

Run with Naftiko NewYorkPublicLibraryWhatsOn

What You Can Do

GET
Get menus — List menus
/menus
GET
Get menus id — Get menu
/menus/{id}
GET
Get menus id pages — Get menu pages
/menus/{id}/pages
GET
Get menus id dishes — Get menu dishes
/menus/{id}/dishes
GET
Get menus search — Search menus
/menus/search
GET
Get dishes — List dishes
/dishes
GET
Get dishes id — Get dish
/dishes/{id}
GET
Get dishes id menus — Get menus for a dish
/dishes/{id}/menus
GET
Get dishes search — Search dishes
/dishes/search

MCP Tools

get-menus

List menus

read-only idempotent
get-menus-id

Get menu

read-only idempotent
get-menus-id-pages

Get menu pages

read-only idempotent
get-menus-id-dishes

Get menu dishes

read-only idempotent
get-menus-search

Search menus

read-only idempotent
get-dishes

List dishes

read-only idempotent
get-dishes-id

Get dish

read-only idempotent
get-dishes-id-menus

Get menus for a dish

read-only idempotent
get-dishes-search

Search dishes

read-only idempotent

Capability Spec

new-york-public-library-whats-on-the-menu-capability.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: NYPL What's On The Menu API
  description: The New York Public Library's What's On The Menu API provides programmatic access to over 17,000 historical
    restaurant menus from the New York City area dating back to the 1850s. Explore menus, pages, and dishes including prices,
    names, dates, and full-text search across the dataset.
  tags:
  - New
  - York
  - Public
  - Library
  - Whats
  - 'On'
  created: '2026-05-06'
  modified: '2026-05-06'
capability:
  consumes:
  - type: http
    namespace: new-york-public-library-whats-on-the-menu
    baseUri: http://api.menus.nypl.org
    description: NYPL What's On The Menu API HTTP API.
    authentication:
      type: apikey
      in: query
      name: token
      value: '{{NEW_YORK_PUBLIC_LIBRARY_WHATS_ON_THE_MENU_TOKEN}}'
    resources:
    - name: menus
      path: /menus
      operations:
      - name: get-menus
        method: GET
        description: List menus
        inputParameters:
        - name: min_year
          in: query
          type: integer
        - name: max_year
          in: query
          type: integer
        - name: sort_by
          in: query
          type: string
        - name: status
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: menus-id
      path: /menus/{id}
      operations:
      - name: get-menus-id
        method: GET
        description: Get menu
        inputParameters:
        - name: id
          in: path
          type: integer
          required: true
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: menus-id-pages
      path: /menus/{id}/pages
      operations:
      - name: get-menus-id-pages
        method: GET
        description: Get menu pages
        inputParameters:
        - name: id
          in: path
          type: integer
          required: true
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: menus-id-dishes
      path: /menus/{id}/dishes
      operations:
      - name: get-menus-id-dishes
        method: GET
        description: Get menu dishes
        inputParameters:
        - name: id
          in: path
          type: integer
          required: true
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: menus-search
      path: /menus/search
      operations:
      - name: get-menus-search
        method: GET
        description: Search menus
        inputParameters:
        - name: query
          in: query
          type: string
          required: true
        - name: sort_by
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: dishes
      path: /dishes
      operations:
      - name: get-dishes
        method: GET
        description: List dishes
        inputParameters:
        - name: min_year
          in: query
          type: integer
        - name: max_year
          in: query
          type: integer
        - name: sort_by
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: dishes-id
      path: /dishes/{id}
      operations:
      - name: get-dishes-id
        method: GET
        description: Get dish
        inputParameters:
        - name: id
          in: path
          type: integer
          required: true
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: dishes-id-menus
      path: /dishes/{id}/menus
      operations:
      - name: get-dishes-id-menus
        method: GET
        description: Get menus for a dish
        inputParameters:
        - name: id
          in: path
          type: integer
          required: true
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: dishes-search
      path: /dishes/search
      operations:
      - name: get-dishes-search
        method: GET
        description: Search dishes
        inputParameters:
        - name: query
          in: query
          type: string
          required: true
        - name: sort_by
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
  exposes:
  - type: rest
    port: 8080
    namespace: new-york-public-library-whats-on-the-menu-rest
    description: REST adapter for NYPL What's On The Menu API.
    resources:
    - path: /menus
      name: get-menus
      operations:
      - method: GET
        name: get-menus
        description: List menus
        call: new-york-public-library-whats-on-the-menu.get-menus
        outputParameters:
        - type: object
          mapping: $.
    - path: /menus/{id}
      name: get-menus-id
      operations:
      - method: GET
        name: get-menus-id
        description: Get menu
        call: new-york-public-library-whats-on-the-menu.get-menus-id
        with:
          id: rest.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /menus/{id}/pages
      name: get-menus-id-pages
      operations:
      - method: GET
        name: get-menus-id-pages
        description: Get menu pages
        call: new-york-public-library-whats-on-the-menu.get-menus-id-pages
        with:
          id: rest.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /menus/{id}/dishes
      name: get-menus-id-dishes
      operations:
      - method: GET
        name: get-menus-id-dishes
        description: Get menu dishes
        call: new-york-public-library-whats-on-the-menu.get-menus-id-dishes
        with:
          id: rest.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /menus/search
      name: get-menus-search
      operations:
      - method: GET
        name: get-menus-search
        description: Search menus
        call: new-york-public-library-whats-on-the-menu.get-menus-search
        outputParameters:
        - type: object
          mapping: $.
    - path: /dishes
      name: get-dishes
      operations:
      - method: GET
        name: get-dishes
        description: List dishes
        call: new-york-public-library-whats-on-the-menu.get-dishes
        outputParameters:
        - type: object
          mapping: $.
    - path: /dishes/{id}
      name: get-dishes-id
      operations:
      - method: GET
        name: get-dishes-id
        description: Get dish
        call: new-york-public-library-whats-on-the-menu.get-dishes-id
        with:
          id: rest.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /dishes/{id}/menus
      name: get-dishes-id-menus
      operations:
      - method: GET
        name: get-dishes-id-menus
        description: Get menus for a dish
        call: new-york-public-library-whats-on-the-menu.get-dishes-id-menus
        with:
          id: rest.id
        outputParameters:
        - type: object
          mapping: $.
    - path: /dishes/search
      name: get-dishes-search
      operations:
      - method: GET
        name: get-dishes-search
        description: Search dishes
        call: new-york-public-library-whats-on-the-menu.get-dishes-search
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    port: 9090
    namespace: new-york-public-library-whats-on-the-menu-mcp
    transport: http
    description: MCP adapter for NYPL What's On The Menu API for AI agent use.
    tools:
    - name: get-menus
      description: List menus
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-menus
      with:
        min_year: tools.min_year
        max_year: tools.max_year
        sort_by: tools.sort_by
        status: tools.status
      inputParameters:
      - name: min_year
        type: integer
        description: min_year
      - name: max_year
        type: integer
        description: max_year
      - name: sort_by
        type: string
        description: sort_by
      - name: status
        type: string
        description: status
      outputParameters:
      - type: object
        mapping: $.
    - name: get-menus-id
      description: Get menu
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-menus-id
      with:
        id: tools.id
      inputParameters:
      - name: id
        type: integer
        description: id
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: get-menus-id-pages
      description: Get menu pages
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-menus-id-pages
      with:
        id: tools.id
      inputParameters:
      - name: id
        type: integer
        description: id
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: get-menus-id-dishes
      description: Get menu dishes
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-menus-id-dishes
      with:
        id: tools.id
      inputParameters:
      - name: id
        type: integer
        description: id
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: get-menus-search
      description: Search menus
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-menus-search
      with:
        query: tools.query
        sort_by: tools.sort_by
      inputParameters:
      - name: query
        type: string
        description: query
        required: true
      - name: sort_by
        type: string
        description: sort_by
      outputParameters:
      - type: object
        mapping: $.
    - name: get-dishes
      description: List dishes
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-dishes
      with:
        min_year: tools.min_year
        max_year: tools.max_year
        sort_by: tools.sort_by
      inputParameters:
      - name: min_year
        type: integer
        description: min_year
      - name: max_year
        type: integer
        description: max_year
      - name: sort_by
        type: string
        description: sort_by
      outputParameters:
      - type: object
        mapping: $.
    - name: get-dishes-id
      description: Get dish
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-dishes-id
      with:
        id: tools.id
      inputParameters:
      - name: id
        type: integer
        description: id
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: get-dishes-id-menus
      description: Get menus for a dish
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-dishes-id-menus
      with:
        id: tools.id
      inputParameters:
      - name: id
        type: integer
        description: id
        required: true
      outputParameters:
      - type: object
        mapping: $.
    - name: get-dishes-search
      description: Search dishes
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: new-york-public-library-whats-on-the-menu.get-dishes-search
      with:
        query: tools.query
        sort_by: tools.sort_by
      inputParameters:
      - name: query
        type: string
        description: query
        required: true
      - name: sort_by
        type: string
        description: sort_by
      outputParameters:
      - type: object
        mapping: $.
binds:
- namespace: env
  keys:
    NEW_YORK_PUBLIC_LIBRARY_WHATS_ON_THE_MENU_TOKEN: NEW_YORK_PUBLIC_LIBRARY_WHATS_ON_THE_MENU_TOKEN