Gingr MCP by usefulapi
Read Gingr reservations, owners, pets, check-ins, invoices and timeclock for your pet-care business.
Should I use this
Quality & Safety
Findings (1)
- LOWin gingr_list_cancelled_reservations
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"gingr": {
"url": "https://gingr.usefulapi.io/mcp"
}
}
}Remote endpoints
https://gingr.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (25)
π’gingr_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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_reservation_types(id, active_only)
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 Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only this reservation type id."
},
"active_only": {
"description": "true = only active reservation types.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_services_by_type(type_id, location_id)
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 Schema
{
"type": "object",
"properties": {
"type_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Reservation type id (from gingr_list_reservation_types)."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
}
},
"required": [
"type_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_reference(kind, species_id, offset, limit)
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 Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"species",
"breeds",
"temperaments",
"vets",
"retail_items",
"immunization_types"
],
"description": "Which list to read."
},
"species_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Species id (needed for kind=immunization_types)."
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"kind"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_reservations(start_date, end_date, location_id, offset, limit)
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 Schema
{
"type": "object",
"properties": {
"start_date": {
"type": "string",
"description": "First day (YYYY-MM-DD)."
},
"end_date": {
"type": "string",
"description": "Last day (YYYY-MM-DD), at most 30 days after start_date."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_checked_in(location_id, offset, limit)
List the reservations that are checked in right now (the pets currently on site). Paged. Gingr: POST /api/v1/reservations (checked_in=true).
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_daily_summary(date)
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 Schema
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "The date (YYYY-MM-DD)."
}
},
"required": [
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_whiteboard(location_id, type_ids, full_day, mins_future)
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 Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"type_ids": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "Reservation type ids to include (from gingr_list_reservation_types)."
},
"full_day": {
"description": "true (default) = every reservation checking in/out today; false = use mins_future.",
"type": "boolean"
},
"mins_future": {
"description": "With full_day=false: only the next/last this many minutes.",
"type": "integer",
"minimum": 1,
"maximum": 1440
}
},
"required": [
"location_id",
"type_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_owner_reservations(owner_id, restrict_to, from_date, to_date, reservation_type_ids, ...)
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 Schema
{
"type": "object",
"properties": {
"owner_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Owner id (from gingr_list_owners / gingr_get_owner)."
},
"restrict_to": {
"description": "Only reservations in this state.",
"type": "string",
"enum": [
"pending_requests",
"currently_checked_in",
"future",
"past",
"wait_listed"
]
},
"from_date": {
"description": "Only reservations from this date (YYYY-MM-DD).",
"type": "string"
},
"to_date": {
"description": "Only reservations up to this date (YYYY-MM-DD).",
"type": "string"
},
"reservation_type_ids": {
"description": "Only these reservation type ids (from gingr_list_reservation_types).",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"animal_ids": {
"description": "Only these animal (pet) ids.",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"cancelled_only": {
"description": "true = only cancelled reservations.",
"type": "boolean"
},
"confirmed_only": {
"description": "true = only confirmed reservations.",
"type": "boolean"
},
"completed_only": {
"description": "true = only completed reservations.",
"type": "boolean"
},
"limit": {
"description": "Return at most this many reservations (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"owner_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_animal_reservations(animal_id, restrict_to, from_date, to_date, reservation_type_ids, ...)
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 Schema
{
"type": "object",
"properties": {
"animal_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Animal (pet) id (from gingr_list_animals)."
},
"restrict_to": {
"description": "Only reservations in this state.",
"type": "string",
"enum": [
"pending_requests",
"currently_checked_in",
"future",
"past",
"wait_listed"
]
},
"from_date": {
"description": "Only reservations from this date (YYYY-MM-DD).",
"type": "string"
},
"to_date": {
"description": "Only reservations up to this date (YYYY-MM-DD).",
"type": "string"
},
"reservation_type_ids": {
"description": "Only these reservation type ids (from gingr_list_reservation_types).",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"animal_ids": {
"description": "Only these animal (pet) ids.",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"cancelled_only": {
"description": "true = only cancelled reservations.",
"type": "boolean"
},
"confirmed_only": {
"description": "true = only confirmed reservations.",
"type": "boolean"
},
"completed_only": {
"description": "true = only completed reservations.",
"type": "boolean"
},
"limit": {
"description": "Return at most this many reservations (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"animal_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_cancelled_reservations(start_date, end_date, location_id, offset, limit)
List the reservations that were cancelled between two dates (at most 31 days apart). Paged. Gingr: POST /api/v1/recently_cancelled_reservations.
Input Schema
{
"type": "object",
"properties": {
"start_date": {
"type": "string",
"description": "First day of cancellation (YYYY-MM-DD)."
},
"end_date": {
"type": "string",
"description": "Last day of cancellation (YYYY-MM-DD)."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_reservation_estimate(reservation_id)
Get the estimated cost of an existing (future) reservation. Gingr: GET /api/v1/existing_reservation_estimate.
Input Schema
{
"type": "object",
"properties": {
"reservation_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Reservation id."
}
},
"required": [
"reservation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_owners(first_name, last_name, email, cell_phone, zip, ...)
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 Schema
{
"type": "object",
"properties": {
"first_name": {
"description": "Exact first name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"last_name": {
"description": "Exact last name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"description": "Exact email address.",
"type": "string",
"minLength": 3,
"maxLength": 254
},
"cell_phone": {
"description": "Exact cell phone as stored in Gingr, e.g. (555) 555-5555.",
"type": "string",
"minLength": 3,
"maxLength": 40
},
"zip": {
"description": "Exact ZIP / postal code.",
"type": "string",
"minLength": 1,
"maxLength": 20
},
"home_location": {
"description": "Home location id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_owner(owner_id, animal_id, reservation_id, phone, email)
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 Schema
{
"type": "object",
"properties": {
"owner_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Owner id."
},
"animal_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Find the owner of this animal (pet)."
},
"reservation_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Find the owner of this reservation."
},
"phone": {
"description": "Cell phone number.",
"type": "string",
"minLength": 3,
"maxLength": 40
},
"email": {
"description": "Email address.",
"type": "string",
"minLength": 3,
"maxLength": 254
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_new_modified_owners(start_date, end_date, location_id, offset, limit)
List the owners (customers) created or modified between two dates (at most 366 days apart). Paged. Gingr: POST /api/v1/new_modified_owners.
Input Schema
{
"type": "object",
"properties": {
"start_date": {
"type": "string",
"description": "First day (YYYY-MM-DD)."
},
"end_date": {
"type": "string",
"description": "Last day (YYYY-MM-DD)."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only owners whose home location is this location id."
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_animals(owner_id, first_name, species_id, breed_id, offset, ...)
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 Schema
{
"type": "object",
"properties": {
"owner_id": {
"description": "Only this owner's animals.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"first_name": {
"description": "Exact pet name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"species_id": {
"description": "Species id (gingr_list_reference kind=species).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"breed_id": {
"description": "Breed id (gingr_list_reference kind=breeds).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_animal_immunizations(animal_id)
Get the immunization (vaccination) records of one animal, with expiration dates. Gingr: GET /api/v1/get_animal_immunizations.
Input Schema
{
"type": "object",
"properties": {
"animal_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Animal (pet) id."
}
},
"required": [
"animal_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_animal_feeding(animal_id)
Get the feeding information of one animal (food, amounts, schedule). Gingr: GET /api/v1/get_feeding_info.
Input Schema
{
"type": "object",
"properties": {
"animal_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Animal (pet) id."
}
},
"required": [
"animal_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_animal_medications(animal_id)
Get the medication information of one animal (medications, doses, schedule). Gingr: GET /api/v1/get_medication_info.
Input Schema
{
"type": "object",
"properties": {
"animal_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Animal (pet) id."
}
},
"required": [
"animal_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_invoices(complete, closed_only, from_date, to_date, per_page, ...)
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 Schema
{
"type": "object",
"properties": {
"complete": {
"description": "true = invoices; false (default) = estimates.",
"type": "boolean"
},
"closed_only": {
"description": "true = only closed invoices.",
"type": "boolean"
},
"from_date": {
"description": "From date (YYYY-MM-DD).",
"type": "string"
},
"to_date": {
"description": "To date (YYYY-MM-DD).",
"type": "string"
},
"per_page": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start": {
"description": "1-based number of the first result (default 1; page 2 of 25 = 26).",
"type": "integer",
"minimum": 1,
"maximum": 10000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_transaction(transaction_id)
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 Schema
{
"type": "object",
"properties": {
"transaction_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "POS transaction id."
}
},
"required": [
"transaction_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_subscriptions(owner_id, location_id, package_id, bill_day_of_month, include_deleted, ...)
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 Schema
{
"type": "object",
"properties": {
"owner_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only this owner's subscriptions."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"package_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only this package."
},
"bill_day_of_month": {
"description": "Only subscriptions renewing on this day of the month.",
"type": "integer",
"minimum": 1,
"maximum": 31
},
"include_deleted": {
"description": "true = include cancelled/deleted subscriptions.",
"type": "boolean"
},
"offset": {
"description": "Skip this many records (paging; default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Records per page (1-100, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_subscription(subscription_id)
Get one subscription (membership package) by id. Gingr: GET /api/v1/get_subscription.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Subscription id."
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_get_timeclock_report(start_date, end_date, location_id, user_ids, include_clocked_in, ...)
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 Schema
{
"type": "object",
"properties": {
"start_date": {
"type": "string",
"description": "First day (YYYY-MM-DD)."
},
"end_date": {
"type": "string",
"description": "Last day (YYYY-MM-DD)."
},
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"user_ids": {
"description": "Only these Gingr user (staff) ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"include_clocked_in": {
"description": "true = include staff still clocked in.",
"type": "boolean"
},
"include_deleted": {
"description": "true = include deleted records.",
"type": "boolean"
}
},
"required": [
"start_date",
"end_date",
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}π’gingr_list_report_card_files(location_id, limit)
List recently uploaded report card files (photos and videos shared with pet parents), newest first. Gingr: GET /api/v1/report_card_files.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Location id (from gingr_list_locations)."
},
"limit": {
"description": "Return at most this many files (1-200, default 50).",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence