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.7/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 safety profile is covered. The description adds useful behavioral context: incidental image URLs are dropped by default, and view:"full" returns TripAdvisor's entire record. This is concrete, beyond the structured annotations, and does not contradict them.

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 purposeful sentences: the first enumerates the returned fields, the second explains the compact/full projection behavior. It is front-loaded with the core purpose and contains no filler or redundant restatement of the schema.

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 compensates by listing the main returned field categories and clarifying the default projection behavior. The main gap is the absence of guidance for selecting this tool over sibling location tools, but overall the description is sufficient for correct invocation given the low complexity and full schema coverage.

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 baseline is 3. The description adds meaning to the view parameter by giving a concrete example of what compact drops (rating-icon and incidental image URLs). It does not independently explain locale or locationId, but the schema already does that adequately.

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 names a clear verb ('get full details'), a specific resource (TripAdvisor location), and enumerates the fields returned: names, descriptions, address, coordinates, ratings, phone, category, and listing URLs. This distinguishes it from photo/review/search siblings by content, though it does not explicitly differentiate from ta_web_get_location.

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?

No explicit when-to-use guidance or alternatives are given. The only conditional instruction is about passing view:"full", which is a behavior choice, not a routing decision. Using this after a search is implied by the schema note on locationId, but the description itself does not say when to choose this tool over siblings.

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

A3.9/5.0
Behavior4/5

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

Annotations already indicate a read-only, open-world operation. The description adds useful behavioral context: results are paginated and include specific image-related fields. It does not explain pagination termination semantics, but given the annotation coverage this is acceptable.

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?

A single sentence that front-loads the action and resource, then packs the return details and pagination into a parenthetical. Every phrase earns its place; no filler or redundancy.

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

Completeness3/5

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

The description gives the key return fields and mentions pagination, and the schema fully documents parameters. However, with no output schema, an agent is not told how to detect the last page or what the response envelope looks like, leaving a minor but real gap.

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%, so the schema already documents all four parameters. The description only generically references pagination, adding no meaningful parameter semantics beyond what the schema provides.

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 names a specific action ('Get photos') and a specific resource ('TripAdvisor location'), then lists the meaningful payload characteristics (multi-size image URLs, source, dimensions). It is clearly distinct from sibling tools like reviews, details, and search.

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 intended use is inferable: call this when you need photos for a TripAdvisor location. However, it does not explicitly state when not to use it or mention alternatives like ta_get_location_details or ta_get_location_reviews.

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.3/5.0
Behavior4/5

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

Annotations already mark the tool read-only, and the description adds real behavioral detail: pagination support and the default stripping of reviewer avatars/image URLs, plus the view:'full' opt-in. It does not discuss rate limits or response envelopes, but that is less critical given the readOnlyHint.

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 deliver the purpose, pagination, and the non-obvious default behavior up front. Every clause earns its place with no filler.

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 paginated listing with a fully documented schema and clear annotations, the description is sufficient. An agent knows what it retrieves, how to paginate, and how to opt into full records without needing further context.

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%, so all five parameters are already documented with types, constraints, and enum meanings. The description's view commentary mirrors the schema's view description rather than adding new parameter meaning.

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 operation ('Get traveler reviews'), the resource ('a TripAdvisor location'), and a key capability (pagination). This clearly distinguishes it from related siblings like ta_get_location_photos and ta_get_location_details.

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 phrasing makes the intended use obvious: retrieve reviews for a location. It does not explicitly name alternatives or exclusion cases, but siblings are semantically distinct enough that an agent is unlikely to confuse this with photo or location-detail tools.

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.9/5.0
Behavior5/5

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

The annotations already mark this read-only and open-world, but the description adds genuinely useful behavior: unknown or unlicensed ids are silently omitted, and slim summaries are returned by default unless full is requested. This goes well beyond the structured fields.

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 core purpose, and every sentence earns its place: what it does, how to invoke it, and the key behavioral caveat. No filler or redundancy.

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 batch read tool with full schema coverage and read-only/open-world annotations, this description is complete enough for an agent to select and call it correctly. It covers the batch behavior, output shape options, and important silent-omission behavior without needing an output schema.

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 extra meaning by explaining the batch benefit, the silent omission of invalid ids, and the default/compact vs full response distinction. This goes beyond the schema's field-level descriptions.

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?

States a specific verb and resource: getting details for multiple locations in one batch call. It explicitly distinguishes itself from the sibling ta_get_location_details, so an agent can tell them apart immediately.

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?

Names the alternative (repeated ta_get_location_details), explains why batch is cheaper, and gives the action required (pass an array of ids). It also tells the agent how to switch output shape with view:"full", leaving little to inference.

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

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=truecribing safety and world-open behavior. The description adds beyond that: a default slim summary response, the ability to pass view:"full" for complete records, the presence of pagination, and that returned IDs feed the detail tools. It does not contradict the 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 compact and efficient: two sentences convey the verb, resource, scope, output behavior, pagination, and view switching. It front-loads the search name and purpose before touching response details, with 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?

For a 9-parameter tool with no output schema, the description covers the critical use context: it returns matches, each with a location id, supports pagination, and defaults to slim records unless view:"full" is passed. It does not describe the exact summary record shape or pagination mechanics, but those are adequately covered by the fully described parameter schema.

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%, so the schema already documents every parameter. The description only reinforces the view parameter (e.g., pass view:"full") without adding new meaning to query, locale, geo_name, postal_code, or the pagination parameters. This matches the baseline 3 for a fully documented schema.

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 uses a specific verb ('Search') and a clear resource ('TripAdvisor locations') with the enumerated categories (restaurants, attractions, hotels). It adds that results include a location id for the detail tools, which distinguishes this search tool from the sibling detail tools and from ta_search_nearby via the 'by name' qualifier.

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 a workflow: use this search to get a location id, then use the detail tools. However, it does not explicitly state when NOT to use this tool or name alternatives such as ta_search_nearby for proximity-based searches or ta_get_locations when IDs are already known. The guidance is present but only implicit.

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.2/5.0
Behavior4/5

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

Annotations already convey read-only and open-world behavior, so the bar is lower. The description adds value by disclosing that slim summaries are the default and that view='full' returns whole records, plus that results carry distance and location id. It does not cover pagination or errors, but those are not critical given the 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?

Three sentences, each carrying distinct information: purpose, parameter modes, and return shape. No filler or repetition; the structure front-loads the core action before the detailed modes.

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 17-parameter tool with no output schema, the description covers the essential conditional groups and response-shape options. It does not explicitly state that exactly one mode must be chosen or define pagination defaults, but the schema covers defaults and the mode phrasing implies alternatives. Overall it is sufficient for correct invocation.

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 real semantic value by grouping parameters into three accepted modes ('Center by lat+lon+radius, by a reference location_id+radius, or by a sw/ne bounding box') and clarifying the 'view' parameter's default behavior, which is above the baseline.

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: 'Find TripAdvisor locations near a point within a radius, or inside a bounding box.' This clearly distinguishes it from sibling search tools like ta_search_locations by emphasizing geospatial proximity and box searches.

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?

It explains three invocation modes (lat/lon+radius, location_id+radius, bounding box), giving clear context on how to parameterize the call. However, it does not explicitly state when to prefer this tool over ta_search_locations or mention exclusions, so usage guidance is implied rather than explicit.

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.5/5.0
Behavior4/5

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

The annotations already signal read-only and open-world behavior, and the description adds meaningful context: it reads from the public page via the browser bridge, requires no API key, and does not return individual review text. This goes beyond what the annotations convey, though it does not discuss failure modes or rate limits.

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 three sentences with no wasted words: the first defines the operation and outputs, the second gives the alternative-selection condition, and the third clarifies scope and exclusions. Important information is front-loaded.

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 a single documented parameter, read-only/open-world annotations, and no output schema, the description is complete enough: it names the returned fields, the data source, the no-API-key condition, supported place types, and a key exclusion. An agent can select and invoke this tool correctly.

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?

There is only one parameter and the schema already documents it fully ("TripAdvisor location ID (from a search tool)"). The description repeats that the lookup is by location ID but adds no new parameter-specific meaning, 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?

States a specific verb and resource: "Get a TripAdvisor location's core details" and lists the exact fields returned. It also distinguishes itself from the sibling ta_get_location_details by noting it reads via the browser bridge and works without an API key, and from review tools by explicitly excluding review text.

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?

Provides an explicit condition: "use this when ta_get_location_details is unavailable or its key is blocked." It also clarifies the entity coverage (attractions, hotels, restaurants) and the exclusion of review text, giving clear when-to-use guidance relative to siblings.

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.7/5.0
Behavior5/5

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

Annotations already mark readOnlyHint, openWorldHint, and idempotentHint, and the description adds valuable non-redundant behavior: 'no auth required', the exact list of returned diagnostics (role, port, version, extension link, elapsed time), and the failure-mode hints. This exceeds what annotations alone convey.

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 front-loaded with the action and then packs diagnostic details and usage guidance into two concise sentences. Every clause earns its place; there is no filler or repetition of schema/annotation content.

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 parameters and no output schema, the description fully compensates by detailing both the inputs (implicit fixed URL) and the output diagnostics, including how to interpret the plain-English hints. It also clarifies authentication needs and distinguishes failure modes, making it complete for an agent.

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 the baseline is 4 per the rubric. The description correctly notes that it uses a fixed public URL, leaving no parameter ambiguity.

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 action and resource: 'Round-trips a small public www.tripadvisor.com URL (/) through the fetchproxy bridge' and names the exact diagnostics returned. This is clearly distinct from sibling data-retrieval tools like ta_get_location_reviews or ta_search_locations.

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 explicitly states when to call it: 'Call this when a real tool fails and you want to know which hop broke.' It provides clear context but does not name alternatives or explicitly state when not to use it, so it stops short of a 5.

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. 8 tool updatesv1.0.0
    • Changedta_get_location_details1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_get_location_photos1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_get_location_reviews1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_get_locations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_search_locations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_search_nearby1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_web_get_location1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedta_web_healthcheck1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. 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"
        +}
  3. 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"
        +}
  4. 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"
        -]
  5. 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
  6. 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

Disambiguation3/5

Most tools target clear actions (search, nearby, photos, reviews, healthcheck), but there is real overlap among ta_get_locations, ta_get_location_details, and ta_web_get_location—all return location details in slightly different modes. The descriptions do clarify batch vs single vs API-key-free fallback, so an agent can disambiguate if it reads carefully.

Naming Consistency4/5

The ta_ prefix and get/search verb pattern are consistent overall. Minor deviations include ta_web_healthcheck (a noun instead of verb_noun) and the awkward ta_web_get_location placement, plus plural/singular inconsistencies like ta_get_locations vs ta_get_location_details.

Tool Count5/5

Eight tools is a well-scoped size for a TripAdvisor location server. Each tool covers a distinct retrieval need (search, nearby, details, batch, photos, reviews, diagnostics, web fallback) without bloat.

Completeness5/5

The read-only domain is fully covered: search by name, proximity search, single and batch details, photos, reviews, and a fallback/diagnostic path. No obvious lifecycle operations are missing because the TripAdvisor domain is inherently read-only.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers