Fulcrum · Capability

Fulcrum API

The Fulcrum API is a RESTful HTTP API for the Fulcrum field data collection platform. It provides programmatic access to forms, records, media (photos, videos, audio, signatures), choice lists, classification sets, projects, layers, memberships, roles, webhooks, ad hoc query and SQL execution, and changesets. Requests and responses use JSON and authenticate with an X-ApiToken header issued from a Fulcrum account.

Run with Naftiko FulcrumAPI

What You Can Do

GET
Listforms — List forms
/forms.json
POST
Createform — Create form
/forms.json
GET
Getform — Get form
/forms/{id}.json
PUT
Updateform — Update form
/forms/{id}.json
DELETE
Deleteform — Delete form
/forms/{id}.json
GET
Listrecords — List records
/records.json
POST
Createrecord — Create record
/records.json
GET
Getrecord — Get record
/records/{id}.json
PUT
Updaterecord — Update record
/records/{id}.json
DELETE
Deleterecord — Delete record
/records/{id}.json
GET
Listphotos — List photos
/photos.json
POST
Uploadphoto — Upload photo
/photos.json
GET
Getphoto — Get photo metadata
/photos/{id}.json
GET
Downloadphoto — Download photo
/photos/{id}.jpg
GET
Listvideos — List videos
/videos.json
POST
Uploadvideo — Upload video
/videos.json
GET
Listaudio — List audio clips
/audio.json
POST
Uploadaudio — Upload audio
/audio.json
GET
Listsignatures — List signatures
/signatures.json
POST
Uploadsignature — Upload signature
/signatures.json
GET
Listchoicelists — List choice lists
/choice_lists.json
POST
Createchoicelist — Create choice list
/choice_lists.json
GET
Getchoicelist — Get choice list
/choice_lists/{id}.json
PUT
Updatechoicelist — Update choice list
/choice_lists/{id}.json
DELETE
Deletechoicelist — Delete choice list
/choice_lists/{id}.json
GET
Listclassificationsets — List classification sets
/classification_sets.json
POST
Createclassificationset — Create classification set
/classification_sets.json
GET
Getclassificationset — Get classification set
/classification_sets/{id}.json
PUT
Updateclassificationset — Update classification set
/classification_sets/{id}.json
DELETE
Deleteclassificationset — Delete classification set
/classification_sets/{id}.json
GET
Listprojects — List projects
/projects.json
POST
Createproject — Create project
/projects.json
GET
Getproject — Get project
/projects/{id}.json
PUT
Updateproject — Update project
/projects/{id}.json
DELETE
Deleteproject — Delete project
/projects/{id}.json
GET
Listlayers — List layers
/layers.json
POST
Createlayer — Create layer
/layers.json
GET
Getlayer — Get layer
/layers/{id}.json
PUT
Updatelayer — Update layer
/layers/{id}.json
DELETE
Deletelayer — Delete layer
/layers/{id}.json
GET
Listmemberships — List memberships
/memberships.json
PUT
Updatemembership — Update membership
/memberships/{id}.json
GET
Listroles — List roles
/roles.json
POST
Createrole — Create role
/roles.json
GET
Getrole — Get role
/roles/{id}.json
PUT
Updaterole — Update role
/roles/{id}.json
DELETE
Deleterole — Delete role
/roles/{id}.json
GET
Listwebhooks — List webhooks
/webhooks.json
POST
Createwebhook — Create webhook
/webhooks.json
GET
Getwebhook — Get webhook
/webhooks/{id}.json
PUT
Updatewebhook — Update webhook
/webhooks/{id}.json
DELETE
Deletewebhook — Delete webhook
/webhooks/{id}.json
GET
Listchangesets — List changesets
/changesets.json
GET
Getchangeset — Get changeset
/changesets/{id}.json
GET
Executequery — Execute SQL query
/query

MCP Tools

listforms

List forms

read-only idempotent
createform

Create form

getform

Get form

read-only idempotent
updateform

Update form

idempotent
deleteform

Delete form

idempotent
listrecords

List records

read-only idempotent
createrecord

Create record

getrecord

Get record

read-only idempotent
updaterecord

Update record

idempotent
deleterecord

Delete record

idempotent
listphotos

List photos

read-only idempotent
uploadphoto

Upload photo

getphoto

Get photo metadata

read-only idempotent
downloadphoto

Download photo

read-only idempotent
listvideos

List videos

read-only idempotent
uploadvideo

Upload video

listaudio

List audio clips

read-only idempotent
uploadaudio

Upload audio

listsignatures

List signatures

read-only idempotent
uploadsignature

Upload signature

listchoicelists

List choice lists

read-only idempotent
createchoicelist

Create choice list

getchoicelist

Get choice list

read-only idempotent
updatechoicelist

Update choice list

idempotent
deletechoicelist

Delete choice list

idempotent
listclassificationsets

List classification sets

read-only idempotent
createclassificationset

Create classification set

getclassificationset

Get classification set

read-only idempotent
updateclassificationset

Update classification set

idempotent
deleteclassificationset

Delete classification set

idempotent
listprojects

List projects

read-only idempotent
createproject

Create project

getproject

Get project

read-only idempotent
updateproject

Update project

idempotent
deleteproject

Delete project

idempotent
listlayers

List layers

read-only idempotent
createlayer

Create layer

getlayer

Get layer

read-only idempotent
updatelayer

Update layer

idempotent
deletelayer

Delete layer

idempotent
listmemberships

List memberships

read-only idempotent
updatemembership

Update membership

idempotent
listroles

List roles

read-only idempotent
createrole

Create role

getrole

Get role

read-only idempotent
updaterole

Update role

idempotent
deleterole

Delete role

idempotent
listwebhooks

List webhooks

read-only idempotent
createwebhook

Create webhook

getwebhook

Get webhook

read-only idempotent
updatewebhook

Update webhook

idempotent
deletewebhook

Delete webhook

idempotent
listchangesets

List changesets

read-only idempotent
getchangeset

Get changeset

read-only idempotent
executequery

Execute SQL query

read-only idempotent

Capability Spec

fulcrum-capability.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Fulcrum API
  description: The Fulcrum API is a RESTful HTTP API for the Fulcrum field data collection platform. It provides programmatic
    access to forms, records, media (photos, videos, audio, signatures), choice lists, classification sets, projects, layers,
    memberships, roles, webhooks, ad hoc query and SQL execution, and changesets. Requests and responses use JSON and authenticate
    with an X-ApiToken header issued from a Fulcrum account.
  tags:
  - Fulcrum
  - API
  created: '2026-05-06'
  modified: '2026-05-06'
capability:
  consumes:
  - type: http
    namespace: fulcrum
    baseUri: https://api.fulcrumapp.com/api/v2
    description: Fulcrum API HTTP API.
    authentication:
      type: apikey
      in: header
      name: X-ApiToken
      value: '{{FULCRUM_TOKEN}}'
    resources:
    - name: forms-json
      path: /forms.json
      operations:
      - name: listforms
        method: GET
        description: List forms
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createform
        method: POST
        description: Create form
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: forms-id-json
      path: /forms/{id}.json
      operations:
      - name: getform
        method: GET
        description: Get form
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateform
        method: PUT
        description: Update form
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleteform
        method: DELETE
        description: Delete form
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: records-json
      path: /records.json
      operations:
      - name: listrecords
        method: GET
        description: List records
        inputParameters:
        - name: form_id
          in: query
          type: string
          description: Filter by form (app) identifier
        - name: project_id
          in: query
          type: string
          description: Filter by project identifier
        - name: assigned_to_id
          in: query
          type: string
          description: Filter by assignment
        - name: status
          in: query
          type: string
          description: Filter by record status
        - name: bounding_box
          in: query
          type: string
          description: Comma-separated south,west,north,east bounding box
        - name: per_page
          in: query
          type: integer
        - name: page
          in: query
          type: integer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createrecord
        method: POST
        description: Create record
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: records-id-json
      path: /records/{id}.json
      operations:
      - name: getrecord
        method: GET
        description: Get record
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updaterecord
        method: PUT
        description: Update record
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleterecord
        method: DELETE
        description: Delete record
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: photos-json
      path: /photos.json
      operations:
      - name: listphotos
        method: GET
        description: List photos
        inputParameters:
        - name: form_id
          in: query
          type: string
        - name: record_id
          in: query
          type: string
        - name: per_page
          in: query
          type: integer
        - name: page
          in: query
          type: integer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: uploadphoto
        method: POST
        description: Upload photo
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: photos-id-json
      path: /photos/{id}.json
      operations:
      - name: getphoto
        method: GET
        description: Get photo metadata
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: photos-id-jpg
      path: /photos/{id}.jpg
      operations:
      - name: downloadphoto
        method: GET
        description: Download photo
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: videos-json
      path: /videos.json
      operations:
      - name: listvideos
        method: GET
        description: List videos
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: uploadvideo
        method: POST
        description: Upload video
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: audio-json
      path: /audio.json
      operations:
      - name: listaudio
        method: GET
        description: List audio clips
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: uploadaudio
        method: POST
        description: Upload audio
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: signatures-json
      path: /signatures.json
      operations:
      - name: listsignatures
        method: GET
        description: List signatures
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: uploadsignature
        method: POST
        description: Upload signature
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: choice-lists-json
      path: /choice_lists.json
      operations:
      - name: listchoicelists
        method: GET
        description: List choice lists
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createchoicelist
        method: POST
        description: Create choice list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: choice-lists-id-json
      path: /choice_lists/{id}.json
      operations:
      - name: getchoicelist
        method: GET
        description: Get choice list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatechoicelist
        method: PUT
        description: Update choice list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deletechoicelist
        method: DELETE
        description: Delete choice list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: classification-sets-json
      path: /classification_sets.json
      operations:
      - name: listclassificationsets
        method: GET
        description: List classification sets
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createclassificationset
        method: POST
        description: Create classification set
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: classification-sets-id-json
      path: /classification_sets/{id}.json
      operations:
      - name: getclassificationset
        method: GET
        description: Get classification set
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateclassificationset
        method: PUT
        description: Update classification set
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleteclassificationset
        method: DELETE
        description: Delete classification set
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: projects-json
      path: /projects.json
      operations:
      - name: listprojects
        method: GET
        description: List projects
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createproject
        method: POST
        description: Create project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: projects-id-json
      path: /projects/{id}.json
      operations:
      - name: getproject
        method: GET
        description: Get project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateproject
        method: PUT
        description: Update project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleteproject
        method: DELETE
        description: Delete project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: layers-json
      path: /layers.json
      operations:
      - name: listlayers
        method: GET
        description: List layers
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createlayer
        method: POST
        description: Create layer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: layers-id-json
      path: /layers/{id}.json
      operations:
      - name: getlayer
        method: GET
        description: Get layer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatelayer
        method: PUT
        description: Update layer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deletelayer
        method: DELETE
        description: Delete layer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: memberships-json
      path: /memberships.json
      operations:
      - name: listmemberships
        method: GET
        description: List memberships
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: memberships-id-json
      path: /memberships/{id}.json
      operations:
      - name: updatemembership
        method: PUT
        description: Update membership
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: roles-json
      path: /roles.json
      operations:
      - name: listroles
        method: GET
        description: List roles
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createrole
        method: POST
        description: Create role
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: roles-id-json
      path: /roles/{id}.json
      operations:
      - name: getrole
        method: GET
        description: Get role
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updaterole
        method: PUT
        description: Update role
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleterole
        method: DELETE
        description: Delete role
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: webhooks-json
      path: /webhooks.json
      operations:
      - name: listwebhooks
        method: GET
        description: List webhooks
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createwebhook
        method: POST
        description: Create webhook
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: webhooks-id-json
      path: /webhooks/{id}.json
      operations:
      - name: getwebhook
        method: GET
        description: Get webhook
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatewebhook
        method: PUT
        description: Update webhook
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deletewebhook
        method: DELETE
        description: Delete webhook
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: changesets-json
      path: /changesets.json
      operations:
      - name: listchangesets
        method: GET
        description: List changesets
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: changesets-id-json
      path: /changesets/{id}.json
      operations:
      - name: getchangeset
        method: GET
        description: Get changeset
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: query
      path: /query
      operations:
      - name: executequery
        method: GET
        description: Execute SQL query
        inputParameters:
        - name: q
          in: query
          type: string
          required: true
          description: SQL query string
        - name: format
          in: query
          type: string
          description: Result format
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
  exposes:
  - type: rest
    port: 8080
    namespace: fulcrum-rest
    description: REST adapter for Fulcrum API.
    resources:
    - path: /forms.json
      name: listforms
      operations:
      - method: GET
        name: listforms
        description: List forms
        call: fulcrum.listforms
        outputParameters:
        - type: object
          mapping: $.
    - path: /forms.json
      name: createform
      operations:
      - method: POST
        name: createform
        description: Create form
        call: fulcrum.createform
        outputParameters:
        - type: object
          mapping: $.
    - path: /forms/{id}.json
      name: getform
      operations:
      - method: GET
        name: getform
        description: Get form
        call: fulcrum.getform
        outputParameters:
        - type: object
          mapping: $.
    - path: /forms/{id}.json
      name: updateform
      operations:
      - method: PUT
        name: updateform
        description: Update form
        call: fulcrum.updateform
        outputParameters:
        - type: object
          mapping: $.
    - path: /forms/{id}.json
      name: deleteform
      operations:
      - method: DELETE
        name: deleteform
        description: Delete form
        call: fulcrum.deleteform
        outputParameters:
        - type: object
          mapping: $.
    - path: /records.json
      name: listrecords
      operations:
      - method: GET
        name: listrecords
        description: List records
        call: fulcrum.listrecords
        outputParameters:
        - type: object
          mapping: $.
    - path: /records.json
      name: createrecord
      operations:
      - method: POST
        name: createrecord
        description: Create record
        call: fulcrum.createrecord
        outputParameters:
        - type: object
          mapping: $.
    - path: /records/{id}.json
      name: getrecord
      operations:
      - method: GET
        name: getrecord
        description: Get record
        call: fulcrum.getrecord
        outputParameters:
        - type: object
          mapping: $.
    - path: /records/{id}.json
      name: updaterecord
      operations:
      - method: PUT
        name: updaterecord
        description: Update record
        call: fulcrum.updaterecord
        outputParameters:
        - type: object
          mapping: $.
    - path: /records/{id}.json
      name: deleterecord
      operations:
      - method: DELETE
        name: deleterecord
        description: Delete record
        call: fulcrum.deleterecord
        outputParameters:
        - type: object
          mapping: $.
    - path: /photos.json
      name: listphotos
      operations:
      - method: GET
        name: listphotos
        description: List photos
        call: fulcrum.listphotos
        outputParameters:
        - type: object
          mapping: $.
    - path: /photos.json
      name: uploadphoto
      operations:
      - method: POST
        name: uploadphoto
        description: Upload photo
        call: fulcrum.uploadphoto
        outputParameters:
        - type: object
          mapping: $.
    - path: /photos/{id}.json
      name: getphoto
      operations:
      - method: GET
        name: getphoto
        description: Get photo metadata
        call: fulcrum.getphoto
        outputParameters:
        - type: object
          mapping: $.
    - path: /photos/{id}.jpg
      name: downloadphoto
      operations:
      - method: GET
        name: downloadphoto
        description: Download photo
        call: fulcrum.downloadphoto
        outputParameters:
        - type: object
          mapping: $.
    - path: /videos.json
      name: listvideos
      operations:
      - method: GET
        name: listvideos
        description: List videos
        call: fulcrum.listvideos
        outputParameters:
        - type: object
          mapping: $.
    - path: /videos.json
      name: uploadvideo
      operations:
      - method: POST
        name: uploadvideo
        description: Upload video
        call: fulcrum.uploadvideo
        outputParameters:
        - type: object
          mapping: $.
    - path: /audio.json
      name: listaudio
      operations:
      - method: GET
        name: listaudio
        description: List audio clips
        call: fulcrum.listaudio
        outputParameters:
        - type: object
          mapping: $.
    - path: /audio.json
      name: uploadaudio
      operations:
      - method: POST
        name: uploadaudio
        description: Upload audio
        call: fulcrum.uploadaudio
        outputParameters:
        - type: object
          mapping: $.
    - path: /signatures.json
      name: listsignatures
      operations:
      - method: GET
        name: listsignatures
        description: List signatures
        call: fulcrum.listsignatures
        outputParameters:
        - type: object
          mapping: $.
    - path: /signatures.json
      name: uploadsignature
      operations:
      - method: POST
        name: uploadsignature
        description: Upload signature
        call: fulcrum.uploadsignature
        outputParameters:
        - type: object
          mapping: $.
    - path: /choice_lists.json
      name: listchoicelists
      operations:
      - method: GET
        name: listchoicelists
        description: List choice lists
        call: fulcrum.listchoicelists
        outputParameters:
        - type: object
          mapping: $.
    - path: /choice_lists.json
      name: createchoicelist
      operations:
      - method: POST
        name: createchoicelist
        description: Create choice list
        call: fulcrum.createchoicelist
        outputParameters:
        - type: object
          mapping: $.
    - path: /choice_lists/{id}.json
      name: getchoicelist
      operations:
      - method: GET
        name: getchoicelist
        description: Get choice list
        call: fulcrum.getchoicelist
        outputParameters:
        - type: object
          mapping: $.
    - path: /choice_lists/{id}.json
      name: updatechoicelist
      operations:
      - method: PUT
        name: updatechoicelist
        description: Update choice list
        call: fulcrum.updatechoicelist
        outputParameters:
        - type: object
          mapping: $.
    - path: /choice_lists/{id}.json
      name: deletechoicelist
      operations:
      - method: DELETE
        name: deletechoicelist
        description: Delete choice list
        call: fulcrum.deletechoicelist
        outputParameters:
        - type: object
          mapping: $.
    - path: /classification_sets.json
      name: listclassificationsets
      operations:
      - method: GET
        name: listclassificationsets
        description: List classification sets
        call: fulcrum.listclassificationsets
        outputParameters:
        - type: object
          mapping: $.
    - path: /classification_sets.json
      name: createclassificationset
      operations:
      - method: POST
        name: createclassificationset
        description: Create classification set
        call: fulcrum.createclassificationset
        outputParameters:
        - type: object
          mapping: $.
    - path: /classification_sets/{id}.json
      name: getclassificationset
      operations:
      - method: GET
        name: getclassificationset
        description: Get classification set
        call: fulcrum.getclassificationset
        outputParameters:
        - type: object
          mapping: $.
    - path: /classification_sets/{id}.json
      name: updateclassificationset
      operations:
      - method: PUT
        name: updateclassificationset
        description: Update classification set
        call: fulcrum.updateclassificationset
        outputParameters:
        - type: object
          mapping: $.
    - path: /classification_sets/{id}.json
      name: deleteclassificationset
      operations:
      - method: DELETE
        name: deleteclassificationset
        description: Delete classification set
        call: fulcrum.deleteclassificationset
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects.json
      name: listprojects
      operations:
      - method: GET
        name: listprojects
        description: List projects
        call: fulcrum.listprojects
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects.json
      name: createproject
      operations:
      - method: POST
        name: createproject
        description: Create project
        call: fulcrum.createproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{id}.json
      name: getproject
      operations:
      - method: GET
        name: getproject
        description: Get project
        call: fulcrum.getproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{id}.json
      name: updateproject
      operations:
      - method: PUT
        name: updateproject
        description: Update project
        call: fulcrum.updateproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{id}.json
      name: deleteproject
      operations:
      - method: DELETE
        name: deleteproject
        description: Delete project
        call: fulcrum.deleteproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /layers.json
      name: listlayers
      operations:
      - method: GET
        name: listlayers
        description: List layers
        call: fulcrum.listlayers
        outputParameters:
        - type: object
          mapping: $.
    - path: /layers.json
      name: createlayer
      operations:
      - method: POST
        name: createlayer
        description: Create layer
        call: fulcrum.createlayer
        outputParameters:
        - type: object
          mapping: $.
    - path: /layers/{id}.json
      name: getlayer
      operations:
      - method: GET
        name: getlayer
        description: Get layer
        call: fulcrum.getlayer
        outputParameters:
        - type: object
          mapping: $.
    - path: /layers/{id}.json
      name: updatelayer
      operations:
      - method: PUT
        name: updatelayer
        description: Update layer
        call: fulcrum.updatelayer
        outputParameters:
        - type: object
          mapping: $.
    - path: /layers/{id}.json
      name: deletelayer
      operations:
      - method: DELETE
        name: deletelayer
        description: Delete layer
        call: fulcrum.deletelayer
        outputParameters:
        - type: object
          mapping: $.
    - path: /memberships.json
      name: listmemberships
      operations:
      - method: GET
        name: listmemberships
        description: List memberships
        call: fulcrum.listmemberships
        outputParameters:
        - type: object
          mapping: $.
    - path: /memberships/{id}.json
      name: updatemembership
      operations:
      - method: PUT
        name: updatemembership
        description: Update membership
        call: fulcrum.updatemembership
        outputParameters:
        - type: object
          mapping: $.
    - path: /roles.json
      name: listroles
      operations:
      - method: GET
        name: listroles
        description: List roles
        call: fulcrum.listroles
        outputParameters:
        - type: object
          mapping: $.
    - path: /roles.json
      name: createrole
      operations:
      - method: POST
        name: createrole
        description: Create role
        call: fulcrum.createrole
        outputParameters:
        - type: object
          mapping: $.
    - path: /roles/{id}.json
      name: getrole
      operations:
      - method: GET
        name: getrole
        description: Get role
        call: fulcrum.getrole
        outputParameters:
        - type: object
          mapping: $.
    - path: /roles/{id}.json
      name: updaterole
      operations:
      - method: PUT
        name: updaterole
        description: Update role
        call: fulcrum.updaterole
        outputParameters:
        - type: object
          mapping: $.
    - path: /roles/{id}.json
      name: deleterole
      operations:
      - method: DELETE
        name: deleterole
        description: Delete role
        call: fulcrum.deleterole
        outputParameters:
        - type: object
          mapping: $.
    - path: /webhooks.json
      name: listwebhooks
      operations:
      - method: GET
        name: listwebhooks
        description: List webhooks
        call: fulcrum.listwebhooks
        outputParameters:
        - type: object
          mapping: $.
    - path: /webhooks.json
      name: createwebhook
      operations:
      - method: POST
        name: createwebhook
        description: Create webhook
        call: fulcrum.createwebhook
        outputParameters:
        - type: object
          mapping: $.
    - path: /webhooks/{id}.json
      name: getwebhook
      operations:
      - method: GET
        name: getwebhook
        description: Get webhook
        call: fulcrum.getwebhook
        outputParameters:
        - type: object
          mapping: $.
    - path: /webhooks/{id}.json
      name: updatewebhook
      operations:
      - method: PUT
        name: updatewebhook
        description: Update webhook
        call: fulcrum.updatewebhook
        outputParameters:
        - type: object
          mapping: $.
    - path: /webhooks/{id}.json
      name: deletewebhook
      operations:
      - method: DELETE
        name: deletewebhook
        description: Delete webhook
        call: fulcrum.deletewebhook
        outputParameters:
        - type: object
          mapping: $.
    - path: /changesets.json
      name: listchangesets
      operations:
      - method: GET
        name: listchangesets
        description: List changesets
        call: fulcrum.listchangesets
        outputParameters:
        - type: object
          mapping: $.
    - path: /changesets/{id}.json
      name: getchangeset
      operations:
      - method: GET
        name: getchangeset
        description: Get changeset
        call: fulcrum.getchangeset
        outputParameters:
        - type: object
          mapping: $.
    - path: /query
      name: executequery
      operations:
      - method: GET
        name: executequery
        description: Execute SQL query
        call: fulcrum.executequery
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    port: 9090
    namespace: fulcrum-mcp
    transport: http
    description: MCP adapter for Fulcrum API for AI agent use.
    tools:
    - name: listforms
      description: List forms
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: fulcrum.listforms
      outputParameters:
      - type: object
        mapping: $.
    - name: createform
      description: Create form
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: fulcrum.createform
      outputParameters:
      - type: object
        mapping: $.
    - name: getform
      description: Get form
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: fulcrum.getform
      outputParameters:
      - type: object
        mapping: $.
    - name: updateform
      description: Update form
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: fulcrum.updateform
      outputParameters:
      - type: object
        mapping: $.
    - name: deleteform
      description: Delete form
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: fulcrum.deleteform
      outputParameters:
      - type: object
        mapping: $.
    - name: listrecords
      description: List records
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: fulcrum.listrecords
      with:
        form_id: tools.form_id
        project_id: tools.project_id
        assigned_to_id: tools.assigned_to_id
        status: tools.status
        bounding_box: tools.bounding_box
        per_page: tools.per_page
        page: tools.page
      inputParameters:
      - name: form_id
        type: string
        description: Filter by form (app) identifier
      - name: project_id
        type: string
        description: Filter by project identifier
      - name: assigned_to_id
        type: string
        description: Filter by assignment
      - name: status
        type: string
        description: Filter by record status
      - name: bounding_box
        type: string
        description: Comma-separated south,west,north,east bounding box
      - name: per_page
        type: integer
        description: per_page
      - name: page
        type: integer
        description: page
      outputParameters:
      - type: object
        mapping: $.
    - name: createrecord
      description: Create record
      hints:
        readOnly: f

# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fulcrum/refs/heads/main/capabilities/fulcrum-capability.yaml