io.github.chrischall/opentable-mcp
NPM · OPENTABLE-MCP
OpenTable reservation management: find slots, book, cancel, list reservations, manage favorites.
Available components
Last scanned (6 hours ago)
Scores higher than 95% of npm servers
Category E-commerce
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 3 of 19 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to chrischall/opentable-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability59
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4683 tokens (~312/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage91
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 73% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Checks we ran (16)
- Malware scan
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +11
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 0.96 ▲ functional
- 4 Nov 26 −11
- Known CVEs: pass → unverified ▼ security
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Dependency health: 0.96 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: good → excellent functional
- Package version: 1.3.5 → 1.4.1 functional
- Package version: 1.3.5 → 1.4.0 functional
- 29 Oct 26 +1
- Security disclosure: unverified → pass ▲ functional
- 28 Oct 26 −1
- Security disclosure: pass → unverified ▼ functional
- Package version: 1.3.3 → 1.3.5 functional
- 23 Oct 26 0
- Package version: 1.3.3 → 1.3.5 functional
- 19 Oct 26 0
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Package version: 1.3.4 → 1.3.5 functional
- 17 Oct 26 +13
- Known CVEs: unverified → pass ▲ security
- Stability: 0.90 → pass security
- Dependency health: unverified → 0.96 ▲ functional
- Package version: 1.3.3 → 1.3.4 functional
- 16 Oct 26 −13
- Stability: pass → unverified ▼ security
- Known CVEs: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Dependency health: 0.96 → unverified ▼ functional
- Stability: pass → 0.90 functional
- Package version: 1.3.3 → 1.3.4 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/opentable-mcp@1.4.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | chrischall/opentable-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/chrischall/opentable-mcp/.github/workflows/release-please.yml@refs/heads/main |
| Rekor log index | 3691540508 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:fb54be5a021e068ee3dcfc91e0bfccd09cb7fa678d8ed5ca13e2448bedf86633a26c8faf3485e826a7ddee903e5c808887a73e48db590f78eb14b2288 |
Background: How many MCP packages publish verified provenance →
Dependencies 19 packages
| Packages resolved | 19 |
|---|---|
| Stale | 3 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
opentable_add_favorite ~29
Add a restaurant to the user's Saved Restaurants list.
| Name | Type | Req | Description |
|---|---|---|---|
| restaurant_id | integer | yes | – |
No output schema declared.
No examples provided.
opentable_book ~718
Book an OpenTable reservation. Requires a fresh slot_hash + reservation_token from opentable_find_slots (tokens expire within minutes — call find_slots just before book). dining_area_id is OPTIONAL: when omitted it's auto-resolved to the default dining area from OpenTable's booking-details page, so find_slots → book works without a separate opentable_get_restaurant call. For CC-required slots (prime-time at busy restaurants), opentable_book refuses without a `booking_token` from opentable_book_preview — the preview step surfaces the cancellation policy and the saved card that would be held. Auto-fetches the user's profile (name/email/phone) from /user/dining-dashboard. Returns confirmation_number + security_token; save both — they're required to cancel. For Listing-type restaurants there's no slot to lock — callers should check `opentable_get_restaurant.bookable` first and surface the restaurant's phone/URL instead. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds; the prompt names the restaurant, the card that will be held and the cancellation policy (see MCP_CONFIRM_MODE).
| Name | Type | Req | Description |
|---|---|---|---|
| booking_token | string | – | Opaque token from opentable_book_preview. REQUIRED for CC-required slots (book will refuse otherwise). Optional for standard slots — when present, skips a redundant re-lock. |
| confirmToken | string | – | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has se… |
| database_region | string | – | OpenTable's sharded-database region for the restaurant. Defaults to 'NA' (North America). Pass the venue's region (e.g. for UK/EU/APAC restaurants) when booking or cancelling outside North America —… |
| date | string | yes | YYYY-MM-DD |
| dining_area_id | integer | – | Optional dining-area (room) id. When omitted, auto-resolved to the default dining area from the booking-details page — no opentable_get_restaurant call needed. Pass explicitly only to pin a specific… |
| experience_id | integer | – | Tamper-check signal for Experience tokens. When set, must match the experienceId baked into the booking_token by preview — agents that re-state the experience choice here get refused if it drifted fr… |
| experience_ids | array | – | Pass-through from find_slots.experience_ids. When non-empty, book refuses without a booking_token from opentable_book_preview. |
| party_size | integer | yes | – |
| reservation_token | string | yes | slot_availability_token from opentable_find_slots |
| restaurant_id | integer | yes | – |
| slot_hash | string | yes | slot_hash from opentable_find_slots |
| time | string | yes | HH:MM (24h) — must match the slot returned by find_slots |
No output schema declared.
No examples provided.
opentable_book_preview ~553
Preview an OpenTable booking BEFORE committing. Fetches the /booking/details SSR page and the slot-lock to surface: the cancellation policy (including any credit-card no-show fee), the saved payment card that would be charged/held, and a short-lived `booking_token` that opentable_book consumes. REQUIRED for CC-required slots — opentable_book refuses to commit without the token. Safe to call for standard slots too (the token skips a redundant re-lock in book). Holds the slot for ~60-90s; preview → book should happen within a minute. For Listing-type restaurants (Le Bernardin, etc.) this tool can't fetch a slot at all — callers should check `opentable_get_restaurant.bookable` first and surface the restaurant's phone/URL instead. For Experience-mandatory slots (find_slots returned booking_type=experience_mandatory), pass `experience_id` from the slot's `experience_ids` to route through the Experience slot-lock. Slots that charge the card at booking (a Deposit policy, or a prepaid/priced Experience) are refused with a link to book on opentable.com directly.
| Name | Type | Req | Description |
|---|---|---|---|
| database_region | string | – | OpenTable's sharded-database region for the restaurant. Defaults to 'NA' (North America). Pass the venue's region (e.g. for UK/EU/APAC restaurants) when booking or cancelling outside North America —… |
| date | string | yes | YYYY-MM-DD |
| dining_area_id | integer | – | Optional dining-area (room) id. When omitted, auto-resolved to the default dining area from OpenTable's booking-details page — so you can go straight from find_slots to book without calling opentable… |
| experience_id | integer | – | For Experience-mandatory slots: which experience to book (from slot.experience_ids). Required when find_slots returned an Experience slot. |
| experience_ids | array | – | Pass-through from find_slots.experience_ids. When non-empty, experience_id must also be set. |
| party_size | integer | yes | – |
| reservation_token | string | yes | slot_availability_token from opentable_find_slots |
| restaurant_id | integer | yes | – |
| slot_hash | string | yes | slot_hash from opentable_find_slots |
| time | string | yes | HH:MM (24h) — must match a slot returned by find_slots |
No output schema declared.
No examples provided.
opentable_cancel ~333
Cancel an OpenTable reservation. Requires restaurant_id, confirmation_number, and security_token — all three come from opentable_list_reservations or opentable_book. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds; the prompt names the restaurant, date, time and party size from your dining dashboard (see MCP_CONFIRM_MODE). Refused when the confirmation_number belongs to a different restaurant.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmToken | string | – | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has se… |
| confirmation_number | integer | yes | – |
| database_region | string | – | OpenTable's sharded-database region for the restaurant. Defaults to 'NA' (North America). Pass the venue's region (e.g. for UK/EU/APAC restaurants) when booking or cancelling outside North America —… |
| restaurant_id | integer | yes | – |
| security_token | string | yes | – |
No output schema declared.
No examples provided.
opentable_find_slots ~428
List available reservation slots at a specific OpenTable restaurant for a date + party size. Returns each slot's reservation_token (use it with opentable_book — tokens expire quickly, book promptly). Slots may be attributes=['default'|'bar'|'highTop'|'outdoor'] and type=Standard|Experience|POP. You can pass a slot's reservation_token + slot_hash straight to opentable_book without a separate opentable_get_restaurant call — book auto-resolves the dining area. (OpenTable's availability response carries only the seating category, not the numeric dining-area id, so that id is resolved at book time from the booking-details page.) If this errors with "operation ... not yet observed on this tab", open any OpenTable restaurant page in your browser once (the graphql bridge needs to see the page's own availability query fire first), then retry.
| Name | Type | Req | Description |
|---|---|---|---|
| database_region | string | – | OpenTable's sharded-database region for the restaurant. Defaults to 'NA' (North America). Pass the venue's region (e.g. for UK/EU/APAC restaurants) when booking or cancelling outside North America —… |
| date | string | yes | YYYY-MM-DD |
| party_size | integer | yes | – |
| restaurant_id | integer | yes | – |
| time | string | yes | HH:MM (24h) — anchor time; slots come back relative to this |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
opentable_get_menu ~398
Large menus return bounded pages of whole items; follow pagination.next_offset with the same filters. Optional section_name selects an exact section; offset/limit paginate items. view=full without paging is uncapped. Get published menus for an OpenTable restaurant, including sections, dishes, prices, variations, currency, provider and updated timestamps. Accepts the same numeric id/slug/path/URL as opentable_get_restaurant. Optional menu_name selects an exact title case-insensitively (e.g. Dinner). Returns available_menus and status: available, menu_not_found, external_only or not_available. External menu_url links are returned but never fetched. Prices describe OpenTable's published menu, not a live quote from the restaurant.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum whole items per page (1-50, default 20). A page may return fewer to stay within the response budget. |
| menu_name | string | – | Exact published menu title, case-insensitive. Omit to return all menus; available_menus lists titles when a selection is not found. |
| offset | integer | – | Item offset to resume from: pass the previous page's pagination.next_offset, with the same menu_name/section_name. Default 0. |
| restaurant_id | – | yes | Numeric restaurant id, slug, path, or exact URL from opentable_search_restaurants. |
| section_name | string | – | Exact section title, case-insensitive (e.g. Appetizers). Returns only that section's items; available_sections lists the titles. |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
opentable_get_profile ~128
Get the authenticated OpenTable user's profile: name, email, phones, loyalty points and tier, home metro, member-since date. Payment and credit-card details are never exposed.
| Name | Type | Req | Description |
|---|---|---|---|
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
opentable_get_restaurant ~270
Get full details for a single OpenTable restaurant: cuisine, price band, description, address, hours, phone, payment options, features, rating/review count, and availability_token (used internally when booking). Accepts the numeric restaurant_id, a slug, a path, or the full URL from opentable_search_restaurants — passing the search result's "url" verbatim always resolves, including legacy venues served at /{slug} instead of /r/{slug}.
| Name | Type | Req | Description |
|---|---|---|---|
| restaurant_id | – | yes | Numeric restaurant_id (as returned by opentable_list_reservations / opentable_list_favorites), slug ("state-of-confusion-charlotte"), path, or full URL from opentable_search_restaurants. Passing the… |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
opentable_healthcheck ~145
Round-trips a small public www.opentable.com URL (/robots.txt) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real www.opentable.com-side problem'. Read-only, no auth required. Tests bridge transport only. Search/menus/availability are reported only from observed real reads; booking is never probed.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
opentable_list_favorites ~163
List the user's saved restaurants from OpenTable (Saved Restaurants list). Returns each entry's numeric restaurant_id (a number, or null when OpenTable omits it — the same id opentable_get_restaurant, opentable_find_slots and opentable_remove_favorite take), name, cuisine, neighborhood, price band, rating, and OpenTable URL.
| Name | Type | Req | Description |
|---|---|---|---|
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
opentable_list_reservations ~186
List the authenticated user's OpenTable reservations. Defaults to upcoming; pass scope="past" or scope="all" to broaden. Each entry includes the security_token needed to cancel or modify.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | – | YYYY-MM-DD; only reservations on or before this date (inclusive) |
| scope | string | – | – |
| start_date | string | – | YYYY-MM-DD; only reservations on or after this date (inclusive) |
| view | string | – | Response shape. "compact" (default) strips image/avatar URLs; "full" returns the parsed reservations untouched; "brief" answers one text line per reservation: "<restaurant>, party of <n> — <date>T<ti… |
No output schema declared.
No examples provided.
opentable_modify ~527
Modify an existing OpenTable reservation in place. Requires the existing reservation's identity (restaurant_id + confirmation_number + security_token) plus a fresh modify_token from opentable_modify_preview — preview is mandatory because the new slot's cancellation policy / CC re-hold can differ from the original. Submits /dapi/booking/make-reservation with isModify: true + the existing confirmation_number + security_token; OpenTable preserves confirmation_number across modifies but may regenerate reservation_id and security_token. dining_area_id is OPTIONAL — the modify_token already carries the area opentable_modify_preview resolved; pass it only to restate it (mismatch is refused). Returns the same shape as opentable_book plus was_modified: true so the agent can phrase the user confirmation accurately. For Listing-type restaurants there's no slot to lock — agents should check opentable_get_restaurant.bookable first. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds; the prompt names the restaurant, the current and new slot, and the card re-hold (see MCP_CONFIRM_MODE).
| Name | Type | Req | Description |
|---|---|---|---|
| confirmToken | string | – | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has se… |
| confirmation_number | integer | yes | – |
| date | string | yes | YYYY-MM-DD (the NEW date) |
| dining_area_id | integer | – | Optional. The modify_token carries the dining area preview resolved; when restated here it must match the token. |
| experience_id | integer | – | Optional tamper-check signal. When set, must match the experienceId baked into modify_token. |
| modify_token | string | – | REQUIRED. From opentable_modify_preview. No no-token path — the new slot's policy + CC re-hold can differ from the original. |
| party_size | integer | yes | – |
| reservation_token | string | yes | slot_availability_token from opentable_find_slots for the NEW slot |
| restaurant_id | integer | yes | – |
| security_token | string | yes | – |
| slot_hash | string | yes | slot_hash from opentable_find_slots for the NEW slot |
| time | string | yes | HH:MM (24h) — the NEW time |
No output schema declared.
No examples provided.
opentable_modify_preview ~500
Preview a MODIFICATION to an existing OpenTable reservation. Takes the existing reservation's identity (restaurant_id + confirmation_number + security_token from opentable_list_reservations or the original opentable_book result) plus the NEW slot args (from a fresh opentable_find_slots call) and returns the new cancellation_policy, CC re-hold details, and a `modify_token` that opentable_modify consumes. Mirrors opentable_book_preview, but the /booking/details URL includes confirmationNumber + securityToken + isModify=true so OpenTable's SSR returns the modify state. dining_area_id is OPTIONAL — omitted, it's auto-resolved from the booking-details page like book_preview does. REQUIRED before opentable_modify — no shortcut path. For Listing-type restaurants the modify can't proceed (no slot picker); check opentable_get_restaurant.bookable first.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmation_number | integer | yes | – |
| database_region | string | – | OpenTable's sharded-database region for the restaurant. Defaults to 'NA' (North America). Pass the venue's region (e.g. for UK/EU/APAC restaurants) when booking or cancelling outside North America —… |
| date | string | yes | YYYY-MM-DD (the NEW date) |
| dining_area_id | integer | – | Optional dining-area (room) id for the NEW slot. When omitted, auto-resolved to the default dining area from OpenTable's booking-details page — the same resolution opentable_book_preview uses. Pass e… |
| experience_id | integer | – | For Experience-mandatory slots; required when the new slot has experience_ids. |
| experience_ids | array | – | Pass-through from find_slots.experience_ids. When non-empty, experience_id must also be set. |
| party_size | integer | yes | – |
| reservation_token | string | yes | slot_availability_token from opentable_find_slots for the NEW slot |
| restaurant_id | integer | yes | – |
| security_token | string | yes | – |
| slot_hash | string | yes | slot_hash from opentable_find_slots for the NEW slot |
| time | string | yes | HH:MM (24h) — the NEW time |
No output schema declared.
No examples provided.
opentable_remove_favorite ~29
Remove a restaurant from the user's Saved Restaurants list.
| Name | Type | Req | Description |
|---|---|---|---|
| restaurant_id | integer | yes | – |
No output schema declared.
No examples provided.
opentable_search_restaurants ~276
Search OpenTable for restaurants. Returns matching restaurants with cuisine, neighborhood, price band, rating, description, and URL. Does NOT include bookable slot tokens — use opentable_find_slots for a specific venue to check availability.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | YYYY-MM-DD. Affects search ranking but not returned slots. |
| latitude | number | – | – |
| location | string | – | City / neighborhood / address — appended to the term. Prefer lat/lng when precise. |
| longitude | number | – | – |
| metro_id | integer | – | OpenTable metro id (e.g. 8 = SF Bay Area, 31 = Charlotte). |
| party_size | integer | – | Number of guests. Default 2. |
| term | string | – | Free-text query (cuisine or restaurant name) |
| time | string | – | HH:MM (24h). Default 19:00 when date is set. |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
How do I install the io.github.chrischall/opentable-mcp server?
io.github.chrischall/opentable-mcp runs locally as an npm package, launched with npx -y opentable-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · opentable-mcp
claude mcp add chrischall-opentable-mcp -- npx -y opentable-mcp
What is the io.github.chrischall/opentable-mcp server?
io.github.chrischall/opentable-mcp is listed in the public MCP registry as io.github.chrischall/opentable-mcp. OpenTable reservation management: find slots, book, cancel, list reservations, manage favorites. This page covers its npm package (opentable-mcp).
Is the io.github.chrischall/opentable-mcp server safe to use?
io.github.chrischall/opentable-mcp scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 io.github.chrischall/opentable-mcp server expose?
io.github.chrischall/opentable-mcp exposes 15 tools: opentable_list_reservations, opentable_find_slots, opentable_book_preview, opentable_modify_preview, opentable_book, and 10 more. Their descriptions and schemas cost roughly 4,683 tokens of context every time the server is loaded.
Is the io.github.chrischall/opentable-mcp server still maintained?
io.github.chrischall/opentable-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.chrischall/opentable-mcp server under?
io.github.chrischall/opentable-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.
What did VerifyMCP test on the io.github.chrischall/opentable-mcp server?
VerifyMCP ran 16 checks on io.github.chrischall/opentable-mcp, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.