*MCP › Reference › Operations › Staff*

# Create a staff member

> Registers someone in the staff.

The body accepts ONLY the organizational part —name, relationship type, collection, tags and whether they drive—: email, phone and free text are personal data and do not travel through the public edge, just as they are not emitted on read. Returns the created member with the same projection as the listing.

TOOL `filmo_staff_create` · `staff:write` · 120/min

## Arguments

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `fullName` | string | Yes | Full name. |
| `staffType` | string | No | Engagement type with the company. `employee`, `freelancer`, `contractor` |
| `collectionId` | string | No | Collection it belongs to. |
| `tags` | string[] | No | Tags by name; a name that does not exist CREATES the tag. |
| `hasDrivingLicense` | boolean | No | Whether they hold a driving licence. It is the field that decides who can drive a vehicle. |
| `idempotencyKey` | string | No | Idempotency key chosen by the client (a UUID is recommended). Repeating the same key with the same arguments within 24 h returns the stored response without executing again; with different arguments it responds 422. It is the safe way to retry after a network failure. |
| `ifMatch` | string | No | Optimistic locking: the meta.etag you got from the detail read of this resource (or "*"). If the resource changed since, the call fails with 412 precondition_failed before writing anything; read it again and retry. Omit it to write unconditionally. |

## Result

On success the result carries `structuredContent` with `data` and `meta`. These are the attributes of `data`.

| Name | Type | Description |
| --- | --- | --- |
| `id` | string | Unique staff member identifier. |
| `fullName` | string | Full name. |
| `staffType` | string | Staff member type. `employee`, `freelancer`, `contractor` |
| `collectionId` | string | Identifier of the collection it belongs to; null if it is in none. |
| `collectionName` | string | Collection path it belongs to; null if not applicable. |
| `hasDrivingLicense` | boolean | true if they hold a driving licence. |
| `showInPlanner` | boolean | true if they appear in the planner of the account. |
| `externalRef` | string | External reference for matching with third-party systems; null if it has none. |
| `createdAt` | string<date-time> | Creation date in ISO 8601 UTC; null if not recorded. |
| `updatedAt` | string<date-time> | Last modification date in ISO 8601 UTC; null if not recorded. |

*Call · filmo_staff_create*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_staff_create",
    "arguments": {
      "fullName": "Example"
    }
  }
}
```

*Result (generated from the schema)*

```json
{
  "structuredContent": {
    "data": {
      "id": "id_8f2a1c",
      "fullName": "Example",
      "staffType": "employee",
      "collectionId": "coll_8f2a1c",
      "collectionName": "Example",
      "hasDrivingLicense": true,
      "showInPlanner": true,
      "externalRef": "<externalRef>",
      "createdAt": "2026-09-01T08:00:00Z",
      "updatedAt": "2026-09-01T08:00:00Z"
    },
    "meta": {
      "idempotencyKey": "<the key you sent, or the one the server generated>",
      "rateLimit": {
        "limit": 120,
        "remaining": 119,
        "reset": 42
      }
    }
  }
}
```

## The same operation by REST

This tool runs [`POST /api/v1/staff`](https://docs.filmo.io/rest-api/endpoint-reference/staff/create-a-staff-member).

---

Canonical URL: https://docs.filmo.io/mcp/tools/staff/filmo-staff-create  
Last updated: 2026-10-25