Back to tracker
Plugin tracker
Tools
Explore what tracked Claude Connectors and ChatGPT Plugins can actually do. Search by tool, Plugin, Brand, category, verb, or access requirement.
Latest snapshot2026-09-11USmethodology registry-public-v1
Searchable tools
113,017
Authless tools
7,424
Auth required
100,766
Described tools
61,166
113,017 tools
- get_cashier_shiftsget · Cashier shift reconciliation: opening and closing balances, and variance.
variance is the drawer against the system. A non-zero value is the whole
reason this record exists.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_companiesget · Corporate accounts: credit limits, payment terms, tax registration.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_departuresget · Guests due to check out on a given date. Omit on_date for today.
date_out is the booked departure; checked_out records whether they have
actually gone. Both are returned, because "due out" and "left" are different
questions and the gap between them is what a front desk cares about at noon.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_guest_ratingsget · Guest satisfaction scores. overall_rating runs 0-10 in live data.
The per-question columns are named q_one..q_twelve in the schema with no
question text anywhere in the database, so they are returned under those
names rather than relabelled with guesses.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_hotel_detailsget · Details for one hotel: address, city, contact fields.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_housekeepingget · Room cleaning jobs. open_only keeps those not yet completed.
completed_at IS NULL is the open marker. There are 2.6M of these rows
estate-wide, so this is always a page of the most recent, never the lot.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_in_houseget · Guests currently in the hotel: checked in and not yet checked out.
Uses the reservation's own checked_in / checked_out flags rather than
comparing today against date_in and date_out, because an overstay or an early
departure makes those two answers differ, and the flags are what the front
desk actually set.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_invoicesget · Recent folios/invoices, most recent first.
`from` and `to` are the stay period the invoice covers. Both are reserved
words in MySQL and must stay quoted.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_maintenanceget · Room maintenance jobs. open_only keeps those not yet completed.
expected_at is the promised completion date where one was set, so a row whose
expected_at has passed while completed_at is still null is overdue.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_my_hotelsget · List every hotel the calling user may query.
Returns a JSON array of hotels: hotel_id, name, en_name, city.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_night_auditget · Night audit runs: what each one processed, and whether it succeeded.
The nightly close is where no-shows are flagged, outstanding checkouts are
processed and the occupancy snapshot get_occupancy reads is written. A failed
or missing run is why yesterday's numbers can look wrong.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_occupancyget · The PMS's own occupancy snapshot. Omit hotel_id for the whole portfolio.
Returns what the PMS recorded for its most recent snapshot date, verbatim:
units_count, occupied, available, cleaning, maintenance, booked, and the
percentage the PMS itself computed. The snapshot date is included, because
these are daily rows and the latest one may be yesterday.
TWO THINGS TO KNOW BEFORE QUOTING THE PERCENTAGE.
It can exceed 100%. Hotel 4188 reports 60 occupied against 12 units -- 500% --
because serviced apartments turn over several times a day and `occupied` counts
stays rather than rooms. Hotel 2411 hit 102% on 2026-07-31. That is the PMS's
own arithmetic and it is reproduced rather than corrected, so this agrees with
what a manager sees in the web app.
It is NOT derived from units.status. An earlier version of this tool counted
status = 1 as occupied and reported 72.7% for hotel 2411 where the PMS said
56%. status = 1 is 89.9% of every room in the estate: it means the room is in
service, not that someone is in it. Only 16 of those 48 "occupied" rooms at
2411 had a live stay.
For a figure this server can define exactly rather than inherit, use
get_rooms and count the ones whose state is occupied -- but be aware that is a
different question from what the PMS reports here.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_occupancy_trendget · Daily occupancy snapshots over the last N days, oldest first.
Reads the PMS's own `occupieds` table, the same source get_occupancy uses for
today, so a trend and a spot reading cannot disagree. Percentages are the
PMS's own, not recomputed here.
One row per snapshot as the PMS wrote it. A day the night audit did not run is
simply absent rather than interpolated -- see get_night_audit when a gap
appears.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_paymentsget · Money actually taken and paid out at one of the caller's hotels.
Cash movement, which is a different question from get_revenue. Revenue is what
the bookings were worth; this is what moved. They will not agree and should not:
a confirmed booking with no deposit yet contributes to one and not the other.
'deposit' is money in, 'withdraw' is money out. Both are reported, plus the net.
ON THE UNITS: transactions.amount is a BIGINT in HALALAS, not SAR. Established
by cross-referencing 12 transactions against the reservations they belong to --
median ratio exactly 100.0000 (amount 218,165 against a 2,181.65 reservation),
and the off-ratio cases were partial payments. So everything here is divided by
100 and reported in SAR. If that ratio ever changes, every figure this tool
returns is wrong by a factor of 100, which is why the derivation is written down
rather than assumed.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_performanceget · ADR, RevPAR and room-nights for a month. Omit year/month for this month.
ADR = room revenue / room-nights sold
RevPAR = room revenue / (rooms available x nights in the month)
Room-nights are DATEDIFF(date_out, date_in) summed over confirmed, non-no-show
stays, so a booking is counted for the nights it covers rather than once.
Same exclusions as get_revenue, deliberately: two revenue figures that
disagree because they filter differently are worse than one.
Rooms available is the hotel's current live unit count, which is a
simplification: a room added or removed mid-month is treated as though it
existed all month. Stated because RevPAR is otherwise easy to over-trust.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_registered_guestsget · Guests formally registered against a stay (Shomoos / Ministry of Interior).
SPARSE ON REAL DATA, and that is a property of the source rather than a fault
here: measured on the replica, only 417 of 1,729 hotels have any rows at all,
and 4,243 of 3.79M reservations have a linked guest. This table records formal
identity registration for specific cases, not the general guest list.
For "who is staying", use get_bookers.
id_number is never returned, same as get_bookers.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_reservation_detailget · Everything about one booking: stay, room, booker, invoices, extensions.
Four scoped queries rather than one wide join, because a booking with three
invoices and two extensions would otherwise return six rows that a reader has
to un-multiply. Each is tenant-scoped independently.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_reservationsget · Recent reservations for one of the caller's hotels, newest first.
Includes cancelled bookings, with their status, so the caller can see them.
Revenue figures deliberately do not -- see get_revenue.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_revenueget · Confirmed revenue for a month. Omit hotel_id for the whole portfolio.
Reads reservations, deliberately not `invoices` (Spark subscription billing --
what Fandaqah charges the hotel) and not `transactions` (see get_payments).
Cancelled and no-show bookings are excluded: that exclusion is the difference
between a revenue figure and a sum of rows.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_revenue_by_sourceget · Revenue split by booking channel for a month. Omit year/month for this month.
Same exclusions as get_revenue -- confirmed, not no-show, by check-in date --
so the parts sum to the whole. Two figures that disagree because they filter
differently are worse than one.
Bookings with no source_id appear as a null channel rather than being dropped;
silently discarding them would make the split fail to reconcile with
get_revenue and give no clue why.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_room_status_historyget · Recent room status changes: what changed, from what, to what, and why.
Raw status codes are returned rather than guessed labels. units.status carries
at least three distinct values in live data and only 1 (in service) has been
confirmed against the PMS; inventing names for 2 and 3 would repeat the
mistake that made get_occupancy report rooms-in-service as rooms-occupied.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_room_typesget · Room categories and their rack rates.
Rates are per day of week, because the PMS prices Friday differently from
Tuesday, plus a monthly and an hourly rate where the property sells them.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_roomsget · Rooms/units at one of the caller's hotels, with occupancy status.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_service_salesget · Extras sold in a month, totalled by direction. Omit year/month for this month.
Amounts are halalas divided by 100, and withdrawals are stored negative --
the same convention as transactions, confirmed against this table rather than
carried over on faith. net_sar is the signed sum, not deposits minus
withdrawals: subtracting an already-negative figure is the error that once put
get_payments out by 7.8M SAR and in the wrong direction.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_servicesget · The hotel's sellable extras and their list prices.
price here is plain SAR, unlike the halalas used by transactions and
service_logs. Measured against the live table, not assumed.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - get_stay_extensionsget · Stays that were extended: the old departure date and the new one.Fandaqah PMSFandaqah
PluginrequiredTravel & Hospitality - Add existing assets to an albumadd · Adds one or more existing assets to the specified album. Assets must already be in the same library as the album (this tool does not upload new assets). Assets already in the album are silently skipped and returned separately as `duplicate_assets`; missing or different-library IDs are skipped and returned as `not_found_assets`. Idempotent: calling with the same IDs twice leaves the album in the same state.Gumnut PhotosGumnut
PluginrequiredContent & Design - Cluster assets by map locationget · Clusters geotagged assets in a map viewport (bounding box) onto a grid of square cells and returns one entry per non-empty cell — its centroid, asset count, and a representative cover asset. Use this to render a clustered map or to count how many photos fall in each part of a viewport at a chosen zoom granularity.
The result is a single un-paginated list capped at 1000 cells; a viewport that is too dense at the given `cell_size` returns 422 (coarsen `cell_size` or zoom in). To list the individual assets behind a cell, call `list_assets` with a tighter bounding box over the same filters. Album and person filters compose using AND.Gumnut PhotosGumnut
PluginrequiredContent & Design - Create a facecreate · Adds a user-drawn face box to an asset, for a face the detector missed. To remove a face detection instead, use `delete_face`; to introduce a brand-new identity first, use `create_person`.Gumnut PhotosGumnut
PluginrequiredContent & Design - Create a librarycreate · Creates a new, empty photo library for the authenticated user. A library is the top-level container for assets, albums, people, and faces — most users have exactly one. Only create a new library when the user explicitly asks for a separate container.Gumnut PhotosGumnut
PluginrequiredContent & Design - Create a personcreate · Creates a person record for grouping faces. The record may initially have no name and no faces.
To assign an existing face to an existing person, use `update_face` with the target `person_id`.Gumnut PhotosGumnut
PluginrequiredContent & Design - Create an albumcreate · Creates a new, empty album in a library (with optional name and description) and returns it. The album starts empty — follow up with `add_assets_to_album` to populate it. To rename an existing album, use `update_album` instead of creating a new one.Gumnut PhotosGumnut
PluginrequiredContent & Design - Delete a face detectiondelete · Removes one face detection row; the underlying asset and the person this face was assigned to are both preserved.
**Use `update_face` with `person_id=null` instead** when the user wants to disassociate the face from a person without discarding the detection (so re-clustering can try again). Use `delete_person` to remove a person; use `trash_assets` to remove the photo entirely.Gumnut PhotosGumnut
PluginrequiredContent & Design - Delete a persondelete · Deletes the person record; the faces that were attached to this person are not deleted — they become unassigned and will be re-clustered on the next clustering pass.
Use `update_face` with `person_id=null` to detach a specific face without deleting the whole person. Use `delete_face` to remove a face detection entirely.
If a concurrent change to the person's faces collides with the deletion, it returns 409 and nothing is deleted; retry the request unchanged.Gumnut PhotosGumnut
PluginrequiredContent & Design - Delete an albumdelete · Deletes the album itself. Assets that were in the album remain in the library — only the album and its asset-links are removed. Use `trash_assets` to soft-delete the underlying assets, or `remove_assets_from_album` to detach specific assets from an album you want to keep.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get a face detectionget · Fetches one face's details by ID (bounding box, assigned person, timestamps, thumbnail). Use when you already have a `face_id`.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get a libraryget · Fetches one library's metadata by ID. Returns the library regardless of trash state.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get a personget · Fetches one person's metadata by ID (name, asset count, thumbnail, etc.). Use this when you already have a `person_id`. The JSON response is metadata only; to get the photos that contain this person, use `search_assets` with `person_ids` or `list_assets` with `person_ids`.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get an albumget · Fetches one album's metadata by ID (name, description, cover, counts). Use when you already have an album ID. The JSON response is metadata only and does not include the album's assets — to get the asset IDs or data, use `list_album_assets` or `list_assets` with `album_id`.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get an album-asset link recordget · Fetches one album-asset link record by ID (the junction row between an album and an asset). Rarely needed directly; most callers want `get_asset` or `get_album` instead.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get an assetget · Fetches one asset and its associated metadata by ID. Use this when you already have a specific asset ID (e.g., from `list_assets`, `search_assets`, or `list_album_assets`) and need its full details. For bulk fetch of multiple known IDs, prefer `list_assets` with the `ids` parameter to avoid N round trips. `asset_urls` are signed URLs for client rendering only; to visually inspect the image pixels, call `view_asset` instead.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get asset countsget · Counts assets bucketed by time period — use this to summarize a library (or a filtered slice) without paging through the full timeline. Returns one row per bucket, ordered most-recent-first, with optional filtering by album, person, date range, or trash state.
To list the actual assets within a bucket, call `list_assets` with the same filters and a `local_datetime_after` / `local_datetime_before` window matching the bucket. Does not filter by image content or location; for content-based search use `search_assets`.
**Pagination:** When `has_more` is true, pass the last `time_bucket` value from `data` as `local_datetime_before` to fetch the next page.Gumnut PhotosGumnut
PluginrequiredContent & Design - Get the current userget · Returns the profile of the authenticated user (the caller). Use this at the start of a session to ground subsequent calls (e.g., to confirm the caller's identity before making destructive changes). This tool does not accept a user ID; it always returns the authenticated caller.Gumnut PhotosGumnut
PluginrequiredContent & Design - List album-asset link recordslist · Returns paginated *link* records (lightweight join rows between albums and assets) describing which assets are in which albums — each row contains `album_id` + `asset_id` + link timestamps, not the full asset or album metadata. Use this when you specifically need the junction records (for sync or change tracking).
**For most use cases you want a different tool:** use `list_assets` with `album_id` to get the full asset metadata for a specific album; use `list_albums` with `asset_id` to find which albums contain an asset.
**Pagination** is cursor-based: when `has_more` is true, pass the `id` of the last album-asset in `data` as `starting_after_id` to fetch the next page.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - List albums in a librarylist · Returns a paginated list of albums ordered by creation time (newest first), optionally filtered by asset membership or ID. Use this to enumerate a user's albums or to find which albums contain a specific asset (via `asset_id`).
`list_albums` returns album metadata only — to list the assets inside a particular album, use `list_album_assets` or `list_assets` with `album_id`.
**Pagination** is cursor-based: when `has_more` is true, pass the `id` of the last album in `data` as `starting_after_id` to fetch the next page.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - List assets in a librarylist · Returns a paginated list of assets ordered by local capture time (or trash time for trashed assets), newest first by default, optionally filtered by album, person, date range, geographic area, or asset ID. Use this tool for structured browsing and filtering — when the request can be expressed as exact filters on album membership, people, date range, geographic coordinates, or specific asset IDs.
**Location filtering is by coordinate:** pass a radius (`center` + `radius`) or a bounding box (`bbox`) to restrict results to a geographic area. The two modes are mutually exclusive. To count or cluster geotagged assets across a map viewport (how many photos fall in each area) rather than list them, use `get_geo_clusters`.
Album and person filters compose using AND.
**Use `search_assets` instead** when the request involves natural-language image content ('photos of sunsets', 'pictures with my dog'), a place *name* ('photos from Japan'), or any concept requiring semantic understanding of what's in the image. `list_assets` filters by coordinate but not by image content, place name, or caption text.
**To present a curated set of specific assets to the user** (e.g., a hand-picked subset of `search_assets` results), call this tool with `ids=[...]` rather than building a custom gallery — the asset IDs you already have are enough to re-render them through the interactive widget.
**Pagination** is cursor-based: while `has_more` is true, keep fetching with `starting_after_id`.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - List face detectionslist · Returns a paginated list of individual face detections (with bounding boxes), ordered by creation time (newest first), optionally filtered by asset, person, or ID. Each row is a single face in a single asset — a person with many photos will have many face rows.
**Use `list_people` instead** when the user wants the grouped identities ('list everyone in my library') rather than individual face detections. This tool is useful for curating clustering results, finding unassigned faces, or picking a thumbnail face for a person via `update_person.thumbnail_face_id`.
**Pagination** is cursor-based: when `has_more` is true, pass the `id` of the last face in `data` as `starting_after_id` to fetch the next page.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - List librarieslist · Returns libraries owned by the authenticated user (no pagination — users typically have one or a handful). Call this when another tool's `library_id` parameter is required but you don't yet know which libraries exist. A single-library user can usually omit `library_id` on other tools entirely.
By default trashed libraries are excluded. Pass `state=trashed` to list the trash drawer (ordered by most recently trashed) or `state=all` for both.Gumnut PhotosGumnut
PluginrequiredContent & Design - List people in a librarylist · Returns a paginated list of person records, which may be named or unnamed and may have zero or more faces, ordered according to `sort` (newest first by default), optionally filtered by asset, album, name, or ID.
By default only people with a non-null name are returned; pass `name_filter=all` for every person or `name_filter=unnamed` for people whose name is null.
To list the underlying faces for a specific person, use `list_faces` with `person_id`.
**Pagination** is cursor-based: when `has_more` is true, pass the `id` of the last person in `data` as `starting_after_id` to fetch the next page.
Renders as an interactive widget in MCP App-enabled hosts — prefer it over custom visualizations.Gumnut PhotosGumnut
PluginrequiredContent & Design - Merge peoplemerge · Merges one or more source people into the primary person identified by the URL. All faces from source people are reassigned to the primary person. Source people are permanently deleted (this cannot be undone). The primary person's centroid embedding is recalculated.
In the degenerate case where the primary and all sources are unnamed and have zero faces, the primary is auto-deleted by the post-merge centroid recompute and the response is `204 No Content`.Gumnut PhotosGumnut
PluginrequiredContent & Design
What is Tool Explorer?
Tool Explorer indexes the callable tool names and descriptions attached to public registry profiles. It is useful for seeing what agents can actually invoke, not just which profile exists.
How do category and verb filters work?
Category filters use the live registry category rollup. Verb filters use the public tool insights rollup, so the page stays backed by the same read models as the tracker charts.
Why do auth requirements matter?
Auth requirements show whether a tool is likely usable without account connection, requires authentication, is private, or is unknown in the current snapshot.