nycrsvps.com WebMCP audit

audited Aug 28, 2026in 8s
53/ 100

5 tools registered. Strongest in usefulness, weakest in human experience.

WebMCP use59
Usefulness78
Human experience0
about:blank

No agent run recorded yet.

No steps recorded

Tools

/
find_restaurants: warning

find_restaurants

Search and filter NYC restaurants tracked by this site. Use this tool when the user wants to find restaurants, browse dining options, or look up reservation details for a specific restaurant. All filter parameters are optional and case-insensitive partial matches — combine any number of them to narrow results. When no filters are provided, returns all restaurants. Each result includes: restaurant name, cuisine, NYC neighborhood, reservation platform (e.g. Resy, OpenTable, Phone), direct booking link, how far in advance reservations open, and the daily release time in Eastern Time. Examples of when to use this tool: - "What Italian restaurants do you have?" → { cuisine: "Italian" } - "Show me restaurants in the West Village" → { neighborhood: "West Village" } - "What restaurants use Resy?" → { reservation_method: "Resy" } - "Tell me about Don Angie" → { name: "Don Angie" } - "Find Japanese restaurants in Soho" → { cuisine: "Japanese", neighborhood: "Soho" } Do NOT use this tool for: - Calculating when reservations open for a specific date (use get_reservation_open_date instead) - Finding restaurants not tracked by NYC RSVPs - Making or managing actual reservationsAnswers a question. Declared read only.
pagehttps://www.nycrsvps.com/
implementation
viaimperative
entry pointnavigator
registered after1132ms
executepresent
api surface
nameoptional
cuisineoptional
neighborhoodoptional
reservation_methodoptional
annotations
read onlytrue
destructivenot declared
idempotentnot declared
open worldnot declared
untrusted contentnot declared
titlenot declared
3 findings
warningCanonical entry point
2 / 4
2 of 5 tools still register through the deprecated navigator.modelContext alias.
find_restaurants, get_reservation_open_date
fix
// Use the canonical entry point - navigator.modelContext is deprecated.
document.modelContext.provideContext({ tools: [/* ... */] });
warningSchema quality
0.8 / 4
4 of 5 tool schemas are harder for an agent to use than they need to be: find_restaurants description is 1185 characters, over Chrome's 500-character guidance.
find_restaurants: description is 1185 characters, over Chrome's 500-character guidance; find_restaurants: declares no required list, so an agent cannot tell which parameters are mandatory; get_reserva
fix
{
  name: "find_restaurants",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningHuman parity
0 / 8
5 of 5 tools run through the JavaScript API with no visible counterpart, so the person co-browsing cannot see what the agent is offered. Declarative forms (or at least a title annotation) close the gap.
find_restaurants, get_reservation_open_date, check_reservation_open_date, go_to_rsvp_calculator, search_restaurants
fix
<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="find_restaurants" tooldescription="...">
  <!-- the same action, as UI -->
</form>
tool json
{
  "name": "find_restaurants",
  "description": "Search and filter NYC restaurants tracked by this site. Use this tool when the user wants to find restaurants, browse dining options, or look up reservation details for a specific restaurant.\n\nAll filter parameters are optional and case-insensitive partial matches — combine any number of them to narrow results. When no filters are provided, returns all restaurants.\n\nEach result includes: restaurant name, cuisine, NYC neighborhood, reservation platform (e.g. Resy, OpenTable, Phone), direct booking link, how far in advance reservations open, and the daily release time in Eastern Time.\n\nExamples of when to use this tool:\n- \"What Italian restaurants do you have?\" → { cuisine: \"Italian\" }\n- \"Show me restaurants in the West Village\" → { neighborhood: \"West Village\" }\n- \"What restaurants use Resy?\" → { reservation_method: \"Resy\" }\n- \"Tell me about Don Angie\" → { name: \"Don Angie\" }\n- \"Find Japanese restaurants in Soho\" → { cuisine: \"Japanese\", neighborhood: \"Soho\" }\n\nDo NOT use this tool for:\n- Calculating when reservations open for a specific date (use get_reservation_open_date instead)\n- Finding restaurants not tracked by NYC RSVPs\n- Making or managing actual reservations",
  "inputSchema": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string",
        "description": "Restaurant name to search for. Partial match, case-insensitive. Example: 'carbone', 'Don Angie'"
      },
      "cuisine": {
        "type": "string",
        "description": "Cuisine type to filter by. Partial match, case-insensitive. Examples: 'Italian', 'Japanese', 'Mexican', 'French'"
      },
      "neighborhood": {
        "type": "string",
        "description": "NYC neighborhood/area to filter by. Partial match, case-insensitive. Examples: 'West Village', 'Soho', 'Williamsburg', 'Lower East Side'"
      },
      "reservation_method": {
        "type": "string",
        "description": "Booking platform to filter by. Partial match, case-insensitive. Examples: 'Resy', 'OpenTable', 'Phone', 'Tock'"
      }
    }
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing find_restaurants

Findings

WebMCP use

59 / 100 · weight 50
passTools registered
4 / 4
5 tools registered across 1 page.
failReal-browser eligible
0 / 8
The page's code registers these tools, but a real visitor's browser does not get them yet: WebMCP needs a native modelContext or a current origin trial token, and this page has neither. The page does carry an origin-trial token, but it does not grant WebMCP on this origin.
warningRegistration timing
2 / 4
The slowest tool took 1796.5ms to register, past the 1000ms an agent reading the registry at first paint would wait for.
toolgo_to_rsvp_calculator
go_to_rsvp_calculator: registered at 1796.5ms
fix
// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.provideContext({ tools: [/* ... */] });
warningCanonical entry point
2 / 4
2 of 5 tools still register through the deprecated navigator.modelContext alias.
toolfind_restaurants
find_restaurants, get_reservation_open_date
fix
// Use the canonical entry point - navigator.modelContext is deprecated.
document.modelContext.provideContext({ tools: [/* ... */] });
passSchema validity
5 / 5
All 5 tools declare a structurally valid object input schema.
warningSchema quality
0.8 / 4
4 of 5 tool schemas are harder for an agent to use than they need to be: find_restaurants description is 1185 characters, over Chrome's 500-character guidance.
toolfind_restaurants
find_restaurants: description is 1185 characters, over Chrome's 500-character guidance; find_restaurants: declares no required list, so an agent cannot tell which parameters are mandatory; get_reserva
fix
{
  name: "find_restaurants",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
passStub detection
5 / 5
All 5 tools declare an execute handler.
warningAnnotations present
1.6 / 4
3 of 5 tools declare no readOnlyHint, so an agent cannot tell a read from a write without guessing from the name.
toolcheck_reservation_open_date
check_reservation_open_date, go_to_rsvp_calculator, search_restaurants
fix
{
  name: "check_reservation_open_date",
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true }
}
passAnnotation mismatch
3 / 3
No tool claims to be read-only while its name says it writes (2 declared hints checked).
not applicableUntrusted content hint
0 / 2
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
passRegistration errors
2 / 2
No tool registration threw during the capture.
warningToolchange coherence
1 / 2
5 tools were registered but the page never dispatched a toolchange event, so an agent subscribed to registry updates never learns they exist.
fix
document.modelContext.dispatchEvent(new Event("toolchange"));
not applicableInjection surface
0 / 3
The injection-surface model hop returned no usable result, so tool contracts were not reviewed for injection surface.

Usefulness

78 / 100 · weight 30
warningNaming quality
1.8 / 2
Tool naming makes selection harder than it needs to be: 1 name does not start with a verb (go_to_rsvp_calculator).
toolgo_to_rsvp_calculator
fix
{ name: "go_to_rsvp_calculator" /* short, unique, verb-based */ }
not applicableDescription quality
0 / 6
The description-quality model hop returned no usable result, so descriptions were not rated.
not applicableTool selection
0 / 14
The tool-selection model hop returned no usable result.
warningCoverage vs. site type
6 / 8
The tool set covers 3 of the 4 things an agent needs on a travel site; it cannot look up or change an existing booking.

Human experience

0 / 100 · weight 20
warningHuman parity
0 / 8
5 of 5 tools run through the JavaScript API with no visible counterpart, so the person co-browsing cannot see what the agent is offered. Declarative forms (or at least a title annotation) close the gap.
toolfind_restaurants
find_restaurants, get_reservation_open_date, check_reservation_open_date, go_to_rsvp_calculator, search_restaurants
fix
<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="find_restaurants" tooldescription="...">
  <!-- the same action, as UI -->
</form>
not applicablePage experience
0 / 12
The page-experience model hop returned no usable result, so the page was not graded.

Tool selection

The tool-selection model hop returned no usable result.
how this was captured
chrome
148.0.7778.96
capture shim
v1
spec snapshot
2026-08
mode
fast
pages
1
tools
5
run time
8s
finished
Aug 28, 2026