Skip to main content
Glama

Server Details

Search about 20,000 yachts for sale, charter and sold, with where AIS last placed each one.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 36 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
YachtFinder

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation4/5

Most tools are clearly distinct: search, yacht facts, proximity listing, and inquiry drafting. The main overlap is that find_yachts has a `near` filter while yachts_near is a dedicated proximity tool, which could cause some misselection despite the descriptions clarifying the difference.

Naming Consistency3/5

The set mixes verb_noun names (find_yachts, prepare_inquiry) with noun-phrase names (yacht_facts, yachts_near). It also inconsistently uses singular `yacht` and plural `yachts`, though all names remain readable.

Tool Count4/5

Four tools is a focused, well-scoped set for a yacht catalog: search, proximity, facts, and inquiry preparation. It is slightly thin but each tool has a clear role.

Completeness4/5

The surface covers the core workflows: finding yachts, checking proximity by AIS, retrieving detailed facts, and preparing an inquiry draft. Minor gaps exist around managing drafts or exploring brokerages/harbors more directly, but agents can work around them.

Available Tools

4 tools
find_yachtsFind yachtsA
Read-onlyIdempotent
Inspect

Search YachtFinder's catalog of more than 20,000 yachts by builder, length, asking price, build year, status (for sale, for charter, reported sold, not for sale) and place. Returns up to 25 yachts, longest first by default, each with her status, the broker's asking price, YachtFinder's estimate where her page shows one, and a link to her page on yachtfinder.co. near keeps yachts whose AIS position, as the site publishes it, lies within radius_km of a named harbor or anchorage; listed_in matches the town or country the broker's listing states. A yacht listed by more than one brokerage is one result, as on yachtfinder.co, with the others in also_listed_by.

NameRequiredDescriptionDefault
nearNoA harbor, harbor town or anchorage by name, e.g. "Port Hercule", "Antibes", "Fort Lauderdale", "Off Monaco". A boat show by its name, "FLIBS" or "the show", is the yachts its page lists at its marinas now.
sortNolongest
limitNo
statusNoDefault for_sale. for_charter includes yachts offered for both.for_sale
builderNoShipyard, e.g. "Benetti", "Feadship", "Lürssen". Case and accents are ignored.
max_yearNoLatest build year.
min_yearNoEarliest build year.
listed_inNoTown or country named in the broker's listing, e.g. "Fort Lauderdale", "Italy". This is where the listing says she is, not an AIS position.
radius_kmNoWith near: the radius. Default 2 km for a harbor, 3 km for an anchorage.
max_length_mNoMaximum length overall, meters.
min_length_mNoMinimum length overall, meters.
max_price_usdNoMaximum asking price in whole US dollars.
min_price_usdNoMinimum asking price in whole US dollars (20000000 = $20M). Only yachts with a published asking price are compared.
name_containsNoPart of the yacht's name.
seen_within_hoursNoWith near: only AIS positions this recent. Default: any position the site publishes (up to 120 days).

Output Schema

NameRequiredDescription
notesYes
sourceYes
resultsYes
summaryYes
data_as_ofYesWhen YachtFinder last rebuilt the catalog this answer was read from (ISO 8601).
total_matchesYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds genuinely non-schema behavior: default ordering (longest first), the 25-result cap, and de-duplication of multi-brokerage listings with the rest surfaced in also_listed_by.

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?

Front-loads the core purpose in the first sentence, then layers geo semantics and dedup behavior. Dense but nearly every clause carries information; the return-value sentence is somewhat redundant given the output schema exists.

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 15 optional params, an output schema, and rich annotations, the description covers the ambiguities that matter: default sort, result cap, AIS vs listing location, and multi-brokerage dedup. Nothing about pagination or empty-result behavior, but no offset param exists to explain.

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 87%, so the schema documents nearly all parameters, establishing a baseline of 3. The description restates the near/radius and listed_in semantics already present in the schema and adds no syntax, units, or edge-case detail beyond that.

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?

States a specific verb and resource ('Search YachtFinder's catalog of more than 20,000 yachts') and enumerates the filterable dimensions. It does not name or differentiate itself from siblings like yachts_near or yacht_facts, so an agent must infer the split from the schemas.

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 draws a useful line between `near` (AIS-based radius search) and `listed_in` (broker's stated location), which implicitly guides filter choice. But it never says when to prefer this tool over `yachts_near` or `yacht_facts`, leaving sibling routing to inference.

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

prepare_inquiryPrepare an inquiry (never sends)AInspect

Prepare a request about one yacht for the person to review and send themselves on yachtfinder.co. This tool never sends anything: it saves a draft (the yacht, optional dates and up to 5 short questions) and returns one link. Give the person the link and tell them plainly that nothing has been sent: on that page they read and edit the draft, sign in, add their own details, and only their tap on Send sends it, under the usual inquiry limits. Take yacht from the id of a find_yachts, yachts_near or yacht_facts answer; a name is not searched. Questions are shown as plain text: links, markup and line breaks are removed. Do not put names, email addresses or phone numbers in them. The draft expires after 24 hours.

NameRequiredDescriptionDefault
yachtYesThe yacht's id from another answer (its `id` field). Not a name and not a link.
date_toNoLast day of interest, YYYY-MM-DD, with date_from.
date_fromNoFirst day of interest, YYYY-MM-DD: today or later, at most 12 months ahead.
questionsNoUp to 5 questions for the listing broker, each at most 300 characters, in the person's words.

Output Schema

NameRequiredDescription
urlYesThe page where the person reviews, edits and sends the draft.
sentYesAlways false: this tool never sends.
notesYes
yachtNo
sourceYes
summaryYes
data_as_ofYesWhen YachtFinder last rebuilt the catalog this answer was read from (ISO 8601).
expires_atYes
questions_keptNo

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations: it discloses that nothing is sent, that only the person's tap on Send sends it, that the draft expires after 24 hours, that questions are sanitized (links, markup and line breaks stripped), and that usual inquiry limits apply. The annotations only say this is a non-idempotent, non-destructive write with a closed world; the description supplies the real operational context. A slightly fuller account of the returned link or edit flow would push this to a 5.

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?

Front-loaded with the single most important fact ('never sends'), and every sentence carries usable information. It runs a little long across six sentences, but there is essentially 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 4-parameter mutation tool with an output schema present, the description covers everything the agent needs: input provenance, the human-in-the-loop send flow, the sanitization of question text, sign-in requirements, expiry and limits. Nothing material is left to inference.

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, but the description adds genuine meaning: it warns that `yacht` must be an id, not a name or link, and that questions must be the person's own words with no names, emails or phone numbers, and are rendered as plain text after stripping links and markup. Those are behavioral constraints on the parameter values that the schema does not express.

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 ('Prepare a request about one yacht') and immediately scopes the outcome ('never sends ... saves a draft ... returns one link'). It is clearly distinguished from the read-only siblings find_yachts, yachts_near and yacht_facts, which it names as the source of its input.

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 tells the agent where the `yacht` value comes from ('the `id` of a find_yachts, yachts_near or yacht_facts answer; a name is not searched') and what the agent must do with the result ('give the person the link and tell them plainly that nothing has been sent'). The not-to-do side is also covered via the PII prohibition on questions.

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

yacht_factsOne yacht's factsA
Read-onlyIdempotent
Inspect

One yacht's facts from YachtFinder: builder, year, length, status, the broker's asking price (never a sale price), YachtFinder's estimate where her page shows one, her published AIS position with its time, where her listing says she is, and her page on yachtfinder.co, with the source and date of each fact. Takes her name (add builder or length_m when several yachts share it) or her yachtfinder.co/y/ link. A yacht several brokerages list is one yacht, with each other brokerage's listing, its status and its page.

NameRequiredDescriptionDefault
yachtYesHer name, e.g. "Lady Lara", or her yachtfinder.co/y/ link or the id from another answer.
builderNoHer builder, to choose between yachts of the same name.
length_mNoHer length in meters, to choose between yachts of the same name.

Output Schema

NameRequiredDescription
foundYes
notesYes
yachtNo
sourceYes
matchesNo
summaryYes
data_as_ofYesWhen YachtFinder last rebuilt the catalog this answer was read from (ISO 8601).

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the read-only, idempotent, non-destructive profile, so the description focuses on adding real context: the price is the broker's asking price and never a sale price, each fact carries a source and date, AIS position carries a timestamp, and multi-brokerage listings are merged into one yacht with each brokerage's listing and page. That is substantive behavioral detail beyond 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.

Conciseness4/5

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

Three sentences, front-loaded with what is returned, then input forms, then the multi-brokerage aggregation note. The long field enumeration is dense but each item (asking price caveat, source and date) earns its place; minor trimming possible.

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 an output schema present, the description needn't explain return shapes, yet it still characterizes the returned facts, input modes, and the merged-listing behavior. Coverage of disambiguation and aggregation makes it complete enough to call correctly, with only the sibling-routing gap as a shortfall.

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 explains that builder and length_m disambiguate yachts sharing a name and that yacht accepts a name, link, or id. The description largely restates those points, adding no format or edge-case meaning beyond the schema, so baseline 3 applies.

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 this returns the facts for a single yacht from YachtFinder, enumerating the fields (builder, year, length, status, asking price, estimate, AIS position, listing location, page link). It is distinguishable from find_yachts by being a single-entity detail lookup, though it never names the sibling or contrasts the search-vs-detail roles explicitly.

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 tells the agent what identifier to supply (name, yachtfinder.co/y/ link, or id) and how to disambiguate with builder or length_m, which implies use after identifying a yacht. But there is no explicit when-to-use versus find_yachts or yachts_near, and no stated preconditions, so guidance is only implied.

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

yachts_nearYachts near a placeA
Read-onlyIdempotent
Inspect

List the yachts whose latest AIS position, as yachtfinder.co publishes it, lies within a radius of a named harbor or anchorage (e.g. "Port Hercule", "Antibes", "Off Monaco") or of a latitude and longitude. By default only positions from the last 24 hours. Each yacht comes with the time of her fix, her distance from the place, whether the harbor's page counts her in port, and a link to her page. A yacht whose position the site does not publish is never listed. Each yacht is listed once, however many brokerages list her.

NameRequiredDescriptionDefault
limitNo
placeNoA harbor, harbor town or anchorage by name, or a boat show ("FLIBS", "the show": the yachts its page lists at its marinas now). Give this, or latitude and longitude.
statusNoany
latitudeNoLatitude of the place to search (a harbor, an anchorage or a position at sea), in decimal degrees. Not the user's own location.
longitudeNoLongitude of the place to search, in decimal degrees. Not the user's own location.
radius_kmNoDefault 2 km for a harbor, 3 km for an anchorage, 10 km for a coordinate.
seen_within_hoursNoOnly positions this recent. Default 24.

Output Schema

NameRequiredDescription
notesYes
placeYes
sourceYes
resultsYes
summaryYes
data_as_ofYesWhen YachtFinder last rebuilt the catalog this answer was read from (ISO 8601).
total_matchesYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the behavioral rules: default 24-hour recency, yachts with unpublished positions are never listed, and each yacht appears once regardless of brokerage listings. Those are genuine, non-obvious behaviors; only the pagination/limit behavior is left unaddressed.

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 core filter is front-loaded in the first sentence and the following sentences each add distinct information (recency default, returned fields, exclusion rule, dedup rule). Dense but not padded; the opening sentence is long but does real work.

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 an output schema present, the description need not enumerate return values, and it still gives a useful summary of what accompanies each yacht plus the two non-obvious rules (exclusion of unpublished positions, per-brokerage dedup). The main remaining gap is explaining the status filter, which is fully undocumented.

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 71%, below the high-coverage threshold, so the description should compensate more than it does. The place/coordinate duality and boat-show option are already spelled out in the schema's own field descriptions, the radius defaults duplicate radius_km's schema text, and the status enum (5 values) and limit are never explained in the description.

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 specific verb and resource (list yachts) with a precise spatial scope: latest AIS position within a radius of a named harbor/anchorage or a coordinate. That scope is distinctive, but it never mentions the sibling find_yachts, so an agent must infer the boundary between 'near a place' and general yacht 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?

Usage is implied by the spatial framing and the place-or-coordinate duality, and the default 24-hour window gives useful context. There is no explicit when-to-use/when-not-to-use statement and no routing guidance versus find_yachts or yacht_facts, which are the obvious alternatives for non-spatial lookups.

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. 3 tool updates
    • Changedfind_yachts5 fields changed
      • addedOutput schema / properties / results / items / properties / asking_contested
        Added value: +{
        +  "description": "Present only where the brokerages that list her publish asking prices that disagree: her page's label and the range of their asks, \"Asking · contested $4.99M–$6.29M\". Her page then states no single ask and no percentage against our estimate. Absent otherwise.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / asking_price_usd / description
        Previous value: -"The broker's asking price in US dollars; null when none is published. Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."New value: +"The broker's asking price in US dollars; null when none is published, or where brokerages publish different asking prices for her (asking_contested). Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."
      • addedOutput schema / properties / results / items / properties / length_m / description
        Added value: +"Her length overall in meters; null where her page shows none, as where her own listing does not confirm the length (length_note)."
      • addedOutput schema / properties / results / items / properties / length_note
        Added value: +{
        +  "description": "Present only where her record holds a length her own listing does not confirm, so length_m is null: her page's words for it. Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / listed_location_note
        Added value: +{
        +  "description": "Present only where listed_location prints a country YachtFinder calculated from the town her listing states (her listing names no country): that sentence, as her page says it. Absent otherwise: the place is the listing's.",
        +  "type": "string"
        +}
    • Changedyacht_facts5 fields changed
      • addedOutput schema / properties / matches / items / properties / asking_contested
        Added value: +{
        +  "description": "Present only where the brokerages that list her publish asking prices that disagree: her page's label and the range of their asks, \"Asking · contested $4.99M–$6.29M\". Her page then states no single ask and no percentage against our estimate. Absent otherwise.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / matches / items / properties / asking_price_usd / description
        Previous value: -"The broker's asking price in US dollars; null when none is published. Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."New value: +"The broker's asking price in US dollars; null when none is published, or where brokerages publish different asking prices for her (asking_contested). Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."
      • addedOutput schema / properties / matches / items / properties / length_m / description
        Added value: +"Her length overall in meters; null where her page shows none, as where her own listing does not confirm the length (length_note)."
      • addedOutput schema / properties / matches / items / properties / length_note
        Added value: +{
        +  "description": "Present only where her record holds a length her own listing does not confirm, so length_m is null: her page's words for it. Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / matches / items / properties / listed_location_note
        Added value: +{
        +  "description": "Present only where listed_location prints a country YachtFinder calculated from the town her listing states (her listing names no country): that sentence, as her page says it. Absent otherwise: the place is the listing's.",
        +  "type": "string"
        +}
    • Changedyachts_near5 fields changed
      • addedOutput schema / properties / results / items / properties / asking_contested
        Added value: +{
        +  "description": "Present only where the brokerages that list her publish asking prices that disagree: her page's label and the range of their asks, \"Asking · contested $4.99M–$6.29M\". Her page then states no single ask and no percentage against our estimate. Absent otherwise.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / asking_price_usd / description
        Previous value: -"The broker's asking price in US dollars; null when none is published. Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."New value: +"The broker's asking price in US dollars; null when none is published, or where brokerages publish different asking prices for her (asking_contested). Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."
      • addedOutput schema / properties / results / items / properties / length_m / description
        Added value: +"Her length overall in meters; null where her page shows none, as where her own listing does not confirm the length (length_note)."
      • addedOutput schema / properties / results / items / properties / length_note
        Added value: +{
        +  "description": "Present only where her record holds a length her own listing does not confirm, so length_m is null: her page's words for it. Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / listed_location_note
        Added value: +{
        +  "description": "Present only where listed_location prints a country YachtFinder calculated from the town her listing states (her listing names no country): that sentence, as her page says it. Absent otherwise: the place is the listing's.",
        +  "type": "string"
        +}
  2. 3 tool updates
    • Changedfind_yachts5 fields changed
      • changedInput schema / properties / near / description
        Previous value: -"A harbor, harbor town or anchorage by name, e.g. \"Port Hercule\", \"Antibes\", \"Fort Lauderdale\", \"Off Monaco\"."New value: +"A harbor, harbor town or anchorage by name, e.g. \"Port Hercule\", \"Antibes\", \"Fort Lauderdale\", \"Off Monaco\". A boat show by its name, \"FLIBS\" or \"the show\", is the yachts its page lists at its marinas now."
      • addedOutput schema / properties / results / items / properties / asking_through
        Added value: +{
        +  "description": "The brokerage whose sale listing asks the asking price shown, when it is not her listing house (a charter listing priced by another house's sale ask), as her page names it. Absent otherwise.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / position / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "distance_km": {
        -        "type": "number"
        -      },
        -      "in_port": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "latitude": {
        -        "type": "number"
        -      },
        -      "longitude": {
        -        "type": "number"
        -      },
        -      "seen_at": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "distance_km": {
        +        "type": "number"
        +      },
        +      "in_port": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "latitude": {
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "type": "number"
        +      },
        +      "near_port_nm": {
        +        "description": "Present where only the yachts between her and the harbor put her on its quays (her fix more than 400 m from its point, with no berth label of its marina): how far she lies from its point, in nautical miles. Her page then says \"Near <in_port>\", never \"In\"; the harbor's page still lists her.",
        +        "type": "number"
        +      },
        +      "seen_at": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "show_marina": {
        +        "description": "For a boat show: the show marina whose ring holds her AIS fix.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / sanctions / properties / also_on
        Added value: +{
        +  "description": "Present only where she is on more than one list: each other list her record names, with its own date.",
        +  "items": {
        +    "properties": {
        +      "list": {
        +        "type": "string"
        +      },
        +      "list_date": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / results / items / properties / sanctions / properties / list / description
        Previous value: -"The list her record names: 'OFAC SDN' (the US Treasury's) or 'UK Sanctions List'."New value: +"The first list her record names: 'OFAC SDN' (the US Treasury's), 'UK Sanctions List' or 'EU Consolidated List'."
    • Changedyacht_facts4 fields changed
      • addedOutput schema / properties / matches / items / properties / asking_through
        Added value: +{
        +  "description": "The brokerage whose sale listing asks the asking price shown, when it is not her listing house (a charter listing priced by another house's sale ask), as her page names it. Absent otherwise.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / matches / items / properties / position / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "distance_km": {
        -        "type": "number"
        -      },
        -      "in_port": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "latitude": {
        -        "type": "number"
        -      },
        -      "longitude": {
        -        "type": "number"
        -      },
        -      "seen_at": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "distance_km": {
        +        "type": "number"
        +      },
        +      "in_port": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "latitude": {
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "type": "number"
        +      },
        +      "near_port_nm": {
        +        "description": "Present where only the yachts between her and the harbor put her on its quays (her fix more than 400 m from its point, with no berth label of its marina): how far she lies from its point, in nautical miles. Her page then says \"Near <in_port>\", never \"In\"; the harbor's page still lists her.",
        +        "type": "number"
        +      },
        +      "seen_at": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "show_marina": {
        +        "description": "For a boat show: the show marina whose ring holds her AIS fix.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / matches / items / properties / sanctions / properties / also_on
        Added value: +{
        +  "description": "Present only where she is on more than one list: each other list her record names, with its own date.",
        +  "items": {
        +    "properties": {
        +      "list": {
        +        "type": "string"
        +      },
        +      "list_date": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / matches / items / properties / sanctions / properties / list / description
        Previous value: -"The list her record names: 'OFAC SDN' (the US Treasury's) or 'UK Sanctions List'."New value: +"The first list her record names: 'OFAC SDN' (the US Treasury's), 'UK Sanctions List' or 'EU Consolidated List'."
    • Changedyachts_near6 fields changed
      • changedInput schema / properties / place / description
        Previous value: -"A harbor, harbor town or anchorage by name. Give this, or latitude and longitude."New value: +"A harbor, harbor town or anchorage by name, or a boat show (\"FLIBS\", \"the show\": the yachts its page lists at its marinas now). Give this, or latitude and longitude."
      • changedOutput schema / properties / place / properties / read_as / description
        Previous value: -"How the place was read: harbor, town (all its harbors), town coast or region (the harbors and anchorages followed in it), coast, place, anchorage or coordinate."New value: +"How the place was read: harbor, town (all its harbors), town coast or region (the harbors and anchorages followed in it), coast, place, anchorage, coordinate, or show (a boat show: the yachts its page lists at its marinas)."
      • addedOutput schema / properties / results / items / properties / asking_through
        Added value: +{
        +  "description": "The brokerage whose sale listing asks the asking price shown, when it is not her listing house (a charter listing priced by another house's sale ask), as her page names it. Absent otherwise.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / position / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "distance_km": {
        -        "type": "number"
        -      },
        -      "in_port": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "latitude": {
        -        "type": "number"
        -      },
        -      "longitude": {
        -        "type": "number"
        -      },
        -      "seen_at": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "distance_km": {
        +        "type": "number"
        +      },
        +      "in_port": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "latitude": {
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "type": "number"
        +      },
        +      "near_port_nm": {
        +        "description": "Present where only the yachts between her and the harbor put her on its quays (her fix more than 400 m from its point, with no berth label of its marina): how far she lies from its point, in nautical miles. Her page then says \"Near <in_port>\", never \"In\"; the harbor's page still lists her.",
        +        "type": "number"
        +      },
        +      "seen_at": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "show_marina": {
        +        "description": "For a boat show: the show marina whose ring holds her AIS fix.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / sanctions / properties / also_on
        Added value: +{
        +  "description": "Present only where she is on more than one list: each other list her record names, with its own date.",
        +  "items": {
        +    "properties": {
        +      "list": {
        +        "type": "string"
        +      },
        +      "list_date": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / results / items / properties / sanctions / properties / list / description
        Previous value: -"The list her record names: 'OFAC SDN' (the US Treasury's) or 'UK Sanctions List'."New value: +"The first list her record names: 'OFAC SDN' (the US Treasury's), 'UK Sanctions List' or 'EU Consolidated List'."
  3. 4 tool updates
    • Changedfind_yachts6 fields changed
      • changedInput schema / properties / max_length_m / description
        Previous value: -"Maximum length overall, metres."New value: +"Maximum length overall, meters."
      • changedInput schema / properties / min_length_m / description
        Previous value: -"Minimum length overall, metres."New value: +"Minimum length overall, meters."
      • changedOutput schema / properties / data_as_of / description
        Previous value: -"When YachtFinder last rebuilt the catalogue this answer was read from (ISO 8601)."New value: +"When YachtFinder last rebuilt the catalog this answer was read from (ISO 8601)."
      • addedOutput schema / properties / results / items / properties / also_listed_by
        Added value: +{
        +  "description": "The other brokerages that list this same yacht, as her page names them (\"Also listed by\"). Absent when no other brokerage lists her.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / asking_vs_estimate
        Added value: +{
        +  "description": "Where her page names the side of our estimate her asking price sits and prints no estimate figure, its words: \"Above our estimate’s range\". Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / sanctions
        Added value: +{
        +  "description": "Present only where her record puts her on a sanctions list, matched by her IMO number alone, in her yacht page's own words. Absent otherwise; its absence is not a legal clearance (her page says which lists were checked, and when).",
        +  "properties": {
        +    "heading": {
        +      "description": "As her page heads it, e.g. \"On the US sanctions list\".",
        +      "type": "string"
        +    },
        +    "line": {
        +      "description": "Her yacht page's own dated line: the list, its date, her IMO number and how it was found, the name and program the list gives her, and the advice that follows.",
        +      "type": "string"
        +    },
        +    "list": {
        +      "description": "The list her record names: 'OFAC SDN' (the US Treasury's) or 'UK Sanctions List'.",
        +      "type": "string"
        +    },
        +    "list_date": {
        +      "description": "That list's own date (YYYY-MM-DD).",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedprepare_inquiry
    • Changedyacht_facts5 fields changed
      • changedInput schema / properties / length_m / description
        Previous value: -"Her length in metres, to choose between yachts of the same name."New value: +"Her length in meters, to choose between yachts of the same name."
      • changedOutput schema / properties / data_as_of / description
        Previous value: -"When YachtFinder last rebuilt the catalogue this answer was read from (ISO 8601)."New value: +"When YachtFinder last rebuilt the catalog this answer was read from (ISO 8601)."
      • addedOutput schema / properties / matches / items / properties / also_listed_by
        Added value: +{
        +  "description": "The other brokerages that list this same yacht, as her page names them (\"Also listed by\"). Absent when no other brokerage lists her.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / matches / items / properties / asking_vs_estimate
        Added value: +{
        +  "description": "Where her page names the side of our estimate her asking price sits and prints no estimate figure, its words: \"Above our estimate’s range\". Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / matches / items / properties / sanctions
        Added value: +{
        +  "description": "Present only where her record puts her on a sanctions list, matched by her IMO number alone, in her yacht page's own words. Absent otherwise; its absence is not a legal clearance (her page says which lists were checked, and when).",
        +  "properties": {
        +    "heading": {
        +      "description": "As her page heads it, e.g. \"On the US sanctions list\".",
        +      "type": "string"
        +    },
        +    "line": {
        +      "description": "Her yacht page's own dated line: the list, its date, her IMO number and how it was found, the name and program the list gives her, and the advice that follows.",
        +      "type": "string"
        +    },
        +    "list": {
        +      "description": "The list her record names: 'OFAC SDN' (the US Treasury's) or 'UK Sanctions List'.",
        +      "type": "string"
        +    },
        +    "list_date": {
        +      "description": "That list's own date (YYYY-MM-DD).",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedyachts_near4 fields changed
      • changedOutput schema / properties / data_as_of / description
        Previous value: -"When YachtFinder last rebuilt the catalogue this answer was read from (ISO 8601)."New value: +"When YachtFinder last rebuilt the catalog this answer was read from (ISO 8601)."
      • addedOutput schema / properties / results / items / properties / also_listed_by
        Added value: +{
        +  "description": "The other brokerages that list this same yacht, as her page names them (\"Also listed by\"). Absent when no other brokerage lists her.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / results / items / properties / asking_vs_estimate
        Added value: +{
        +  "description": "Where her page names the side of our estimate her asking price sits and prints no estimate figure, its words: \"Above our estimate’s range\". Absent otherwise.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items / properties / sanctions
        Added value: +{
        +  "description": "Present only where her record puts her on a sanctions list, matched by her IMO number alone, in her yacht page's own words. Absent otherwise; its absence is not a legal clearance (her page says which lists were checked, and when).",
        +  "properties": {
        +    "heading": {
        +      "description": "As her page heads it, e.g. \"On the US sanctions list\".",
        +      "type": "string"
        +    },
        +    "line": {
        +      "description": "Her yacht page's own dated line: the list, its date, her IMO number and how it was found, the name and program the list gives her, and the advice that follows.",
        +      "type": "string"
        +    },
        +    "list": {
        +      "description": "The list her record names: 'OFAC SDN' (the US Treasury's) or 'UK Sanctions List'.",
        +      "type": "string"
        +    },
        +    "list_date": {
        +      "description": "That list's own date (YYYY-MM-DD).",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  4. 3 tool updates
    • Changedfind_yachts5 fields changed
      • changedInput schema / properties / near / description
        Previous value: -"A harbour, harbour town or anchorage by name, e.g. \"Port Hercule\", \"Antibes\", \"Fort Lauderdale\", \"Off Monaco\"."New value: +"A harbor, harbor town or anchorage by name, e.g. \"Port Hercule\", \"Antibes\", \"Fort Lauderdale\", \"Off Monaco\"."
      • changedInput schema / properties / radius_km / description
        Previous value: -"With near: the radius. Default 2 km for a harbour, 3 km for an anchorage."New value: +"With near: the radius. Default 2 km for a harbor, 3 km for an anchorage."
      • changedOutput schema / properties / results / items / properties / asking_price_usd / description
        Previous value: -"The broker's asking price in US dollars; null when none is published. Never a sale price."New value: +"The broker's asking price in US dollars; null when none is published. Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."
      • addedOutput schema / properties / results / items / properties / price_as_listed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "amount": {
        +          "type": "number"
        +        },
        +        "currency": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Her asking price as the broker lists it, when that is not in US dollars (the dollar figure above is then converted). Null for a dollar ask."
        +}
      • addedOutput schema / properties / results / items / properties / weeks_heard
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "heard": {
        +          "type": "integer"
        +        },
        +        "of": {
        +          "type": "integer"
        +        },
        +        "season_url": {
        +          "type": "string"
        +        },
        +        "sentence": {
        +          "type": "string"
        +        },
        +        "since": {
        +          "type": "string"
        +        },
        +        "weeks": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The weeks since `since` (UTC Monday weeks, the last one not over) that YachtFinder's AIS archive heard her: one letter a week, h heard, u our archive did not hear her (our gap, not where she was), x our archive was down. Null where we have none for her."
        +}
    • Changedyacht_facts3 fields changed
      • changedOutput schema / properties / matches / items / properties / asking_price_usd / description
        Previous value: -"The broker's asking price in US dollars; null when none is published. Never a sale price."New value: +"The broker's asking price in US dollars; null when none is published. Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."
      • addedOutput schema / properties / matches / items / properties / price_as_listed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "amount": {
        +          "type": "number"
        +        },
        +        "currency": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Her asking price as the broker lists it, when that is not in US dollars (the dollar figure above is then converted). Null for a dollar ask."
        +}
      • addedOutput schema / properties / matches / items / properties / weeks_heard
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "heard": {
        +          "type": "integer"
        +        },
        +        "of": {
        +          "type": "integer"
        +        },
        +        "season_url": {
        +          "type": "string"
        +        },
        +        "sentence": {
        +          "type": "string"
        +        },
        +        "since": {
        +          "type": "string"
        +        },
        +        "weeks": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The weeks since `since` (UTC Monday weeks, the last one not over) that YachtFinder's AIS archive heard her: one letter a week, h heard, u our archive did not hear her (our gap, not where she was), x our archive was down. Null where we have none for her."
        +}
    • Changedyachts_near9 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of the place to search (a harbour, an anchorage or a position at sea), in decimal degrees. Not the user's own location."New value: +"Latitude of the place to search (a harbor, an anchorage or a position at sea), in decimal degrees. Not the user's own location."
      • changedInput schema / properties / place / description
        Previous value: -"A harbour, harbour town or anchorage by name. Give this, or latitude and longitude."New value: +"A harbor, harbor town or anchorage by name. Give this, or latitude and longitude."
      • changedInput schema / properties / radius_km / description
        Previous value: -"Default 2 km for a harbour, 3 km for an anchorage, 10 km for a coordinate."New value: +"Default 2 km for a harbor, 3 km for an anchorage, 10 km for a coordinate."
      • addedOutput schema / properties / place / properties / anchorages
        Added value: +{
        +  "description": "The anchorages counted.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / place / properties / harbors
        Added value: +{
        +  "description": "The harbors counted.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / place / properties / read_as
        Added value: +{
        +  "description": "How the place was read: harbor, town (all its harbors), town coast or region (the harbors and anchorages followed in it), coast, place, anchorage or coordinate.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / asking_price_usd / description
        Previous value: -"The broker's asking price in US dollars; null when none is published. Never a sale price."New value: +"The broker's asking price in US dollars; null when none is published. Never a sale price. Where she asks in another currency (price_as_listed), this is YachtFinder's conversion of that ask, about this much."
      • addedOutput schema / properties / results / items / properties / price_as_listed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "amount": {
        +          "type": "number"
        +        },
        +        "currency": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Her asking price as the broker lists it, when that is not in US dollars (the dollar figure above is then converted). Null for a dollar ask."
        +}
      • addedOutput schema / properties / results / items / properties / weeks_heard
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "heard": {
        +          "type": "integer"
        +        },
        +        "of": {
        +          "type": "integer"
        +        },
        +        "season_url": {
        +          "type": "string"
        +        },
        +        "sentence": {
        +          "type": "string"
        +        },
        +        "since": {
        +          "type": "string"
        +        },
        +        "weeks": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The weeks since `since` (UTC Monday weeks, the last one not over) that YachtFinder's AIS archive heard her: one letter a week, h heard, u our archive did not hear her (our gap, not where she was), x our archive was down. Null where we have none for her."
        +}
  5. 3 tool updates
    • Changedfind_yachts3 fields changed
      • removedOutput schema / properties / answered_at
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / read_at
        Removed value: -{
        -  "description": "When this server read that catalogue (ISO 8601).",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "summary",
        -  "data_as_of",
        -  "read_at",
        -  "answered_at",
        -  "source",
        -  "notes",
        -  "total_matches",
        -  "results"
        -]New value: +[
        +  "summary",
        +  "data_as_of",
        +  "source",
        +  "notes",
        +  "total_matches",
        +  "results"
        +]
    • Changedyacht_facts3 fields changed
      • removedOutput schema / properties / answered_at
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / read_at
        Removed value: -{
        -  "description": "When this server read that catalogue (ISO 8601).",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "summary",
        -  "data_as_of",
        -  "read_at",
        -  "answered_at",
        -  "source",
        -  "notes",
        -  "found"
        -]New value: +[
        +  "summary",
        +  "data_as_of",
        +  "source",
        +  "notes",
        +  "found"
        +]
    • Changedyachts_near5 fields changed
      • addedInput schema / properties / latitude / description
        Added value: +"Latitude of the place to search (a harbour, an anchorage or a position at sea), in decimal degrees. Not the user's own location."
      • addedInput schema / properties / longitude / description
        Added value: +"Longitude of the place to search, in decimal degrees. Not the user's own location."
      • removedOutput schema / properties / answered_at
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / read_at
        Removed value: -{
        -  "description": "When this server read that catalogue (ISO 8601).",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "summary",
        -  "data_as_of",
        -  "read_at",
        -  "answered_at",
        -  "source",
        -  "notes",
        -  "place",
        -  "total_matches",
        -  "results"
        -]New value: +[
        +  "summary",
        +  "data_as_of",
        +  "source",
        +  "notes",
        +  "place",
        +  "total_matches",
        +  "results"
        +]
  6. 3 tool updates
    • First observedfind_yachts
    • First observedyacht_facts
    • First observedyachts_near

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables real-time vessel tracking, port data, maritime weather, and maritime intelligence through 25 tools, allowing AI clients to query live vessel positions, registry, port info, area searches, weather, and more.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying Global Fishing Watch AIS data to search vessels by identity, retrieve at-sea events such as apparent fishing, encounters, loitering, port visits and AIS gaps, and generate aggregated apparent fishing effort reports by area, flag and gear type.
    427 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Lets an AI assistant search live empty-leg private jet flights, estimate whole-aircraft charter prices in the departure market's local currency, and browse routes, aircraft sizes and licensed operators. It also sends quote requests to the charter desk, with no API key or payment needed.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources