Science Museum Group · Capability

Science Museum Group Collection API — Search

Science Museum Group Collection API — Search. 4 operations. Lead operation: Search All Collection Types. Self-contained Naftiko capability covering one Science Museum Group business surface.

Run with Naftiko Science Museum GroupSearch

What You Can Do

GET
Searchall — Search All Collection Types
/v1/search
GET
Searchdocuments — Search Collection Documents
/v1/search/documents
GET
Searchobjects — Search Collection Objects
/v1/search/objects
GET
Searchpeople — Search Collection People
/v1/search/people

MCP Tools

search-all-collection-types

Search All Collection Types

read-only idempotent
search-collection-documents

Search Collection Documents

read-only idempotent
search-collection-objects

Search Collection Objects

read-only idempotent
search-collection-people

Search Collection People

read-only idempotent

Capability Spec

collection-search.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Science Museum Group Collection API — Search
  description: 'Science Museum Group Collection API — Search. 4 operations. Lead operation: Search All Collection Types. Self-contained
    Naftiko capability covering one Science Museum Group business surface.'
  tags:
  - Science Museum Group
  - Search
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    SCIENCE_MUSEUM_GROUP_API_KEY: SCIENCE_MUSEUM_GROUP_API_KEY
capability:
  consumes:
  - type: http
    namespace: collection-search
    baseUri: https://collection.sciencemuseumgroup.org.uk
    description: Science Museum Group Collection API — Search business capability. Self-contained, no shared references.
    resources:
    - name: search
      path: /search
      operations:
      - name: searchall
        method: GET
        description: Search All Collection Types
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: q
          in: query
          type: string
          description: Full-text search query term
        - name: random
          in: query
          type: integer
          description: Return N random records from the collection
        - name: page[number]
          in: query
          type: integer
          description: Zero-indexed page number for pagination
        - name: page[size]
          in: query
          type: integer
          description: Number of results per page (max 100)
        - name: date[from]
          in: query
          type: string
          description: Filter results from this date (year, year-month, or full date)
        - name: date[to]
          in: query
          type: string
          description: Filter results up to this date (year, year-month, or full date)
        - name: places
          in: query
          type: string
          description: Filter by geographical association
        - name: images
          in: query
          type: boolean
          description: Filter to only items with available images
    - name: search-documents
      path: /search/documents
      operations:
      - name: searchdocuments
        method: GET
        description: Search Collection Documents
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: q
          in: query
          type: string
          description: Full-text search query term
        - name: makers
          in: query
          type: string
          description: Filter by document creator or maker
        - name: people
          in: query
          type: string
          description: Filter by associated person
        - name: archive
          in: query
          type: string
          description: Filter by archive reference
        - name: places
          in: query
          type: string
          description: Filter by geographical association
        - name: date[from]
          in: query
          type: string
          description: Filter from date
        - name: date[to]
          in: query
          type: string
          description: Filter to date
        - name: images
          in: query
          type: boolean
          description: Filter to documents with available images
        - name: page[number]
          in: query
          type: integer
          description: Zero-indexed page number
        - name: page[size]
          in: query
          type: integer
          description: Results per page (max 100)
    - name: search-objects
      path: /search/objects
      operations:
      - name: searchobjects
        method: GET
        description: Search Collection Objects
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: q
          in: query
          type: string
          description: Full-text search query term
        - name: type
          in: query
          type: string
          description: Filter by object type
        - name: makers
          in: query
          type: string
          description: Filter by maker or manufacturer name
        - name: people
          in: query
          type: string
          description: Filter by associated person
        - name: categories
          in: query
          type: string
          description: Filter by collection category
        - name: museum
          in: query
          type: string
          description: Filter by museum code (NRM, SMG, NMeM, MSI)
        - name: on_display
          in: query
          type: boolean
          description: Filter to objects currently on display
        - name: location
          in: query
          type: string
          description: Filter by gallery or storage location
        - name: images
          in: query
          type: boolean
          description: Filter to objects with available images
        - name: places
          in: query
          type: string
          description: Filter by geographical association
        - name: date[from]
          in: query
          type: string
          description: Filter from date
        - name: date[to]
          in: query
          type: string
          description: Filter to date
        - name: page[number]
          in: query
          type: integer
          description: Zero-indexed page number
        - name: page[size]
          in: query
          type: integer
          description: Results per page (max 100)
    - name: search-people
      path: /search/people
      operations:
      - name: searchpeople
        method: GET
        description: Search Collection People
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: q
          in: query
          type: string
          description: Full-text search query term
        - name: birth[place]
          in: query
          type: string
          description: Filter by birth place
        - name: birth[date]
          in: query
          type: string
          description: Filter by birth date (year or year-month)
        - name: death[date]
          in: query
          type: string
          description: Filter by death date (year or year-month)
        - name: occupation
          in: query
          type: string
          description: Filter by occupation or profession
        - name: places
          in: query
          type: string
          description: Filter by geographical association
        - name: images
          in: query
          type: boolean
          description: Filter to people with available images
        - name: page[number]
          in: query
          type: integer
          description: Zero-indexed page number
        - name: page[size]
          in: query
          type: integer
          description: Results per page (max 100)
  exposes:
  - type: rest
    namespace: collection-search-rest
    port: 8080
    description: REST adapter for Science Museum Group Collection API — Search. One Spectral-compliant resource per consumed
      operation, prefixed with /v1.
    resources:
    - path: /v1/search
      name: search
      description: REST surface for search.
      operations:
      - method: GET
        name: searchall
        description: Search All Collection Types
        call: collection-search.searchall
        with:
          q: rest.q
          random: rest.random
          page[number]: rest.page[number]
          page[size]: rest.page[size]
          date[from]: rest.date[from]
          date[to]: rest.date[to]
          places: rest.places
          images: rest.images
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/search/documents
      name: search-documents
      description: REST surface for search-documents.
      operations:
      - method: GET
        name: searchdocuments
        description: Search Collection Documents
        call: collection-search.searchdocuments
        with:
          q: rest.q
          makers: rest.makers
          people: rest.people
          archive: rest.archive
          places: rest.places
          date[from]: rest.date[from]
          date[to]: rest.date[to]
          images: rest.images
          page[number]: rest.page[number]
          page[size]: rest.page[size]
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/search/objects
      name: search-objects
      description: REST surface for search-objects.
      operations:
      - method: GET
        name: searchobjects
        description: Search Collection Objects
        call: collection-search.searchobjects
        with:
          q: rest.q
          type: rest.type
          makers: rest.makers
          people: rest.people
          categories: rest.categories
          museum: rest.museum
          on_display: rest.on_display
          location: rest.location
          images: rest.images
          places: rest.places
          date[from]: rest.date[from]
          date[to]: rest.date[to]
          page[number]: rest.page[number]
          page[size]: rest.page[size]
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/search/people
      name: search-people
      description: REST surface for search-people.
      operations:
      - method: GET
        name: searchpeople
        description: Search Collection People
        call: collection-search.searchpeople
        with:
          q: rest.q
          birth[place]: rest.birth[place]
          birth[date]: rest.birth[date]
          death[date]: rest.death[date]
          occupation: rest.occupation
          places: rest.places
          images: rest.images
          page[number]: rest.page[number]
          page[size]: rest.page[size]
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: collection-search-mcp
    port: 9090
    transport: http
    description: MCP adapter for Science Museum Group Collection API — Search. One tool per consumed operation, routed inline
      through this capability's consumes block.
    tools:
    - name: search-all-collection-types
      description: Search All Collection Types
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: collection-search.searchall
      with:
        q: tools.q
        random: tools.random
        page[number]: tools.page[number]
        page[size]: tools.page[size]
        date[from]: tools.date[from]
        date[to]: tools.date[to]
        places: tools.places
        images: tools.images
      outputParameters:
      - type: object
        mapping: $.
    - name: search-collection-documents
      description: Search Collection Documents
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: collection-search.searchdocuments
      with:
        q: tools.q
        makers: tools.makers
        people: tools.people
        archive: tools.archive
        places: tools.places
        date[from]: tools.date[from]
        date[to]: tools.date[to]
        images: tools.images
        page[number]: tools.page[number]
        page[size]: tools.page[size]
      outputParameters:
      - type: object
        mapping: $.
    - name: search-collection-objects
      description: Search Collection Objects
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: collection-search.searchobjects
      with:
        q: tools.q
        type: tools.type
        makers: tools.makers
        people: tools.people
        categories: tools.categories
        museum: tools.museum
        on_display: tools.on_display
        location: tools.location
        images: tools.images
        places: tools.places
        date[from]: tools.date[from]
        date[to]: tools.date[to]
        page[number]: tools.page[number]
        page[size]: tools.page[size]
      outputParameters:
      - type: object
        mapping: $.
    - name: search-collection-people
      description: Search Collection People
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: collection-search.searchpeople
      with:
        q: tools.q
        birth[place]: tools.birth[place]
        birth[date]: tools.birth[date]
        death[date]: tools.death[date]
        occupation: tools.occupation
        places: tools.places
        images: tools.images
        page[number]: tools.page[number]
        page[size]: tools.page[size]
      outputParameters:
      - type: object
        mapping: $.