tripadvisor-mcp
The tripadvisor-mcp server provides read-only access to TripAdvisor travel data, enabling search and retrieval of information about hotels, restaurants, attractions, and geographic locations.
Search locations by name (
ta_search_locations): Find TripAdvisor locations by text query, with optional filters for category, coordinates, radius, address, and phone number.Find nearby locations (
ta_search_nearby): Discover locations near a specific latitude/longitude point, with support for category filtering, radius, minimum rating, and sort order.Get location details (
ta_get_location_details): Retrieve comprehensive information including name, address, coordinates, ratings, rankings, awards, review counts, amenities, hours, and listing URLs.Get location photos (
ta_get_location_photos): Fetch photos with multi-size image URLs, captions, and source metadata (Expert, Management, or Traveler), with pagination support.Get location reviews (
ta_get_location_reviews): Retrieve traveler reviews with pagination and language filtering.Optional browser bridge (
ta_web_healthcheck,ta_web_get_location): Access public TripAdvisor page data (rating, address, coordinates, phone, photo) without an API key, via a browser extension.
A TripAdvisor Terra API key is required for the core tools.
Provides tools to search for locations (hotels, restaurants, attractions), retrieve full details, photos, and recent reviews via the TripAdvisor Content API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tripadvisor-mcpfind top-rated hotels in Paris"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tripadvisor-mcp
MCP server for the TripAdvisor Terra API — travel data for Claude. Search hotels, restaurants, and attractions by name or coordinates, then pull full details, photos, and reviews, all over stdio. (Terra is TripAdvisor's current API; the legacy Content API is sunset on 2026-08-31.)
Developed and maintained by AI (Claude Code). Use at your own discretion.
Quick start
{
"mcpServers": {
"tripadvisor": {
"command": "npx",
"args": ["-y", "@chrischall/tripadvisor-mcp"],
"env": { "TRIPADVISOR_API_KEY": "your-terra-api-key-here" }
}
}
}Get a key at tripadvisor.com/developers. The free Discover tier is pay-as-you-go (10 QPS, 10,000 calls/day); responses are cached in-memory to stretch it. Make sure it's a Terra key — a legacy Content API key returns 403.
Related MCP server: TripAdvisor Vacation Planner MCP Server
Tools
Tool | What it does |
| Search locations by name (optionally scoped by category, country/geo/postal code) — paginated; |
| Find locations near a lat/lon+radius, a |
| Full details: names, descriptions, address, coordinates, traveler ratings, phone, listing URLs |
| Batch — details for multiple location ids in one call (cheaper than N detail calls); |
| Photos with multi-size image URLs, source, and dimensions — paginated |
| Traveler reviews — paginated |
| Diagnose the optional tripadvisor.com browser-bridge connection (see below) |
| Location details (rating, address, coords, phone, photo) read from the public page via the browser bridge — no API key needed |
All tools are read-only — Terra has no write endpoints.
Browser bridge (optional)
ta_web_healthcheck is the first tool of an optional second tier that reaches
tripadvisor.com's consumer site (bot-walled, so unreachable server-side) by
routing same-origin fetches through your signed-in browser tab via the
fetchproxy Transporter extension.
It needs the extension installed and a one-time pairing approval; the Content
API tools above never touch the bridge.
ta_web_get_location uses this bridge to read a location's details straight
from its public TripAdvisor page — so it works without an API key,
covering attractions, hotels, and restaurants. It returns core business data
(rating, review count, address, coordinates, phone, primary photo, listing
URL) but not individual review text. Request shapes are pinned in
docs/TRIPADVISOR-WEB-API.md.
Environment
Var | Required | Purpose |
| yes | Terra API key, sent as the |
| no | Seconds to cache search responses (default: 300; |
| no | Seconds to cache details/photos/reviews (default: 3600; |
| no | Per-request timeout for the optional browser bridge (default: 30000). |
| no | Set to |
Development
npm install
npm run build # tsc + esbuild bundle
npm test # vitest (no real network)Endpoint request shapes are pinned in docs/TRIPADVISOR-API.md. With a key in .env, node scripts/live-probe.mjs exercises every read path through the built client.
License
MIT
Available Tools
8 toolsta_get_location_detailsARead-only
Get full details for a TripAdvisor location: names, descriptions, address, coordinates, traveler ratings, phone, category, and listing URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Preferred locales for localized fields, in priority order (e.g. ["en","es"]) | |
| locationId | Yes | TripAdvisor location ID (from a search tool) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint. Description adds that it returns 'full details' with specific fields, but does not elaborate on behavioral traits like idempotency, rate limits, or what happens if locationId is invalid. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that front-loads the purpose and enumerates key returned data without unnecessary words. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and full parameter coverage, the description is complete enough. It lists major return fields, though output schema is absent. Works well with annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for locationId and locale. The description repeats some parameter context by listing returned fields, but does not add new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the action 'Get full details' for a TripAdvisor location, lists specific fields (names, descriptions, address, coordinates, traveler ratings, phone, category, listing URLs), and distinguishes it from sibling tools like ta_get_location_photos or ta_get_location_reviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs siblings (e.g., after search to get full details). The description implies it retrieves details for a known locationId, but does not state alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_get_location_photosARead-only
Get photos for a TripAdvisor location (multi-size image URLs, source, dimensions), with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page index (1-based) | |
| size | No | Results per page (max 20) | |
| locale | No | Preferred locales for localized fields, in priority order (e.g. ["en","es"]) | |
| locationId | Yes | TripAdvisor location ID (from a search tool) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by specifying the output (URLs, source, dimensions) and pagination support. Annotations already indicate readOnlyHint and openWorldHint, and the description aligns with those without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the purpose and key return data. It is front-loaded and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with good annotations and a self-documenting schema, the description provides sufficient context about output and pagination. It could be improved by noting the necessity of locationId from a search, but schema already covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 4 parameters have descriptions). The tool description does not add additional meaning beyond what is already in the schema; it only mentions pagination which is implied by page and size parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Get photos' and the resource 'TripAdvisor location', and specifies the returned data: 'multi-size image URLs, source, dimensions'. It also mentions pagination, which distinguishes it from sibling tools like ta_get_location_details or ta_get_location_reviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving photos, but does not explicitly state when to use versus alternatives or any exclusions. Sibling tool names provide context, but no direct guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_get_location_reviewsARead-only
Get traveler reviews for a TripAdvisor location, with pagination. Reviewer avatars and other image URLs are dropped by default; pass view:"full" for TripAdvisor's whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page index (1-based) | |
| size | No | Results per page (max 20) | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns TripAdvisor's whole records. | |
| locale | No | Preferred locales for localized fields, in priority order (e.g. ["en","es"]) | |
| locationId | Yes | TripAdvisor location ID (from a search tool) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already signal a safe, externally-sourced read operation. The description adds useful behavioral detail beyond those annotations: avatars and image URLs are dropped by default, and passing view:"full" returns TripAdvisor's whole records. This helps the agent predict response differences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core purpose and pagination are front-loaded, and the important default-vs-full behavior is explained immediately after. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated listing tool, the description covers the essential invocation context: resource, pagination, and response-shape behavior. The schema handles parameter details. It does not describe the output shape, but no output schema exists and the tool's read-only nature lowers the risk of misinterpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds practical meaning by explaining the default effect of the view parameter and the pagination capability, which helps an agent choose the right values without diving into schema nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get traveler reviews for a TripAdvisor location. Saying "traveler reviews" cleanly distinguishes this from the sibling tools for search, details, photos, and general location lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the context clear: use this tool when traveler reviews for a location are needed. It does not explicitly name alternatives or exclusions, but the sibling names and the singular review focus provide enough directional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_get_locationsARead-only
Get details for MULTIPLE locations in one call (batch). Pass an array of location ids — cheaper than repeated ta_get_location_details. Unknown or unlicensed ids are silently omitted. Returns slim summaries by default; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Location IDs to fetch (1–50) | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns TripAdvisor's whole records. | |
| locale | No | Preferred locales for localized fields, in priority order (e.g. ["en","es"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the readOnlyHint and openWorldHint annotations: it discloses that unknown or unlicensed ids are silently omitted, which is critical for interpreting sparse results. It also notes default vs. full response shapes, though the schema already details this. This is helpful behavior disclosure without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences that front-load the core purpose and the key behavioral caveat. Every sentence adds value: purpose, cost comparison, silent omission, and view behavior. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does enough to set expectations for the response (slim summaries vs. full records) and covers the main edge case (silently omitted ids). Locale parameter is left to the schema, which is acceptable. It is complete enough for an agent to decide when and how to invoke, though a bit more detail on the response structure would push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters. The description mostly echoes what the schema states (array of ids, full view option) rather than adding new parameter-level meaning. Baseline 3 is appropriate; no additional semantics are introduced in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets details for multiple locations in one batch call, contrasting it with the single-location sibling ta_get_location_details. The verb 'Get' plus resource 'locations' and the MULTIPLE/batch qualifier leave no ambiguity about what this tool does and how it differs from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly positions the tool as the cheaper alternative to repeated ta_get_location_details calls, giving a clear 'when to use' condition. The note about unknown or unlicensed ids being silently omitted also helps the agent set expectations before invoking and advises against using this when missing ids matter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_search_locationsARead-only
Search TripAdvisor locations (restaurants, attractions, hotels) by name. Returns matches with a location id for the detail tools, plus pagination. Returns slim summaries by default; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page index (1-based) | |
| size | No | Results per page (max 20) | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns TripAdvisor's whole records. | |
| query | Yes | Text to search location names for | |
| locale | No | Preferred locales for localized fields, in priority order (e.g. ["en","es"]) | |
| category | No | Restrict to one category | |
| geo_name | No | City, town, or country name to scope the search | |
| postal_code | No | Postal/ZIP code (takes precedence over geo_name) | |
| country_code | No | Alpha-2 country code (e.g. "US") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds useful behavioral context beyond those annotations: results are slim by default, pagination is included, and view:"full" returns complete records. This is meaningful for an agent deciding whether the default response is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the action and scope come first, followed by the output contract and the key view modifier. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema, the description sufficiently conveys what the agent can expect: location ids, pagination, and slim-vs-full response shapes. The remaining parameter details are fully covered by the input schema, though the description could have briefly mentioned scoping filters like geo_name or postal_code.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by mapping the categories to "restaurants, attractions, hotels" and clarifying the effect of the view parameter between slim and full records, which complements the schema's enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (search TripAdvisor locations by name) and resource type (restaurants, attractions, hotels). It also explains the key output (location ids for detail tools) and pagination, which helps position it against the get_* and search_nearby siblings, though it does not explicitly name a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended workflow: search by name, then use the returned location id with the detail tools. It does not explicitly state when to prefer ta_search_nearby or ta_get_locations instead, nor does it mention exclusions such as searching by coordinates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_search_nearbyARead-only
Find TripAdvisor locations near a point within a radius, or inside a bounding box. Center by lat+lon+radius, by a reference location_id+radius, or by a sw/ne bounding box. Returns matches with distance and a location id. Returns slim summaries by default; pass view:"full" for the whole records.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Center latitude (with lon+radius) | |
| lon | No | Center longitude (with lat+radius) | |
| page | No | Page index (1-based) | |
| size | No | Results per page (max 20) | |
| sort | No | Sort order (default distance) | |
| unit | No | Radius unit (default MI) | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; "full" returns TripAdvisor's whole records. | |
| locale | No | Preferred locales for localized fields, in priority order (e.g. ["en","es"]) | |
| ne_lat | No | Bounding box NE latitude | |
| ne_lon | No | Bounding box NE longitude | |
| radius | No | Search radius (required with lat/lon or location_id; must be > 0) | |
| sw_lat | No | Bounding box SW latitude | |
| sw_lon | No | Bounding box SW longitude | |
| category | No | Restrict to one category | |
| min_rating | No | Minimum traveler rating (1.0–5.0) | |
| location_id | No | Reference location as center (with radius) | |
| include_photo | No | Include a photo per result |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true. The description adds useful behavioral detail beyond that: it states that results include distance and a location id, and that slim summaries are returned by default while view:'full' returns whole records. This helps the agent understand response shape expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loads the core purpose, and every clause adds information: the spatial modes, the response fields, and the view switch. There is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count, 100% schema coverage, and no output schema, the description is adequately complete: it explains the essential invocation modes and the output shape. It could go slightly further by explicitly stating that the three center modes are mutually exclusive, but the word 'or' conveys that reasonably well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds semantic grouping by explaining that lat+lon, location_id, and sw/ne bbox each serve as different center/region modes, and clarifies the meaning of the default versus full view. This exceeds the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find TripAdvisor locations near a point within a radius, or inside a bounding box.' It clearly differentiates this tool from siblings like ta_search_locations and ta_get_locations by emphasizing geospatial proximity search, so an agent can tell what this tool is for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by enumerating the three supported center modes: lat+lon+radius, location_id+radius, and sw/ne bounding box. It does not explicitly name alternative sibling tools or tell the agent when not to use this tool, but the mode guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_web_get_locationARead-only
Get a TripAdvisor location's core details (name, rating, review count, address, coordinates, phone, photo, listing URL) by location ID, read from the public page via the browser bridge. Works without an API key — use this when ta_get_location_details is unavailable or its key is blocked. Covers attractions, hotels, and restaurants. Does not return individual review text.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | Yes | TripAdvisor location ID (from a search tool) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavioral traits beyond annotations: reads from public page via browser bridge, works without API key, does not return individual review text. Annotations already declare readOnlyHint and openWorldHint, and description adds useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main action, no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema), the description adequately lists return fields, covers supported location types, and notes what it does not return. Complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter locationId, and the description repeats the same description from the schema without adding new semantic meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets core TripAdvisor location details by ID, listing specific fields, and distinguishes from sibling ta_get_location_details by noting it uses browser bridge and works without API key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this tool when ta_get_location_details is unavailable or its key is blocked, providing clear context for when to use vs alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ta_web_healthcheckVerify the fetchproxy bridge end-to-endARead-onlyIdempotent
Round-trips a small public www.tripadvisor.com URL (/) through the fetchproxy bridge 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 'real www.tripadvisor.com-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only, no auth required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it makes an external network round-trip, requires no auth, returns specific diagnostic fields, and distinguishes failure categories such as 'bridge never came up' versus 'extension not connected.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every phrase earns its place: the action, exact test target, returned diagnostics, failure categories, usage trigger, and auth requirements are all packed in without redundancy. The key verb and purpose are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the full burden of explaining behavior, return values, and usage. It does so thoroughly by enumerating the diagnostics, the failure modes it disambiguates, and the precise condition under which to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter documentation burden. The schema is empty and fully covered, and the description clarifies that the tool performs a fixed diagnostic action without requiring inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action — round-tripping a small public Tripadvisor URL through the fetchproxy bridge — and clearly identifies the output as diagnostics. It distinguishes this from the sibling data-fetching tools by framing it as a health check for the bridge rather than a content lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to call: 'Call this when a real tool fails and you want to know which hop broke.' This gives a clear diagnostic trigger context, though it does not spell out when not to use it or name alternative diagnostic tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.5.1- Changed
ta_get_location_reviews1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns TripAdvisor's whole records.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
ta_get_locations2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return a slim summary per location instead of full records", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns TripAdvisor's whole records.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
ta_search_locations2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns TripAdvisor's whole records.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
ta_search_nearby2 fields changed- removed
Input schema / properties / compactRemoved value: -{ - "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records", - "type": "boolean" -} - added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact returns the slim projection where one exists and strips image URLs elsewhere; \"full\" returns TripAdvisor's whole records.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
3 tool updates
v0.3.0- Added
ta_get_locations - Changed
ta_search_locations1 field changed- added
Input schema / properties / compactAdded value: +{ + "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records", + "type": "boolean" +}
- Changed
ta_search_nearby10 fields changed- added
Input schema / properties / compactAdded value: +{ + "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records", + "type": "boolean" +} - changed
Input schema / properties / lat / descriptionPrevious value: -"Center latitude"New value: +"Center latitude (with lon+radius)" - added
Input schema / properties / location_idAdded value: +{ + "description": "Reference location as center (with radius)", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +} - changed
Input schema / properties / lon / descriptionPrevious value: -"Center longitude"New value: +"Center longitude (with lat+radius)" - added
Input schema / properties / ne_latAdded value: +{ + "description": "Bounding box NE latitude", + "maximum": 90, + "minimum": -90, + "type": "number" +} - added
Input schema / properties / ne_lonAdded value: +{ + "description": "Bounding box NE longitude", + "maximum": 180, + "minimum": -180, + "type": "number" +} - changed
Input schema / properties / radius / descriptionPrevious value: -"Search radius (must be > 0)"New value: +"Search radius (required with lat/lon or location_id; must be > 0)" - added
Input schema / properties / sw_latAdded value: +{ + "description": "Bounding box SW latitude", + "maximum": 90, + "minimum": -90, + "type": "number" +} - added
Input schema / properties / sw_lonAdded value: +{ + "description": "Bounding box SW longitude", + "maximum": 180, + "minimum": -180, + "type": "number" +} - removed
Input schema / requiredRemoved value: -[ - "lat", - "lon", - "radius" -]
7 tool updates
v0.1.0- Changed
ta_get_location_details3 fields changed- removed
Input schema / properties / currencyRemoved value: -{ - "description": "ISO 4217 currency code for prices (default: USD)", - "type": "string" -} - removed
Input schema / properties / languageRemoved value: -{ - "description": "Result language code (default: en)", - "type": "string" -} - added
Input schema / properties / localeAdded value: +{ + "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
ta_get_location_photos7 fields changed- removed
Input schema / properties / languageRemoved value: -{ - "description": "Caption language code (default: en)", - "type": "string" -} - removed
Input schema / properties / limitRemoved value: -{ - "description": "Number of photos to return", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" -} - added
Input schema / properties / localeAdded value: +{ + "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])", + "items": { + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / offsetRemoved value: -{ - "description": "Index of the first photo", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" -} - added
Input schema / properties / pageAdded value: +{ + "description": "Page index (1-based)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / sizeAdded value: +{ + "description": "Results per page (max 20)", + "maximum": 20, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / sourceRemoved value: -{ - "description": "Comma-separated photo sources to allow: Expert, Management, Traveler (default: all)", - "pattern": "^(Expert|Management|Traveler)(,(Expert|Management|Traveler))*$", - "type": "string" -}
- Changed
ta_get_location_reviews6 fields changed- removed
Input schema / properties / languageRemoved value: -{ - "description": "Review language code (default: en)", - "type": "string" -} - removed
Input schema / properties / limitRemoved value: -{ - "description": "Number of reviews to return", - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" -} - added
Input schema / properties / localeAdded value: +{ + "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])", + "items": { + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / offsetRemoved value: -{ - "description": "Index of the first review", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" -} - added
Input schema / properties / pageAdded value: +{ + "description": "Page index (1-based)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / sizeAdded value: +{ + "description": "Results per page (max 20)", + "maximum": 20, + "minimum": 1, + "type": "integer" +}
- Changed
ta_search_locations17 fields changed- removed
Input schema / properties / addressRemoved value: -{ - "description": "Address filter", - "type": "string" -} - changed
Input schema / properties / category / descriptionPrevious value: -"Restrict results to one property type"New value: +"Restrict to one category" - changed
Input schema / properties / category / enumPrevious value: -[ - "hotels", - "attractions", - "restaurants", - "geos" -]New value: +[ + "RESTAURANT", + "ATTRACTION", + "HOTEL" +] - added
Input schema / properties / country_codeAdded value: +{ + "description": "Alpha-2 country code (e.g. \"US\")", + "maxLength": 2, + "minLength": 2, + "type": "string" +} - added
Input schema / properties / geo_nameAdded value: +{ + "description": "City, town, or country name to scope the search", + "type": "string" +} - removed
Input schema / properties / languageRemoved value: -{ - "description": "Result language code (default: en)", - "type": "string" -} - removed
Input schema / properties / latLongRemoved value: -{ - "description": "Center point to scope the search, e.g. \"42.3455,-71.10767\"", - "pattern": "^-?\\d+(\\.\\d+)?\\s*,\\s*-?\\d+(\\.\\d+)?$", - "type": "string" -} - added
Input schema / properties / localeAdded value: +{ + "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / pageAdded value: +{ + "description": "Page index (1-based)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / phoneRemoved value: -{ - "description": "Phone number filter (spaces/dashes ok, no leading \"+\")", - "type": "string" -} - added
Input schema / properties / postal_codeAdded value: +{ + "description": "Postal/ZIP code (takes precedence over geo_name)", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Text to search location names for", + "maxLength": 500, + "minLength": 1, + "type": "string" +} - removed
Input schema / properties / radiusRemoved value: -{ - "description": "Search radius around latLong (must be > 0)", - "exclusiveMinimum": 0, - "type": "number" -} - removed
Input schema / properties / radiusUnitRemoved value: -{ - "description": "Unit for radius", - "enum": [ - "km", - "mi", - "m" - ], - "type": "string" -} - removed
Input schema / properties / searchQueryRemoved value: -{ - "description": "Text to search location names for", - "minLength": 1, - "type": "string" -} - added
Input schema / properties / sizeAdded value: +{ + "description": "Results per page (max 20)", + "maximum": 20, + "minimum": 1, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "searchQuery" -]New value: +[ + "query" +]
- Changed
ta_search_nearby18 fields changed- removed
Input schema / properties / addressRemoved value: -{ - "description": "Address filter", - "type": "string" -} - changed
Input schema / properties / category / descriptionPrevious value: -"Restrict results to one property type"New value: +"Restrict to one category" - changed
Input schema / properties / category / enumPrevious value: -[ - "hotels", - "attractions", - "restaurants", - "geos" -]New value: +[ + "RESTAURANT", + "ATTRACTION", + "HOTEL" +] - added
Input schema / properties / include_photoAdded value: +{ + "description": "Include a photo per result", + "type": "boolean" +} - removed
Input schema / properties / languageRemoved value: -{ - "description": "Result language code (default: en)", - "type": "string" -} - added
Input schema / properties / latAdded value: +{ + "description": "Center latitude", + "maximum": 90, + "minimum": -90, + "type": "number" +} - removed
Input schema / properties / latLongRemoved value: -{ - "description": "Center point, e.g. \"42.3455,-71.10767\"", - "pattern": "^-?\\d+(\\.\\d+)?\\s*,\\s*-?\\d+(\\.\\d+)?$", - "type": "string" -} - added
Input schema / properties / localeAdded value: +{ + "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / lonAdded value: +{ + "description": "Center longitude", + "maximum": 180, + "minimum": -180, + "type": "number" +} - added
Input schema / properties / min_ratingAdded value: +{ + "description": "Minimum traveler rating (1.0–5.0)", + "maximum": 5, + "minimum": 1, + "type": "number" +} - added
Input schema / properties / pageAdded value: +{ + "description": "Page index (1-based)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / phoneRemoved value: -{ - "description": "Phone number filter (spaces/dashes ok, no leading \"+\")", - "type": "string" -} - changed
Input schema / properties / radius / descriptionPrevious value: -"Search radius around latLong (must be > 0)"New value: +"Search radius (must be > 0)" - removed
Input schema / properties / radiusUnitRemoved value: -{ - "description": "Unit for radius", - "enum": [ - "km", - "mi", - "m" - ], - "type": "string" -} - added
Input schema / properties / sizeAdded value: +{ + "description": "Results per page (max 20)", + "maximum": 20, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / sortAdded value: +{ + "description": "Sort order (default distance)", + "enum": [ + "distance", + "rating" + ], + "type": "string" +} - added
Input schema / properties / unitAdded value: +{ + "description": "Radius unit (default MI)", + "enum": [ + "MI", + "KM" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "latLong" -]New value: +[ + "lat", + "lon", + "radius" +]
- Added
ta_web_get_location - Added
ta_web_healthcheck
5 tool updates
v0.0.0- First observed
ta_get_location_details - First observed
ta_get_location_photos - First observed
ta_get_location_reviews - First observed
ta_search_locations - First observed
ta_search_nearby
TDQS
Search and retrieval tools are mostly distinct, but ta_get_locations and ta_get_location_details overlap in purpose (batch vs single details) and ta_web_get_location duplicates ta_get_location_details as a fallback. Descriptions cross-reference these relationships clearly, so an agent can generally select correctly after reading them.
All names share a ta_ prefix and snake_case, and most use search_/get_ verbs followed by a resource. The deviations are ta_web_healthcheck (noun rather than verb) and ta_web_get_location's web_ prefix, but these are minor and predictable.
Eight tools is a well-scoped set for a TripAdvisor read-only data server: two search modes, four location-data/resource getters, and two web-bridge utilities. None feel redundant enough to cut, and the count is comfortably in the ideal 3–15 range.
The core domain—location search, nearby discovery, batch lookup, full details, photos, and reviews—is covered, and the web fallback plus healthcheck address access failures. The only minor gap is that the web fallback doesn't extend to photos/reviews, so an API outage would still block those workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Scrape TripAdvisor reviews for hotels, restaurants, attractions, and activities.
Search and explore a global travel points-of-interest catalog (cities, countries, POIs).
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Read and update TravCozy trips: flights, hotels, trains, car rentals and transfers.
1
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables LLMs to perform travel-related tasks by interacting with Google Maps and travel planning services including location search, place details, and travel time calculations.54299MIT
- AlicenseBqualityDmaintenanceThis MCP server provides access to TripAdvisor data for planning vacations, enabling users to search for and get details about locations, attractions, restaurants, and hotels through an interactive planning experience.42Apache 2.0
- AlicenseBqualityBmaintenanceMCP server that enables LLMs to interact with Tripadvisor API, supporting location data, reviews, and photos through standardized MCP interfaces563MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with TripIt travel planning service, allowing users to manage trips, hotel reservations, flights, transport, activities, and documents via natural language.1004-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/chrischall/tripadvisor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server