# Gingr MCP by usefulapi (remote · gingr.usefulapi.io)

Read Gingr reservations, owners, pets, check-ins, invoices and timeclock for your pet-care business.

- Trust score: 68/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-22

## Components

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

## Channel facts

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

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

- **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**: 82/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 3248 tokens (~129/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 40/100
  - Stability observed for 12 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 25 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 26 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 Gingr MCP by usefulapi server?

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

### Cursor

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

### VS Code

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

### Codex

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

### opencode

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

### OpenClaw

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

### Hermes

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

### Netclaw

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

### Vellum

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

### Other

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

- [functional] Server version: 1.7.3 → 1.7.4

### 2026-10-21 (score 68, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional] Server version: 1.5.0 → 1.7.3

### 2026-10-19 (score 67, +1)

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

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

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

### 2026-10-15 (score 65, +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-14 (score 64, +2)

- [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.4.0 → 1.5.0

### 2026-10-12 (score 62, +1)

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

### 2026-10-11 (score 61, 0)

- [functional improvement] Stability: unverified → 0.03

## MCP tools (25)

### `gingr_list_locations` (~56 tokens)

List locations

List the locations (facilities) of this Gingr app, as id (value) + name (label). Good first call: most other tools take a location_id. Gingr: GET /api/v1/get_locations.

### `gingr_list_reservation_types` (~86 tokens)

List reservation types

List the reservation types (services such as boarding, daycare, grooming, training) with their ids. Use the ids to filter reservations or to read a type's add-on services. Gingr: GET /api/v1/reservation_types.

Input parameters:

- `active_only` (boolean): true = only active reservation types.
- `id` (integer): Only this reservation type id.

### `gingr_list_services_by_type` (~86 tokens)

List add-on services of a reservation type

List the additional services (add-ons) allowed for a reservation type, e.g. baths or nail trims on a boarding stay. Gingr: GET /api/v1/get_services_by_type.

Input parameters:

- `location_id` (integer): Location id (from gingr_list_locations).
- `type_id` (integer, required): Reservation type id (from gingr_list_reservation_types).

### `gingr_list_reference` (~173 tokens)

List reference data

List one kind of reference data of this Gingr app: species, breeds, temperaments, vets (veterinarians with details), retail_items (retail items for sale) or immunization_types (of one species; needs species_id). Paged. Gingr: GET /api/v1/get_species | get_breeds | get_temperaments | get_vets | get_all_retail_items | get_immunization_types.

Input parameters:

- `kind` (string, required): Which list to read.
- `limit` (integer): Records per page (1-200, default 50).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `species_id` (integer): Species id (needed for kind=immunization_types).

### `gingr_list_reservations` (~163 tokens)

List reservations in a date range

List all reservations (boarding, daycare, grooming, training…) between two dates, at most 30 days apart (Gingr's limit). Paged: total, next_offset, items. Gingr: POST /api/v1/reservations (checked_in=false).

Input parameters:

- `end_date` (string, required): Last day (YYYY-MM-DD), at most 30 days after start_date.
- `limit` (integer): Records per page (1-200, default 50).
- `location_id` (integer): Location id (from gingr_list_locations).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `start_date` (string, required): First day (YYYY-MM-DD).

### `gingr_list_checked_in` (~105 tokens)

List pets checked in now

List the reservations that are checked in right now (the pets currently on site). Paged. Gingr: POST /api/v1/reservations (checked_in=true).

Input parameters:

- `limit` (integer): Records per page (1-200, default 50).
- `location_id` (integer): Location id (from gingr_list_locations).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.

### `gingr_get_daily_summary` (~69 tokens)

Get the day's check-in / check-out summary

Get the summary of reservations for one date: number of check-ins, check-outs and overnights (the widget at the top of the Gingr dashboard). Gingr: GET /api/v1/reservation_widget_data.

Input parameters:

- `date` (string, required): The date (YYYY-MM-DD).

### `gingr_get_whiteboard` (~143 tokens)

Get today's arrivals and departures (whiteboard)

Get the pets checking in and checking out today at a location, by reservation type, with owner/pet names, times, run and status (Gingr's Digital Whiteboard). Gingr: GET /api/v1/back_of_house.

Input parameters:

- `full_day` (boolean): true (default) = every reservation checking in/out today; false = use mins_future.
- `location_id` (integer, required): Location id (from gingr_list_locations).
- `mins_future` (integer): With full_day=false: only the next/last this many minutes.
- `type_ids` (array, required): Reservation type ids to include (from gingr_list_reservation_types).

### `gingr_list_owner_reservations` (~241 tokens)

List an owner's reservations

List the reservations of one owner (customer), optionally only pending requests, current, future, past or wait-listed ones, by dates, types or pets. Only the location the API user is logged into is included (Gingr). Gingr: POST /api/v1/reservations_by_owner.

Input parameters:

- `animal_ids` (array): Only these animal (pet) ids.
- `cancelled_only` (boolean): true = only cancelled reservations.
- `completed_only` (boolean): true = only completed reservations.
- `confirmed_only` (boolean): true = only confirmed reservations.
- `from_date` (string): Only reservations from this date (YYYY-MM-DD).
- `limit` (integer): Return at most this many reservations (1-200, default 50).
- `owner_id` (integer, required): Owner id (from gingr_list_owners / gingr_get_owner).
- `reservation_type_ids` (array): Only these reservation type ids (from gingr_list_reservation_types).
- `restrict_to` (string): Only reservations in this state.
- `to_date` (string): Only reservations up to this date (YYYY-MM-DD).

### `gingr_list_animal_reservations` (~239 tokens)

List a pet's reservations

List the reservations of one animal (pet), optionally only pending requests, current, future, past or wait-listed ones, by dates or types. Only the location the API user is logged into is included (Gingr). Gingr: POST /api/v1/reservations_by_animal.

Input parameters:

- `animal_id` (integer, required): Animal (pet) id (from gingr_list_animals).
- `animal_ids` (array): Only these animal (pet) ids.
- `cancelled_only` (boolean): true = only cancelled reservations.
- `completed_only` (boolean): true = only completed reservations.
- `confirmed_only` (boolean): true = only confirmed reservations.
- `from_date` (string): Only reservations from this date (YYYY-MM-DD).
- `limit` (integer): Return at most this many reservations (1-200, default 50).
- `reservation_type_ids` (array): Only these reservation type ids (from gingr_list_reservation_types).
- `restrict_to` (string): Only reservations in this state.
- `to_date` (string): Only reservations up to this date (YYYY-MM-DD).

### `gingr_list_cancelled_reservations` (~142 tokens)

List recently cancelled reservations

List the reservations that were cancelled between two dates (at most 31 days apart). Paged. Gingr: POST /api/v1/recently_cancelled_reservations.

Input parameters:

- `end_date` (string, required): Last day of cancellation (YYYY-MM-DD).
- `limit` (integer): Records per page (1-200, default 50).
- `location_id` (integer): Location id (from gingr_list_locations).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `start_date` (string, required): First day of cancellation (YYYY-MM-DD).

### `gingr_get_reservation_estimate` (~50 tokens)

Get a reservation's cost estimate

Get the estimated cost of an existing (future) reservation. Gingr: GET /api/v1/existing_reservation_estimate.

Input parameters:

- `reservation_id` (integer, required): Reservation id.

### `gingr_list_owners` (~204 tokens)

List owners (customers)

List owners (pet parents / customers) with contact details, balance and reservation counts, optionally filtered by exact first/last name, email, cell phone, ZIP or home location. Paged. Gingr: GET /api/v1/owners (filters as params[<field>]). Passwords and payment-card references are removed.

Input parameters:

- `cell_phone` (string): Exact cell phone as stored in Gingr, e.g. (555) 555-5555.
- `email` (string): Exact email address.
- `first_name` (string): Exact first name.
- `home_location` (integer): Home location id.
- `last_name` (string): Exact last name.
- `limit` (integer): Records per page (1-200, default 50).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `zip` (string): Exact ZIP / postal code.

### `gingr_get_owner` (~123 tokens)

Get an owner

Get one owner (customer) record by exactly one of: owner id, one of their pets' id, one of their reservations' id, cell phone or email. Gingr: GET /api/v1/owner. Passwords and payment-card references are removed.

Input parameters:

- `animal_id` (integer): Find the owner of this animal (pet).
- `email` (string): Email address.
- `owner_id` (integer): Owner id.
- `phone` (string): Cell phone number.
- `reservation_id` (integer): Find the owner of this reservation.

### `gingr_list_new_modified_owners` (~137 tokens)

List new or changed owners

List the owners (customers) created or modified between two dates (at most 366 days apart). Paged. Gingr: POST /api/v1/new_modified_owners.

Input parameters:

- `end_date` (string, required): Last day (YYYY-MM-DD).
- `limit` (integer): Records per page (1-200, default 50).
- `location_id` (integer): Only owners whose home location is this location id.
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `start_date` (string, required): First day (YYYY-MM-DD).

### `gingr_list_animals` (~166 tokens)

List animals (pets)

List animals (pets) with species, breed, birthday, weight, owner and notes, optionally filtered by owner, exact name, species or breed. Paged. Gingr: GET /api/v1/animals (filters as params[<field>]).

Input parameters:

- `breed_id` (integer): Breed id (gingr_list_reference kind=breeds).
- `first_name` (string): Exact pet name.
- `limit` (integer): Records per page (1-200, default 50).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `owner_id` (integer): Only this owner's animals.
- `species_id` (integer): Species id (gingr_list_reference kind=species).

### `gingr_get_animal_immunizations` (~59 tokens)

Get a pet's immunization records

Get the immunization (vaccination) records of one animal, with expiration dates. Gingr: GET /api/v1/get_animal_immunizations.

Input parameters:

- `animal_id` (integer, required): Animal (pet) id.

### `gingr_get_animal_feeding` (~53 tokens)

Get a pet's feeding instructions

Get the feeding information of one animal (food, amounts, schedule). Gingr: GET /api/v1/get_feeding_info.

Input parameters:

- `animal_id` (integer, required): Animal (pet) id.

### `gingr_get_animal_medications` (~54 tokens)

Get a pet's medications

Get the medication information of one animal (medications, doses, schedule). Gingr: GET /api/v1/get_medication_info.

Input parameters:

- `animal_id` (integer, required): Animal (pet) id.

### `gingr_list_invoices` (~197 tokens)

List invoices or estimates

List invoices (complete=true) or estimates (complete=false, Gingr's default) created on or after 2019-08-01, optionally closed only and by date range. Paged by Gingr: per_page + start (the 1-based number of the first result; the next page starts at start + per_page). Gingr: GET /api/v1/list_invoices.

Input parameters:

- `closed_only` (boolean): true = only closed invoices.
- `complete` (boolean): true = invoices; false (default) = estimates.
- `from_date` (string): From date (YYYY-MM-DD).
- `per_page` (integer): Results per page (1-100, default 25).
- `start` (integer): 1-based number of the first result (default 1; page 2 of 25 = 26).
- `to_date` (string): To date (YYYY-MM-DD).

### `gingr_get_transaction` (~56 tokens)

Get a POS transaction

Get one point-of-sale transaction with its items and payment details (card numbers, processor references and auth codes are removed). Gingr: POST /api/v1/transaction.

Input parameters:

- `transaction_id` (integer, required): POS transaction id.

### `gingr_list_subscriptions` (~175 tokens)

List subscriptions (packages)

List recurring subscriptions (membership packages), optionally of one owner, location or package, by billing day, including cancelled ones if asked. Paged by Gingr (limit + offset). Gingr: GET /api/v1/get_subscriptions.

Input parameters:

- `bill_day_of_month` (integer): Only subscriptions renewing on this day of the month.
- `include_deleted` (boolean): true = include cancelled/deleted subscriptions.
- `limit` (integer): Records per page (1-100, default 50).
- `location_id` (integer): Location id (from gingr_list_locations).
- `offset` (integer): Skip this many records (paging; default 0). Use next_offset from the previous page.
- `owner_id` (integer): Only this owner's subscriptions.
- `package_id` (integer): Only this package.

### `gingr_get_subscription` (~41 tokens)

Get a subscription

Get one subscription (membership package) by id. Gingr: GET /api/v1/get_subscription.

Input parameters:

- `subscription_id` (integer, required): Subscription id.

### `gingr_get_timeclock_report` (~143 tokens)

Get the staff timeclock report

Get staff timeclock records (clock-ins/outs, hours) at a location between two dates (at most 31 days apart). Gingr: GET /api/v1/timeclock_report.

Input parameters:

- `end_date` (string, required): Last day (YYYY-MM-DD).
- `include_clocked_in` (boolean): true = include staff still clocked in.
- `include_deleted` (boolean): true = include deleted records.
- `location_id` (integer, required): Location id (from gingr_list_locations).
- `start_date` (string, required): First day (YYYY-MM-DD).
- `user_ids` (array): Only these Gingr user (staff) ids.

### `gingr_list_report_card_files` (~79 tokens)

List recent report card files

List recently uploaded report card files (photos and videos shared with pet parents), newest first. Gingr: GET /api/v1/report_card_files.

Input parameters:

- `limit` (integer): Return at most this many files (1-200, default 50).
- `location_id` (integer): Location id (from gingr_list_locations).

## Diagnostics

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

## Score history

- 2026-10-22: 68
- 2026-10-21: 68
- 2026-10-20: 67
- 2026-10-19: 67
- 2026-10-18: 66
- 2026-10-17: 66
- 2026-10-16: 65
- 2026-10-15: 65
- 2026-10-14: 64
- 2026-10-13: 62
- 2026-10-12: 62
- 2026-10-11: 61
- 2026-10-10: 61

## Common questions

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

Gingr MCP by usefulapi is listed in the public MCP registry as io.usefulapi/gingr. Read Gingr reservations, owners, pets, check-ins, invoices and timeclock for your pet-care business. This page covers its hosted endpoint (https://gingr.usefulapi.io/mcp).

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

Gingr MCP by usefulapi scores 68 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 Gingr MCP by usefulapi server expose?

Gingr MCP by usefulapi exposes 25 tools: gingr_list_locations, gingr_list_reservation_types, gingr_list_services_by_type, gingr_list_reference, gingr_list_reservations, and 20 more. Their descriptions and schemas cost roughly 3,040 tokens of context every time the server is loaded.

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

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

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