# GoCanvas MCP by usefulapi (remote · gocanvas.usefulapi.io)

Read GoCanvas forms, submissions, users, dispatches and reference data; create dispatches.

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

## Components

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

## Channel facts

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

## 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-25.

- **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**: 84/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 2532 tokens (~110/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% 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 23 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 24 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 GoCanvas MCP by usefulapi server?

GoCanvas MCP by usefulapi is a hosted endpoint at https://gocanvas.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-gocanvas 'https://gocanvas.usefulapi.io/mcp'
```

### Cursor

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

### VS Code

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

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

### Vellum

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

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-gocanvas": {
      "type": "http",
      "url": "https://gocanvas.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-25 (score 63, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-24 (score 63)

First indexed and scored.

## MCP tools (23)

### `gocanvas_get_me` (~43 tokens)

Get the connected GoCanvas user

The user who owns the connected OAuth application: id, login, company id and name, default department and role. Use it to learn the default department id.

### `gocanvas_list_forms` (~113 tokens)

List GoCanvas forms

Forms (mobile form definitions) the connected user can see: id, name, status, version, department. Paged, 100 per page. Use gocanvas_get_form for a form's fields (entries).

Input parameters:

- `assigned` (boolean): true = only the user's assigned, active forms (only has an effect for users who can manage forms).
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_get_form` (~100 tokens)

Get a GoCanvas form definition

One form definition, including its screens and entries (field ids and labels). Use format 'flat' for the simplest list of fields (what you need to read submissions or create a dispatch), 'nested' (default) for the full structure, 'metadata' or 'minimal' for less.

Input parameters:

- `form_id` (integer, required): The form id (from gocanvas_list_forms).
- `format` (string): Definition format (default nested).

### `gocanvas_list_form_reports` (~79 tokens)

List report definitions of a GoCanvas form

The report (PDF) definitions attached to a form: id, name, format, whether emailed by default. Paged.

Input parameters:

- `form_id` (integer, required): The form id.
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_list_submissions` (~280 tokens)

List GoCanvas submissions

Completed forms (submissions): id, form, number, created time, department, user, status. At least one of form_id, user_id or user_email is required (user_id and user_email cannot be combined). Default status is completed. Dates filter created_at. Paged, 100 per page. Use gocanvas_get_submission for the answers.

Input parameters:

- `custom_status` (string): Custom status label; required for status custom.
- `department_id` (integer): Department id (default: the user's default department).
- `end_date` (string): Created at or before (ISO-8601).
- `form_id` (integer): Form id; matches every version of the form.
- `hand_off` (string): Workflow handoff state name; required for status handed-off.
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.
- `start_date` (string): Created at or after (ISO-8601).
- `status` (string): Status filter (default completed). handed-off needs hand_off; custom needs custom_status.
- `user_email` (string): Email (login) of the user who created the submission; not with user_id.
- `user_id` (integer): The user who created the submission.

### `gocanvas_get_submission` (~87 tokens)

Get a GoCanvas submission

One submission with all its responses (entry id, label, type, value). Accepts the numeric submission id or the client GUID.

Input parameters:

- `submission_id` (string, required): Numeric submission id (e.g. 691911) or client GUID (e.g. 02ED5FB2-9C61-4F18-AB17-543547DF899B).

### `gocanvas_list_submission_revisions` (~74 tokens)

List revisions of a GoCanvas submission

The revision history of a submission (who changed it and when). Paged.

Input parameters:

- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.
- `submission_id` (string, required): Numeric submission id or client GUID.

### `gocanvas_list_users` (~84 tokens)

List GoCanvas users

Users of the company: id, name, email, enabled. Paged, 100 per page.

Input parameters:

- `enabled` (boolean): true = only enabled users, false = only disabled (default: both).
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_get_user` (~46 tokens)

Get a GoCanvas user

One user by id: name, login, contact data, default department and role.

Input parameters:

- `user_id` (integer, required): The user id (from gocanvas_list_users).

### `gocanvas_list_departments` (~34 tokens)

List GoCanvas departments

Departments of the company: id, name, description. The pseudo department -1 'All' is included.

### `gocanvas_list_department_users` (~41 tokens)

List users of a GoCanvas department

The users in one department with their department role.

Input parameters:

- `department_id` (integer, required): The department id (from gocanvas_list_departments).

### `gocanvas_list_dispatches` (~217 tokens)

List GoCanvas dispatches

Dispatches (jobs sent to field workers): id, form, assignee, status, schedule. At least one of user_id, department_id or form_id is required. Dates are ISO-8601. Paged.

Input parameters:

- `department_id` (integer): The department.
- `end_date` (string): Created at or before.
- `form_id` (integer): The form.
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.
- `project_id` (integer): Only dispatches assigned to this project.
- `scheduled_end_date` (string): Scheduled end at or before.
- `scheduled_start_date` (string): Scheduled at or after.
- `start_date` (string): Created at or after.
- `status` (string): unassigned, assigned, received or ready (ready ignores the date filters and is scoped to the connected user).
- `user_id` (integer): The user the dispatch is assigned to.

### `gocanvas_get_dispatch` (~44 tokens)

Get a GoCanvas dispatch

One dispatch by id with its pre-filled responses, schedule and status.

Input parameters:

- `dispatch_id` (integer, required): The dispatch id (from gocanvas_list_dispatches).

### `gocanvas_list_customers` (~65 tokens)

List GoCanvas customers

Customers (contacts of the Project Management view): individuals or businesses, optionally tied to a site. Paged.

Input parameters:

- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_list_projects` (~52 tokens)

List GoCanvas projects

Projects of the Project Management view. Paged.

Input parameters:

- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_list_sites` (~56 tokens)

List GoCanvas sites

Sites (job locations) of the Project Management view. Paged.

Input parameters:

- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_list_reference_data` (~99 tokens)

List GoCanvas reference data sets

Reference data (lookup tables used by forms): id, name, columns, version. Without department_id the user's default department is used.

Input parameters:

- `assigned` (boolean): true = only reference data used by forms assigned to the user.
- `department_id` (integer): Department id.
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_get_reference_data` (~41 tokens)

Get a GoCanvas reference data set

One reference data set with its rows.

Input parameters:

- `reference_data_id` (integer, required): The reference data id (from gocanvas_list_reference_data).

### `gocanvas_list_groups` (~59 tokens)

List GoCanvas groups

User groups: id, name, and the forms and users assigned. Paged.

Input parameters:

- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_list_workflows` (~76 tokens)

List GoCanvas workflows

Workflows (handoff chains between users) the connected user takes part in, with their handoff states and the count of tasks available to claim. Paged.

Input parameters:

- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.

### `gocanvas_list_locations` (~184 tokens)

List GoCanvas tracker locations

GPS location events of field users (needs the tracker feature). start_date and end_date are required and may span at most 7 days. Omit user_id for all users of the company. Paged.

Input parameters:

- `end_date` (string, required): End of the window (ISO-8601; a bare date means 23:59:59). At most 7 days after start_date.
- `page` (integer): Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.
- `start_date` (string, required): Start of the window (ISO-8601; a bare date means 00:00:00).
- `use_created_at` (boolean): true = filter by upload time (created_at) instead of recorded_at.
- `user_id` (integer): Limit to one user.

### `gocanvas_create_dispatch` (~341 tokens)

Create a GoCanvas dispatch

WRITE: creates a dispatch, a job that appears on the assignee's mobile device (immediate_dispatch is sent at once, with a push notification when send_notification is true; scheduled_dispatch needs scheduled_at and scheduled_end). Responses pre-fill the assignee's form (entry ids from gocanvas_get_form). Without assignee_id the dispatch stays unassigned. Not idempotent: calling twice creates two dispatches. Media fields cannot be pre-filled.

Input parameters:

- `assignee_id` (integer): The user who gets the dispatch (from gocanvas_list_users); omit to leave it unassigned.
- `department_id` (integer): Department; default is the user's default department.
- `description` (string): Description shown on the assignee's device.
- `dispatch_type` (string, required): immediate_dispatch is sent now; scheduled_dispatch at scheduled_at.
- `form_id` (integer, required): The form to dispatch (from gocanvas_list_forms).
- `name` (string): Short name shown on the dispatch calendar.
- `reminder_interval` (integer): Scheduled dispatches: minutes before the start to send a reminder.
- `responses` (array): Pre-filled answers.
- `scheduled_at` (string): Scheduled dispatches: start, in the format MM/DD/YYYY h:mm:ss AM, e.g. 12/1/2024 8:00:00 AM.
- `scheduled_end` (string): Scheduled dispatches: end, same format.
- `send_calendar_invite` (boolean): Scheduled dispatches: send a calendar invite.
- `send_notification` (boolean): Immediate dispatches: send a push notification to the mobile app.

### `gocanvas_mark_dispatch_received` (~58 tokens)

Mark a GoCanvas dispatch as received

WRITE: acknowledges a dispatch (status becomes received). Only works for a dispatch in the assigned state that is assigned to the connected user; repeating it is refused by GoCanvas.

Input parameters:

- `dispatch_id` (integer, required): The dispatch id.

## Diagnostics

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

## Score history

- 2026-10-25: 63
- 2026-10-24: 63

## Common questions

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

GoCanvas MCP by usefulapi is listed in the public MCP registry as io.usefulapi/gocanvas. Read GoCanvas forms, submissions, users, dispatches and reference data; create dispatches. This page covers its hosted endpoint (https://gocanvas.usefulapi.io/mcp).

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

GoCanvas MCP by usefulapi scores 63 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 GoCanvas MCP by usefulapi server expose?

GoCanvas MCP by usefulapi exposes 23 tools: gocanvas_get_me, gocanvas_list_forms, gocanvas_get_form, gocanvas_list_form_reports, gocanvas_list_submissions, and 18 more. Their descriptions and schemas cost roughly 2,273 tokens of context every time the server is loaded.

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

Yes. GoCanvas 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 GoCanvas MCP by usefulapi server still maintained?

GoCanvas MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 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://gocanvas.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/gocanvas/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-gocanvas/gocanvas.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-gocanvas/gocanvas.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-gocanvas/gocanvas
