# Fieldwire MCP by usefulapi (remote · fieldwire.usefulapi.io)

Read Fieldwire projects, tasks, plans, forms, RFIs and submittals; create and update tasks.

- Trust score: 64/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-17

## Components

- remote · `fieldwire.usefulapi.io`: 64/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-fieldwire/fieldwire.md), [page](https://verifymcp.io/servers/io-usefulapi-fieldwire/fieldwire)

## Channel facts

- Endpoint: `https://fieldwire.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-17.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 76/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4338 tokens (~197/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 98% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Fieldwire MCP by usefulapi server?

Fieldwire MCP by usefulapi is a hosted endpoint at https://fieldwire.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-fieldwire 'https://fieldwire.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-fieldwire": {
      "url": "https://fieldwire.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-fieldwire": {
      "type": "http",
      "url": "https://fieldwire.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-fieldwire]
url = "https://fieldwire.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-fieldwire": {
      "type": "remote",
      "url": "https://fieldwire.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-fieldwire --url 'https://fieldwire.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-fieldwire:
    url: "https://fieldwire.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-fieldwire": {
      "Transport": "http",
      "Url": "https://fieldwire.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-fieldwire -t streamable-http -u 'https://fieldwire.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-fieldwire": {
      "type": "http",
      "url": "https://fieldwire.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-17 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-15 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-14 (score 62, +3)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional] The server now declares the “prompts” capability
- [functional] First check of Schema quality: 100
- [functional] New prompt “getting_started”
- [functional] Server version: 1.0.0 → 1.1.0

### 2026-10-13 (score 59, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-12 (score 59)

First indexed and scored.

## MCP tools (22)

### `fieldwire_get_account` (~56 tokens)

Get account

The Fieldwire account this API token belongs to: id, company name and address, enabled modules (submittals, change orders, RFIs, specs, BIM) and the owner. GET /account on the account host.

### `fieldwire_list_account_users` (~64 tokens)

List account users

All users on the account (and users invited to its projects) with name, company, email, account role and the number of projects each is in. User ids are what tasks use for owner and assignees. GET /account/users on the account host.

### `fieldwire_list_projects` (~239 tokens)

List projects

Projects the token's user can access in the region chosen at login: id, name, code, address, time zone, plan and archive state. Filter by name, code, archive state or update time. Use the id in every other tool. GET /api/v3/projects.

Input parameters:

- `archived` (boolean): true = only archived projects, false = only unarchived.
- `code` (string): Only the project with this exact project code.
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `name_contains` (string): Only projects whose name contains this text.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `updated_after` (string): Only projects updated at or after this ISO 8601 date-time.
- `updated_before` (string): Only projects updated at or before this ISO 8601 date-time.

### `fieldwire_get_project` (~64 tokens)

Get project

One project by id: name, code, address, time zone, currency, plan, enabled features and owner email. GET /api/v3/projects/{id}.

Input parameters:

- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.

### `fieldwire_list_project_users` (~125 tokens)

List project users

Users on one project with name, company, job title, email and phone. The integer id is what tasks use for owner_user_id and user_ids. Filter by email, name or company. GET /api/v3/account/projects/{project_id}/users.

Input parameters:

- `company_contains` (string)
- `email_contains` (string): Only users whose email contains this text.
- `first_name_contains` (string)
- `last_name_contains` (string)
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.

### `fieldwire_list_tasks` (~467 tokens)

List tasks

Tasks (punch items, issues) in a project: name, status_id, team_id, location_id, floorplan_id, owner and assignee user ids, priority, dates and cost. Filter by status, team, location, plan, owner, name, tag and dates. Resolve ids with fieldwire_list_task_statuses, _list_teams, _list_locations and _list_project_users. GET /api/v3/projects/{project_id}/tasks.

Input parameters:

- `created_after` (string): Only tasks created at or after this ISO 8601 date-time.
- `created_before` (string): Only tasks created at or before this ISO 8601 date-time.
- `creator_user_id` (integer): Only tasks created by this user id.
- `due_after` (string): Only tasks due on or after this date (yyyy-mm-dd) or date-time.
- `due_before` (string): Only tasks due on or before this date (yyyy-mm-dd) or date-time.
- `floorplan_id` (string): Only tasks pinned on this plan (floorplan).
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `location_id` (string): Only tasks at this location.
- `name_contains` (string): Only tasks whose name contains this text.
- `owner_user_id` (integer): Only tasks owned by this user id.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `status_id` (string): Only tasks with this status id.
- `tag` (string): Only tasks with exactly this tag.
- `team_id` (string): Only tasks of this team (shown as 'category' in the Fieldwire app).
- `updated_after` (string): Only tasks updated at or after this ISO 8601 date-time.
- `updated_before` (string): Only tasks updated at or before this ISO 8601 date-time.

### `fieldwire_get_task` (~66 tokens)

Get task

One task by id with all its fields. GET /api/v3/projects/{project_id}/tasks/{id}.

Input parameters:

- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `task_id` (string, required): Task id (UUID).

### `fieldwire_list_task_statuses` (~77 tokens)

List task statuses

The task statuses of a project (id, name, order, kind open/tracked/verified, default flag). Use the id as status_id on tasks. GET /api/v3/projects/{project_id}/statuses.

Input parameters:

- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.

### `fieldwire_list_teams` (~154 tokens)

List teams (task categories)

Teams of a project (id, name, handle). The Fieldwire app calls them 'categories' on tasks; tasks carry a team_id. GET /api/v3/projects/{project_id}/teams.

Input parameters:

- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.

### `fieldwire_list_locations` (~143 tokens)

List locations

Locations of a project (id, name, parent location_id). Tasks carry a location_id. GET /api/v3/projects/{project_id}/locations.

Input parameters:

- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.

### `fieldwire_list_task_check_items` (~162 tokens)

List task checklist items

Checklist items of all tasks in a project: name, checked flag, state (empty/yes/no/not_applicable) and task_id (match it to the task). GET /api/v3/projects/{project_id}/task_check_items.

Input parameters:

- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.

### `fieldwire_list_floorplans` (~231 tokens)

List plans (floorplans)

Plans (floorplans) of a project: id, name, description, folder and sheet count. Filter by name, tag or dates. Set with_current_sheet to include each plan's current sheet. GET /api/v3/projects/{project_id}/floorplans.

Input parameters:

- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `name_contains` (string): Only plans whose name contains this text.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `tag` (string): Only plans with exactly this tag.
- `updated_after` (string): Only plans updated at or after this ISO 8601 date-time.
- `with_current_sheet` (boolean): Include the current sheet of each plan.

### `fieldwire_list_sheets` (~224 tokens)

List sheets

Sheets (plan versions) of a project: id, name, file name, version, floorplan_id and file URLs. Filter by plan, folder, name or dates. GET /api/v3/projects/{project_id}/sheets.

Input parameters:

- `floorplan_id` (string): Only sheets of this plan.
- `folder_id` (string): Only sheets in this folder.
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `name_contains` (string): Only sheets whose name contains this text.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `updated_after` (string): Only sheets updated at or after this ISO 8601 date-time.

### `fieldwire_list_attachments` (~167 tokens)

List attachments

Files, photos, videos and 360 photos attached in a project: id, name, kind, size, capture time and file URLs. Filter by kind. GET /api/v3/projects/{project_id}/attachments.

Input parameters:

- `kind` (array): Only these kinds.
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.

### `fieldwire_list_forms` (~281 tokens)

List forms

Forms (inspections, daily reports, checklists) of a project: id, name, template, status, owner, dates. Forms need a Business plan. Use fieldwire_get_form_full for the filled-in values. GET /api/v3/projects/{project_id}/forms.

Input parameters:

- `due_after` (string): Only forms due on or after this date or date-time.
- `due_before` (string): Only forms due on or before this date or date-time.
- `form_template_id` (string): Only forms made from this template (see fieldwire_list_form_templates).
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `name_contains` (string): Only forms whose name contains this text.
- `owner_user_id` (integer): Only forms owned by this user id.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `updated_after` (string): Only forms updated at or after this ISO 8601 date-time.

### `fieldwire_get_form` (~72 tokens)

Get form

One form by id (header data only, not the filled-in values). GET /api/v3/projects/{project_id}/forms/{id}.

Input parameters:

- `form_id` (string, required): Form id (UUID).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.

### `fieldwire_get_form_full` (~131 tokens)

Get form with all values

A form with its sections, inputs and filled-in values. Two steps: call without jid to start the job (Fieldwire answers with a jid); then call again with that jid until the form comes back (answer 'pending' means not ready, retry). GET /api/v3/projects/{project_id}/forms/{id}/full.

Input parameters:

- `form_id` (string, required): Form id (UUID).
- `jid` (string): The jid returned by the first call; leave out to start.
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.

### `fieldwire_list_form_templates` (~163 tokens)

List form templates

Form templates of a project: id, name, version, publish state. Use the id to filter forms. GET /api/v3/projects/{project_id}/form_templates.

Input parameters:

- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `name_contains` (string): Only templates whose name contains this text.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.

### `fieldwire_list_rfis` (~248 tokens)

List RFIs

RFIs (requests for information) of a project: number, name, question, answer, status, assignee, due date. Needs the RFI module. Filter by status, assignee, text, overdue or dates. GET /api/v3/projects/{project_id}/rfis.

Input parameters:

- `assignee_user_id` (integer): Only RFIs assigned to this user id.
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `overdue` (boolean): true = only overdue RFIs.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `status` (string): Only RFIs with this status.
- `text` (string): Free-text search.
- `updated_after` (string): Only RFIs updated at or after this ISO 8601 date-time.

### `fieldwire_list_submittals` (~246 tokens)

List submittals

Submittals of a project: number, name, status, revision, key dates. Needs the submittals module. Filter by status, assignee, text, overdue or dates. GET /api/v3/projects/{project_id}/submittals.

Input parameters:

- `assignee_user_id` (integer): Only submittals assigned to this user id.
- `last_synced_at` (string): Cursor for the next page: the previous reply's next_last_synced_at, unchanged. Leave out for the first page.
- `overdue` (boolean): true = only overdue submittals.
- `per_page` (integer): Results per page, 1-200 (default 25).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `state` (string): Only active records (the usual) or only deleted ones. Sent as the Fieldwire-Filter header.
- `status` (string): Only submittals with this status.
- `text` (string): Free-text search.
- `updated_after` (string): Only submittals updated at or after this ISO 8601 date-time.

### `fieldwire_create_task` (~384 tokens)

Create task

WRITE: creates a new task in a project. It is sent once and never retried; if the reply is an error, check fieldwire_list_tasks before creating it again, or you may get a duplicate. owner_user_id and priority are required; creator_user_id defaults to the owner. Find user ids with fieldwire_list_project_users. POST /api/v3/projects/{project_id}/tasks.

Input parameters:

- `cost_value` (number): Cost of the task.
- `creator_user_id` (integer): User id recorded as creator (default: the owner).
- `due_date` (string): Due date, yyyy-mm-dd.
- `end_at` (string): End, ISO 8601 date-time with a timezone.
- `floorplan_id` (string): Plan (floorplan) id the task belongs to - see fieldwire_list_floorplans.
- `location_id` (string): Location id - see fieldwire_list_locations.
- `man_power_value` (number): Estimated man-power (hours, days or months as set in the project).
- `name` (string): Task name.
- `owner_user_id` (integer, required): User id of the task owner (required) - see fieldwire_list_project_users.
- `priority` (integer, required): Priority 1, 2 or 3 (Fieldwire's own values; required).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `start_at` (string): Start, ISO 8601 date-time with a timezone.
- `status_id` (string): Status id - see fieldwire_list_task_statuses.
- `team_id` (string): Team (category) id - see fieldwire_list_teams.
- `user_ids` (array): User ids of the assignees. On an update this REPLACES the whole assignee list.

### `fieldwire_update_task` (~368 tokens)

Update task

WRITE: changes fields of one task (only the fields you pass; user_ids replaces the whole assignee list; null clears a field that allows it). Use it to set the status, owner, assignees, priority or dates. It does not delete the task. Sent once, never retried. PATCH /api/v3/projects/{project_id}/tasks/{id}.

Input parameters:

- `cost_value`: Cost of the task; null removes it.
- `due_date` (string|null): Due date, yyyy-mm-dd; null removes the due date.
- `end_at` (string|null): End, ISO 8601 date-time with a timezone; null removes it.
- `floorplan_id`: Plan (floorplan) id; null removes the plan.
- `location_id`: Location id; null removes the location.
- `man_power_value`: Estimated man-power; null removes it.
- `name`: Task name; null removes it.
- `owner_user_id` (integer): User id of the task owner - see fieldwire_list_project_users.
- `priority` (integer): Priority 1, 2 or 3 (Fieldwire's own values).
- `project_id` (string, required): Fieldwire project id (UUID) - see fieldwire_list_projects.
- `start_at` (string|null): Start, ISO 8601 date-time with a timezone; null removes it.
- `status_id`: Status id - see fieldwire_list_task_statuses; null removes the status.
- `task_id` (string, required): Task id (UUID).
- `team_id`: Team (category) id; null removes the team.
- `user_ids`: User ids of the assignees. REPLACES the whole assignee list; null removes all assignees.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-fieldwire/fieldwire#diagnostics

## Score history

- 2026-10-17: 64
- 2026-10-16: 63
- 2026-10-15: 63
- 2026-10-14: 62
- 2026-10-13: 59
- 2026-10-12: 59

## Common questions

### What is the Fieldwire MCP by usefulapi server?

Fieldwire MCP by usefulapi is listed in the public MCP registry as io.usefulapi/fieldwire. Read Fieldwire projects, tasks, plans, forms, RFIs and submittals; create and update tasks. This page covers its hosted endpoint (https://fieldwire.usefulapi.io/mcp).

### Is the Fieldwire MCP by usefulapi server safe to use?

Fieldwire MCP by usefulapi scores 64 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Fieldwire MCP by usefulapi server expose?

Fieldwire MCP by usefulapi exposes 22 tools: fieldwire_get_account, fieldwire_list_account_users, fieldwire_list_projects, fieldwire_get_project, fieldwire_list_project_users, and 17 more. Their descriptions and schemas cost roughly 4,132 tokens of context every time the server is loaded.

### Does the Fieldwire MCP by usefulapi server require authentication?

Yes. Fieldwire MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Fieldwire MCP by usefulapi server still maintained?

Fieldwire MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://fieldwire.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/fieldwire/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-fieldwire/fieldwire.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-fieldwire/fieldwire.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-fieldwire/fieldwire
