Skip to main content
Glama

tripadvisor-mcp

npm

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

ta_search_locations

Search locations by name (optionally scoped by category, country/geo/postal code) — paginated; compact:true for slim summaries

ta_search_nearby

Find locations near a lat/lon+radius, a location_id+radius, or inside a sw/ne bounding box (category, min rating, sort) — compact:true supported

ta_get_location_details

Full details: names, descriptions, address, coordinates, traveler ratings, phone, listing URLs

ta_get_locations

Batch — details for multiple location ids in one call (cheaper than N detail calls); compact:true supported

ta_get_location_photos

Photos with multi-size image URLs, source, and dimensions — paginated

ta_get_location_reviews

Traveler reviews — paginated

ta_web_healthcheck

Diagnose the optional tripadvisor.com browser-bridge connection (see below)

ta_web_get_location

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

TRIPADVISOR_API_KEY

yes

Terra API key, sent as the X-API-Key header.

TRIPADVISOR_CACHE_TTL

no

Seconds to cache search responses (default: 300; 0 disables).

TRIPADVISOR_STATIC_CACHE_TTL

no

Seconds to cache details/photos/reviews (default: 3600; 0 disables).

TRIPADVISOR_REQUEST_TIMEOUT_MS

no

Per-request timeout for the optional browser bridge (default: 30000).

TRIPADVISOR_DEBUG_LOG

no

Set to 1 to log browser-bridge requests to stderr.

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 tools
ta_get_location_detailsA
Read-only

Get full details for a TripAdvisor location: names, descriptions, address, coordinates, traveler ratings, phone, category, and listing URLs. Rating-icon and other incidental image URLs are dropped by default; pass view:"full" for TripAdvisor's whole record.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoResponse 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.
localeNoPreferred locales for localized fields, in priority order (e.g. ["en","es"])
locationIdYesTripAdvisor location ID (from a search tool)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral detail beyond the annotations: default dropping of rating-icon and incidental image URLs, plus the view:"full" escape hatch that returns TripAdvisor's whole record. This gives an agent a clearer expectation of response-shape behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core purpose front-loaded and the important view behavior in the second sentence. Every clause adds information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-location detail tool with full schema coverage and readOnly/openWorld annotations, the description covers the return content, the full-record option, and the filtering default. There is no output schema, so the explicit field list helps compensate, and nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents locationId, locale, and view with their meanings and enum options. The description adds no meaningful parameter semantics beyond what the schema contains, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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, 'Get full details for a TripAdvisor location,' and enumerates the exact field categories returned (names, descriptions, address, coordinates, ratings, phone, category, listing URLs). This clearly differentiates it from sibling tools like photo/review/search tools, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool versus alternatives such as ta_search_locations or ta_get_locations. It mentions the view option but gives no explicit guidance about prerequisites, exclusions, or the search-tool origin of locationId; that context only appears in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ta_get_location_photosA
Read-only

