# WaiverFile MCP by usefulapi (remote · waiverfile.usefulapi.io)

Read WaiverFile waivers, events, forms and SMS opt-ins; create and update events, invite managers.

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

## Components

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

## Channel facts

- Endpoint: `https://waiverfile.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.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-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**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2839 tokens (~167/item across 17 items; 17 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.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 18 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 WaiverFile MCP by usefulapi server?

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

### Cursor

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

### VS Code

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

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

### Vellum

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

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-waiverfile": {
      "type": "http",
      "url": "https://waiverfile.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 62, 0)

- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.0.3 → 1.1.0
- [functional] Server version: 1.0.0 → 1.0.3

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

First indexed and scored.

## MCP tools (17)

### `waiverfile_get_site` (~47 tokens)

Get site details

Details of the WaiverFile site (WaiverSite) this API key belongs to: name, settings and plan information as WaiverFile reports them. GET /GetSiteDetails.

### `waiverfile_list_waiver_forms` (~100 tokens)

List waiver forms

List the waiver forms of the site (name, id, which fields they collect: email, address, phone, date of birth, minimum age, signature). Active forms by default; set include_deleted for all forms including deleted ones. Use the form ids when creating or updating events. GET /GetActiveWaiverForms or /GetAllWaiverForms.

Input parameters:

- `include_deleted` (boolean): Also return deleted forms (default false).

### `waiverfile_list_events` (~181 tokens)

List events by date range

List waiver events (a class, tour, party or session that collects waivers) whose date falls in a range, optionally only one event category. Each event has an id, name, start/end, headcount and spots remaining. Dates are UTC. GET /GetEventsByDateRange or /GetEventsByCategory.

Input parameters:

- `category_id` (string): Only events of this event category id (from waiverfile_list_event_categories).
- `end` (string, required): End of the range: yyyy-mm-dd means 00:00 UTC of that day, so pass the next day to include the whole day.
- `start` (string, required): Start of the range: yyyy-mm-dd (00:00 UTC) or an ISO 8601 date-time with timezone, e.g. 2026-10-01T00:00:00Z.

### `waiverfile_list_upcoming_events` (~120 tokens)

List upcoming events

List upcoming waiver events between two dates (UTC), for example the next 7 days. GET /GetUpcomingEvents.

Input parameters:

- `end` (string, required): End of the range: yyyy-mm-dd means 00:00 UTC of that day, so pass the next day to include the whole day.
- `start` (string, required): Start of the range: yyyy-mm-dd (00:00 UTC) or an ISO 8601 date-time with timezone, e.g. 2026-10-01T00:00:00Z.

### `waiverfile_list_event_categories` (~60 tokens)

List event categories

List the event categories of the site (id and name). Use the ids to filter events or to put a new event in a category. GET /GetEventCategories.

Input parameters:

- `include_disabled` (boolean): Also return disabled categories (default false).

### `waiverfile_get_event_waivers` (~68 tokens)

Get waivers for an event

The waivers collected for one event: who signed, when, and the participants. Personal data of signers. GET /GetWaiversForEvent.

Input parameters:

- `event_id` (string, required): WaiverFile event id (waiverEventID) from waiverfile_list_events.

### `waiverfile_search_waivers` (~60 tokens)

Search waivers

Search signed waivers by free-text terms (a signer's name, email or phone). Personal data of signers. GET /SearchWaivers.

Input parameters:

- `terms` (string, required): Search terms, for example a name or an email address.

### `waiverfile_get_waiver` (~110 tokens)

Get a waiver

One signed waiver by id: signer, date signed, participants, collected form data, event and the agreement text. Set lite for only the collected form data (no agreement text or event info). Signature and image bytes are never returned. GET /GetWaiver or /GetWaiverLite.

Input parameters:

- `lite` (boolean): Only the collected form data, without agreement text or event info (default false).
- `waiver_id` (string, required): WaiverFile waiver id (waiverID).

### `waiverfile_find_waivers_by_reference` (~142 tokens)

Find waivers by reference id

Find waivers by the reference ids an outside booking or reservation system attached to them (referenceID1, 2, 3). Give at least one of reference_id_1/2/3, or reference_id_any to match all three fields. GET /GetWaiversByReferenceID.

Input parameters:

- `reference_id_1` (string): Match the Reference ID 1 field.
- `reference_id_2` (string): Match the Reference ID 2 field.
- `reference_id_3` (string): Match the Reference ID 3 field.
- `reference_id_any` (string): Match any of the three reference id fields.

### `waiverfile_list_waivers` (~268 tokens)

List waivers by date range

A page of the waivers signed in a date range. Set lite for only the collected form data (smaller). For a flat export with custom form columns use waiverfile_export_waiver_data; for totals use waiverfile_count_waivers. Personal data of signers. GET /GetAllWaiversByDateRange or /GetAllWaiversByDateRangeLite.

Input parameters:

- `end` (string, required): End of the range: yyyy-mm-dd means 00:00 UTC of that day, so pass the next day to include the whole day.
- `lite` (boolean): Only the collected form data, without agreement text or event info (default false).
- `page_index` (integer): Page index (default 0). WaiverFile does not state whether the first page is 0 or 1; if page 0 looks like it skips data or is empty while the count is not, try 1.
- `page_size` (integer): Results per page, 10-200 (default 25).
- `start` (string, required): Start of the range: yyyy-mm-dd (00:00 UTC) or an ISO 8601 date-time with timezone, e.g. 2026-10-01T00:00:00Z.

### `waiverfile_export_waiver_data` (~288 tokens)

Export waiver data

A page of flat waiver rows for a date range (the data behind the WaiverFile export): standard fields, optionally every custom form field as a column, and participants either as one comma-separated column or one row each. Personal data of signers. GET /GetWaiverData.

Input parameters:

- `consolidate_participants` (boolean): true (default) = one row per waiver with participant names in one column; false = full participant information, one row per participant.
- `end` (string, required): End of the range: yyyy-mm-dd means 00:00 UTC of that day, so pass the next day to include the whole day.
- `include_custom_columns` (boolean): Include the custom form fields of all waiver forms (default false: standard fields only).
- `page_index` (integer): Page index (default 0). WaiverFile does not state whether the first page is 0 or 1; if page 0 looks like it skips data or is empty while the count is not, try 1.
- `page_size` (integer): Results per page, 10-200 (default 25).
- `start` (string, required): Start of the range: yyyy-mm-dd (00:00 UTC) or an ISO 8601 date-time with timezone, e.g. 2026-10-01T00:00:00Z.

### `waiverfile_count_waivers` (~227 tokens)

Count waivers in a date range

How many waivers a date range holds: record_count (GetWaiverDataCount, the rows waiverfile_export_waiver_data pages through) and waiver_count (GetAllWaiversByDateRangePageCount, which WaiverFile documents as the number of waivers in the range, used to work out the pages of waiverfile_list_waivers). pages_at_page_size is waiver_count divided by page_size (default 25), rounded up. GET /GetWaiverDataCount and /GetAllWaiversByDateRangePageCount.

Input parameters:

- `end` (string, required): End of the range: yyyy-mm-dd means 00:00 UTC of that day, so pass the next day to include the whole day.
- `page_size` (integer): Results per page, 10-200 (default 25).
- `start` (string, required): Start of the range: yyyy-mm-dd (00:00 UTC) or an ISO 8601 date-time with timezone, e.g. 2026-10-01T00:00:00Z.

### `waiverfile_list_sms_subscribers` (~170 tokens)

List SMS subscribers

SMS marketing subscribers (phone numbers) that opted in during a date range, or with opted_out set the ones that opted out. Dates are UTC. Personal data. GET /GetSubscribersByDate or /GetOptedOutSubscribersByOptOutDate.

Input parameters:

- `end` (string, required): End of the range: yyyy-mm-dd means 00:00 UTC of that day, so pass the next day to include the whole day.
- `opted_out` (boolean): List subscribers that opted OUT in the range instead of opted in (default false).
- `start` (string, required): Start of the range: yyyy-mm-dd (00:00 UTC) or an ISO 8601 date-time with timezone, e.g. 2026-10-01T00:00:00Z.

### `waiverfile_create_event` (~243 tokens)

Create an event

Create a waiver event (a class, tour or session that collects waivers) with a name and a start/end time (UTC). Optionally an all-day flag, category, location, signing cut-off, participant limit and which waiver forms to attach (default: WaiverFile's own choice, see list_waiver_forms). Not idempotent: calling twice creates two events. Sends no email. POST /InsertEvent.

Input parameters:

- `all_day` (boolean): All-day event (no time of day).
- `category_id` (string): Event category id (waiverfile_list_event_categories).
- `end` (string, required): Event end (UTC), not before the start.
- `location` (string): Event location.
- `max_participants` (integer): Participant limit.
- `name` (string, required): Event name.
- `signing_cutoff` (string): Last moment a waiver can be signed for this event.
- `start` (string, required): Event start (UTC): yyyy-mm-dd or ISO 8601 date-time with timezone.
- `waiver_form_ids` (array): Waiver form ids to attach (waiverfile_list_waiver_forms).

### `waiverfile_update_event` (~213 tokens)

Update an event

Update an existing event. WaiverFile replaces the whole event, so name, start, end and all_day are required and anything left out is reset: category_id empty = no category, waiver_form_ids empty = ALL active forms are attached. Read the event first (waiverfile_list_events) and send its current values for the fields you do not change. Same input twice gives the same result. POST /UpdateEvent.

Input parameters:

- `all_day` (boolean, required): true for an all-day event (no time of day).
- `category_id` (string): Event category id; omit for no category.
- `end` (string, required): Event end (UTC), not before the start.
- `event_id` (string, required): Event id (waiverEventID) from waiverfile_list_events.
- `name` (string, required): Event name.
- `start` (string, required): Event start (UTC).
- `waiver_form_ids` (array): Waiver form ids for this event; omit or empty to attach all active forms.

### `waiverfile_invite_event_managers` (~224 tokens)

Invite event managers

SENDS EMAIL: invites people (by email address) to manage one event; they can log in to WaiverFile and see its signers and participants, with the fields set in the account settings. WaiverFile emails each address, with your optional message in the body (skip_email_if_account_exists suppresses the email for people who already have an account). Cannot be undone by this server except with the vendor's own remove-managers action. Requires confirm=true after the user approved it. POST /InviteEventManagers.

Input parameters:

- `confirm` (boolean): Must be true: the user approved emailing these addresses and giving them access to this event's signers. Without it nothing is sent.
- `email_addresses` (array, required): Addresses to invite (1-20).
- `event_id` (string, required): Event id (waiverEventID).
- `message` (string): Optional message added to the invitation email.
- `skip_email_if_account_exists` (boolean): Do not send the email to people who already have a WaiverFile account (default false).

### `waiverfile_create_event_category` (~67 tokens)

Create an event category

Create an event category (a label to group events). Not idempotent: calling twice with the same name creates two categories. POST /InsertEventCategory.

Input parameters:

- `active` (boolean): Whether the category is active (default true).
- `name` (string, required): Category name.

## Diagnostics

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

## Score history

- 2026-10-25: 62
- 2026-10-24: 62

## Common questions

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

WaiverFile MCP by usefulapi is listed in the public MCP registry as io.usefulapi/waiverfile. Read WaiverFile waivers, events, forms and SMS opt-ins; create and update events, invite managers. This page covers its hosted endpoint (https://waiverfile.usefulapi.io/mcp).

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

WaiverFile MCP by usefulapi scores 62 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 WaiverFile MCP by usefulapi server expose?

WaiverFile MCP by usefulapi exposes 17 tools: waiverfile_get_site, waiverfile_list_waiver_forms, waiverfile_list_events, waiverfile_list_upcoming_events, waiverfile_list_event_categories, and 12 more. Their descriptions and schemas cost roughly 2,588 tokens of context every time the server is loaded.

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

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

WaiverFile 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://waiverfile.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/waiverfile/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-waiverfile/waiverfile.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-waiverfile/waiverfile.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-waiverfile/waiverfile