Get photos for a TripAdvisor location (multi-size image URLs, source, dimensions), with pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage index (1-based)
sizeNoResults per page (max 20)
localeNoPreferred locales for localized fields, in priority order (e.g. ["en","es"])
locationIdYesTripAdvisor location ID (from a search tool)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_reviewsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage index (1-based)
sizeNoResults per page (max 20)
viewNoResponse 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.
localeNoPreferred locales for localized fields, in priority order (e.g. ["en","es"])
locationIdYesTripAdvisor location ID (from a search tool)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_locationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesLocation IDs to fetch (1–50)
viewNoResponse 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.
localeNoPreferred locales for localized fields, in priority order (e.g. ["en","es"])

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_locationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage index (1-based)
sizeNoResults per page (max 20)
viewNoResponse 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.
queryYesText to search location names for
localeNoPreferred locales for localized fields, in priority order (e.g. ["en","es"])
categoryNoRestrict to one category
geo_nameNoCity, town, or country name to scope the search
postal_codeNoPostal/ZIP code (takes precedence over geo_name)
country_codeNoAlpha-2 country code (e.g. "US")

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_nearbyA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoCenter latitude (with lon+radius)
lonNoCenter longitude (with lat+radius)
pageNoPage index (1-based)
sizeNoResults per page (max 20)
sortNoSort order (default distance)
unitNoRadius unit (default MI)
viewNoResponse 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.
localeNoPreferred locales for localized fields, in priority order (e.g. ["en","es"])
ne_latNoBounding box NE latitude
ne_lonNoBounding box NE longitude
radiusNoSearch radius (required with lat/lon or location_id; must be > 0)
sw_latNoBounding box SW latitude
sw_lonNoBounding box SW longitude
categoryNoRestrict to one category
min_ratingNoMinimum traveler rating (1.0–5.0)
location_idNoReference location as center (with radius)
include_photoNoInclude a photo per result

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_locationA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationIdYesTripAdvisor location ID (from a search tool)

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-endA
Read-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'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, openWorldHint, and idempotentHint. The description reinforces read-only with 'Read-only, no auth required' and adds substantial behavioral detail: it explains the returned diagnostics and distinguishes three failure modes ('bridge never came up' vs 'extension not connected' vs 'real www.tripadvisor.com-side problem'). This goes beyond what annotations provide and gives the agent a precise mental model of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense paragraph that front-loads the purpose and then enumerates the diagnostics. Every clause contributes value, and it is not overly verbose. It could be slightly more compact by splitting into bullet points, but it is readable and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully explains the return values (role, port, version, extension link state, elapsed time, hint). It also covers the calling scenario and failure interpretation, leaving no critical gap for a zero-param diagnostic tool. The description is complete for an agent to understand when and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is 100% trivially. Per the baseline for 0 params, a 4 is appropriate. The description mentions the input URL (a small public www.tripadvisor.com URL) but since no parameters exist, there is no need to elaborate further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('round-trips'), a resource ('fetchproxy bridge'), and lists the diagnostic outputs (role, port, version, extension link, elapsed time, hint). It is clearly distinct from the sibling tools, which all fetch location data, by focusing on infrastructure health rather than content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit trigger: 'Call this when a real tool fails and you want to know which hop broke.' It does not name specific alternatives, but the context of siblings (location-fetching tools) makes it clear this is for diagnostics, not data retrieval. It lacks an explicit 'when not to use' but the condition is strong.

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.

  1. 1 tool updatev0.6.0
    • Changedta_get_location_details1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
  2. 4 tool updatesv0.5.1
    • Changedta_get_location_reviews1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedta_get_locations2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "description": "Return a slim summary per location instead of full records",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedta_search_locations2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedta_search_nearby2 fields changed
      • removedInput schema / properties / compact
        Removed value: -{
        -  "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / view
        Added 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. 3 tool updatesv0.3.0
    • Addedta_get_locations
    • Changedta_search_locations1 field changed
      • addedInput schema / properties / compact
        Added value: +{
        +  "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records",
        +  "type": "boolean"
        +}
    • Changedta_search_nearby10 fields changed
      • addedInput schema / properties / compact
        Added value: +{
        +  "description": "Return a slim summary per result (id, name, category, city, rating, review_count, url) instead of full records",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / lat / description
        Previous value: -"Center latitude"New value: +"Center latitude (with lon+radius)"
      • addedInput schema / properties / location_id
        Added value: +{
        +  "description": "Reference location as center (with radius)",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • changedInput schema / properties / lon / description
        Previous value: -"Center longitude"New value: +"Center longitude (with lat+radius)"
      • addedInput schema / properties / ne_lat
        Added value: +{
        +  "description": "Bounding box NE latitude",
        +  "maximum": 90,
        +  "minimum": -90,
        +  "type": "number"
        +}
      • addedInput schema / properties / ne_lon
        Added value: +{
        +  "description": "Bounding box NE longitude",
        +  "maximum": 180,
        +  "minimum": -180,
        +  "type": "number"
        +}
      • changedInput schema / properties / radius / description
        Previous value: -"Search radius (must be > 0)"New value: +"Search radius (required with lat/lon or location_id; must be > 0)"
      • addedInput schema / properties / sw_lat
        Added value: +{
        +  "description": "Bounding box SW latitude",
        +  "maximum": 90,
        +  "minimum": -90,
        +  "type": "number"
        +}
      • addedInput schema / properties / sw_lon
        Added value: +{
        +  "description": "Bounding box SW longitude",
        +  "maximum": 180,
        +  "minimum": -180,
        +  "type": "number"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "lat",
        -  "lon",
        -  "radius"
        -]
  4. 7 tool updatesv0.1.0
    • Changedta_get_location_details3 fields changed
      • removedInput schema / properties / currency
        Removed value: -{
        -  "description": "ISO 4217 currency code for prices (default: USD)",
        -  "type": "string"
        -}
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Result language code (default: en)",
        -  "type": "string"
        -}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedta_get_location_photos7 fields changed
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Caption language code (default: en)",
        -  "type": "string"
        -}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "description": "Number of photos to return",
        -  "exclusiveMinimum": 0,
        -  "maximum": 9007199254740991,
        -  "type": "integer"
        -}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / offset
        Removed value: -{
        -  "description": "Index of the first photo",
        -  "maximum": 9007199254740991,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page index (1-based)",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page (max 20)",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / source
        Removed value: -{
        -  "description": "Comma-separated photo sources to allow: Expert, Management, Traveler (default: all)",
        -  "pattern": "^(Expert|Management|Traveler)(,(Expert|Management|Traveler))*$",
        -  "type": "string"
        -}
    • Changedta_get_location_reviews6 fields changed
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Review language code (default: en)",
        -  "type": "string"
        -}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "description": "Number of reviews to return",
        -  "exclusiveMinimum": 0,
        -  "maximum": 9007199254740991,
        -  "type": "integer"
        -}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / offset
        Removed value: -{
        -  "description": "Index of the first review",
        -  "maximum": 9007199254740991,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page index (1-based)",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page (max 20)",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedta_search_locations17 fields changed
      • removedInput schema / properties / address
        Removed value: -{
        -  "description": "Address filter",
        -  "type": "string"
        -}
      • changedInput schema / properties / category / description
        Previous value: -"Restrict results to one property type"New value: +"Restrict to one category"
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hotels",
        -  "attractions",
        -  "restaurants",
        -  "geos"
        -]New value: +[
        +  "RESTAURANT",
        +  "ATTRACTION",
        +  "HOTEL"
        +]
      • addedInput schema / properties / country_code
        Added value: +{
        +  "description": "Alpha-2 country code (e.g. \"US\")",
        +  "maxLength": 2,
        +  "minLength": 2,
        +  "type": "string"
        +}
      • addedInput schema / properties / geo_name
        Added value: +{
        +  "description": "City, town, or country name to scope the search",
        +  "type": "string"
        +}
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Result language code (default: en)",
        -  "type": "string"
        -}
      • removedInput schema / properties / latLong
        Removed value: -{
        -  "description": "Center point to scope the search, e.g. \"42.3455,-71.10767\"",
        -  "pattern": "^-?\\d+(\\.\\d+)?\\s*,\\s*-?\\d+(\\.\\d+)?$",
        -  "type": "string"
        -}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page index (1-based)",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / phone
        Removed value: -{
        -  "description": "Phone number filter (spaces/dashes ok, no leading \"+\")",
        -  "type": "string"
        -}
      • addedInput schema / properties / postal_code
        Added value: +{
        +  "description": "Postal/ZIP code (takes precedence over geo_name)",
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Text to search location names for",
        +  "maxLength": 500,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / radius
        Removed value: -{
        -  "description": "Search radius around latLong (must be > 0)",
        -  "exclusiveMinimum": 0,
        -  "type": "number"
        -}
      • removedInput schema / properties / radiusUnit
        Removed value: -{
        -  "description": "Unit for radius",
        -  "enum": [
        -    "km",
        -    "mi",
        -    "m"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / searchQuery
        Removed value: -{
        -  "description": "Text to search location names for",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page (max 20)",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "searchQuery"
        -]New value: +[
        +  "query"
        +]
    • Changedta_search_nearby18 fields changed
      • removedInput schema / properties / address
        Removed value: -{
        -  "description": "Address filter",
        -  "type": "string"
        -}
      • changedInput schema / properties / category / description
        Previous value: -"Restrict results to one property type"New value: +"Restrict to one category"
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hotels",
        -  "attractions",
        -  "restaurants",
        -  "geos"
        -]New value: +[
        +  "RESTAURANT",
        +  "ATTRACTION",
        +  "HOTEL"
        +]
      • addedInput schema / properties / include_photo
        Added value: +{
        +  "description": "Include a photo per result",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Result language code (default: en)",
        -  "type": "string"
        -}
      • addedInput schema / properties / lat
        Added value: +{
        +  "description": "Center latitude",
        +  "maximum": 90,
        +  "minimum": -90,
        +  "type": "number"
        +}
      • removedInput schema / properties / latLong
        Removed value: -{
        -  "description": "Center point, e.g. \"42.3455,-71.10767\"",
        -  "pattern": "^-?\\d+(\\.\\d+)?\\s*,\\s*-?\\d+(\\.\\d+)?$",
        -  "type": "string"
        -}
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Preferred locales for localized fields, in priority order (e.g. [\"en\",\"es\"])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / lon
        Added value: +{
        +  "description": "Center longitude",
        +  "maximum": 180,
        +  "minimum": -180,
        +  "type": "number"
        +}
      • addedInput schema / properties / min_rating
        Added value: +{
        +  "description": "Minimum traveler rating (1.0–5.0)",
        +  "maximum": 5,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page index (1-based)",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / phone
        Removed value: -{
        -  "description": "Phone number filter (spaces/dashes ok, no leading \"+\")",
        -  "type": "string"
        -}
      • changedInput schema / properties / radius / description
        Previous value: -"Search radius around latLong (must be > 0)"New value: +"Search radius (must be > 0)"
      • removedInput schema / properties / radiusUnit
        Removed value: -{
        -  "description": "Unit for radius",
        -  "enum": [
        -    "km",
        -    "mi",
        -    "m"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Results per page (max 20)",
        +  "maximum": 20,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Sort order (default distance)",
        +  "enum": [
        +    "distance",
        +    "rating"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / unit
        Added value: +{
        +  "description": "Radius unit (default MI)",
        +  "enum": [
        +    "MI",
        +    "KM"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "latLong"
        -]New value: +[
        +  "lat",
        +  "lon",
        +  "radius"
        +]
    • Addedta_web_get_location
    • Addedta_web_healthcheck
  5. 5 tool updatesv0.0.0
    • First observedta_get_location_details
    • First observedta_get_location_photos
    • First observedta_get_location_reviews
    • First observedta_search_locations
    • First observedta_search_nearby

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clearly distinct purposes: search, nearby search, details, photos, reviews, batch, and healthcheck. The main potential confusion is between ta_get_location_details and ta_web_get_location, which both retrieve location information by ID, though the descriptions clarify that one is API-based and the other is a web fallback.

Naming Consistency4/5

Tool names generally follow a consistent ta_get_*/ta_search_* pattern with a clear resource noun. Minor deviations include ta_web_get_location inserting 'web' into the verb position and ta_web_healthcheck being a non-resource diagnostic check, but overall the pattern is predictable.

Tool Count5/5

Eight tools is well-scoped for a TripAdvisor read-only data server. Each tool covers a distinct core operation—search, nearby search, details, web fallback, photos, reviews, batch details, and healthcheck—without unnecessary bloat.

Completeness5/5

The tool set covers the full read-only lifecycle for the domain: discovering locations via text search or nearby search, retrieving details, and accessing photos and reviews. Batch retrieval and a diagnostic healthcheck round out the surface, and write operations are not relevant for TripAdvisor public data.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers