Skip to main content
Glama

Server Details

Plan surf trips: surf towns and spots worldwide, rated surf forecasts, live cams and where to stay.

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
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation3/5

Several tools answer the same question: cam_now, surf_now, and surf_forecast's `now`/`live` blocks all cover 'how is it right now', while surf_cams vs cam_now differ only by listing versus AI-reading. town_feed also overlaps social_posts, whats_on, and nearby_places. The very long descriptions do include explicit 'use it for…' guidance that lets an agent recover the boundaries, but the effort required is high.

Naming Consistency3/5

All names are lowercase snake_case, which is good, but the patterns are mixed: verb_noun (find_surf_spots, get_town, search_towns), domain-prefixed nouns (surf_cams, surf_forecast, surf_pools, town_feed), and terse compounds (cam_now, surf_now, whats_on). The near-identical cam_now / surf_cams / surf_now triple is especially easy to misread.

Tool Count4/5

Twelve tools is a reasonable, well-scoped set for a surf-forecast/travel domain covering towns, spots, forecasts, cams, pools, places, feeds, events, and social output. A couple of slots feel duplicative (town_feed vs social_posts, surf_cams vs cam_now), so it is slightly above the ideal minimum.

Completeness4/5

The surface covers discovery (search_towns, find_surf_spots), detail (get_town), forecast and now (surf_forecast, surf_now, cam_now), media (surf_cams, town_feed), and ancillary travel needs (nearby_places, surf_pools, whats_on). Minor gaps exist: no direct per-spot forecast lookup, no alerts/watchlist, and historical/seasonal data only via get_town's surfByMonth.

Available Tools

12 tools
cam_nowWhat the surf cams show right nowA
Read-onlyIdempotent
Inspect

What the surf cams show right now, spot by spot: every 3 hours in daylight an AI reads a still from each free surf cam Swell Cabin can read and says what it shows in the forecast's own words (words: 'Waist to chest high'; surface: Glassy, Clean, Fair, Bumpy, Choppy or Blown out; shape, how the waves break: Peeling, Peaky, Mushy, Messy or Closing out, null on readings from before it was read; crowd: none, a few or many surfers out; sure: high or medium) and what that means at that spot for its level (verdict good, fair, poor or flat; label Looks good, Surfable, Looks poor, Flat; reason small or big when the size doesn't suit it, shape when waves that close out or break messy keep it at Surfable). Each reading has its time (and local: the town's clock), the cam's page (cam, provider), what our forecast said for that spot and hour (forecast.words, rating, steps: + when the forecast said bigger) and the nearest buoy's reading. Only readings from the last 3 hours are given; a reading the nearest buoy says can't be right is left out (leftOut, with why). These are an AI's readings of a picture, not measurements: say so, give the time, and link the cam. Each spot has a score (0–10, like the forecast's rating: size on one scale for every spot × surface × how the waves break × surfers out, the mean of its cams), cams (how many were read) and rank (the reader's side-by-side rank in the town, 1 looks best, when two or more spots were read). best is what looks best across the town's cams (the rank, else the score); standout is that same reading only when the reader ranked it first on its own and it looks good or surfable (null otherwise: scores of separate readings never name one): use it to answer "which spot looks best right now in …", and when standout is null say the cams don't show one clearly ahead. With a town, that town's spots, best looking first (readings is empty when no cam was readable lately: use surf_forecast); without one, every town with a reading now, best looking first. Towns are ordered by their best spot's score. good: true keeps only spots that look good. Use it for "is it good right now at …", next to surf_forecast.

NameRequiredDescriptionDefault
goodNoOnly the spots that look good.
townNoTown slug, e.g. "tel-aviv". Leave out for every town with a cam reading now.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the description's value is in constraints: only readings from the last 3 hours, buoy-implausible readings dropped (leftOut with reason), and the caveat that these are AI readings of a picture, not measurements. It also documents ordering (towns by best spot's score, spots best-first) and the standout-null rule, which are non-obvious behaviors. It falls short of a 5 only because the density makes some of this hard to extract.

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

Conciseness2/5

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

The opening is front-loaded, but the body is a wall of nested parentheticals and semicolon-chained clauses that is far harder to parse than the two-parameter tool warrants. Since there is no output schema, describing return fields is justified, but the same content could be half the length and structured into sentences.

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

Completeness5/5

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

With no output schema and only two trivial parameters, the description carries the full burden of explaining return shape (words, surface, shape, crowd, sure, verdict, label, reason, forecast, buoy, score, cams, rank, best, standout, leftOut) and does so comprehensively. An agent can call this correctly and interpret the result without additional context.

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 real semantics: without town the result spans every town with a current reading and towns are ranked by their best spot, and good filters to spots that look good. That is behavior the schema's one-line descriptions do not convey.

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 opens with what the tool returns: AI readings of surf-cam stills, spot by spot, with verdicts, plus a positioned contrast against surf_forecast. However, the actual verb (fetch/read) is buried under a dense enumeration of return fields, so the agent has to parse a long run-on before confirming the tool retrieves cam readings.

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?

It gives an explicit trigger phrase ("is it good right now at …") and a fallback ("readings is empty ... use surf_forecast"), plus the meaning of the good filter, and it tells the agent to say standout is unclear when null. It does not distinguish this from the sibling surf_now or surf_cams, which likely could be confused with it.

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

find_surf_spotsFind surf spotsA
Read-onlyIdempotent
Inspect

Curated surf spots with exact coordinates, break type, direction and level. Search within a town (slug) or around any point (lat/lng + radius_km), sorted by distance.

NameRequiredDescriptionDefault
latNo
lngNo
townNoTown slug. Distances are measured from the town centre.
typeNo
levelNo
limitNo
radius_kmNoUsed with lat/lng.

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare a safe, idempotent, closed-world read, so the description need not argue safety. It does add genuine value by disclosing that results are sorted by distance and that the dataset is curated, but it omits what happens with a call containing no filters and how town and lat/lng interact when both are supplied.

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, both dense with information, with the return shape stated first and the two search strategies second. There is no filler, no restatement of the tool name, and nothing that could be cut without losing meaning.

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?

There is no output schema, so the description's field list is helpful, and it covers both spatial entry points. But for a 7-parameter tool with zero required parameters, it leaves the agent guessing what an unfiltered call returns and whether town and lat/lng are mutually exclusive or combined.

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 only 29%, so the description carries real weight, and it does clarify that town is a slug and that radius_km pairs specifically with lat/lng. However, the limit, type, level, and lat/lng parameters get no added meaning, and the implicit beardown of 7 parameters leaves several semantics documented only by their names.

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 pairs a specific verb with a specific resource and enumerates the payload ('exact coordinates, break type, direction and level'), so an agent immediately knows what comes back. It does not distinguish itself from the sibling surf_pools, which is a real ambiguity because 'pool' is also a value of its own type enum.

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 gives clear usage modes — a town slug search versus a lat/lng plus radius_km search — which tells the agent how to drive the tool. It never states when to prefer this tool over surf_pools, surf_cams, or surf_forecast, nor does it set any exclusions, so tool-selection 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.

get_townGet a surf townA
Read-onlyIdempotent
Inspect

Full profile of one surf town: description, season, water temperature, wave types, levels and curated surf spots (each with its type, level, the way its coast faces in degrees (facing), its best tide where known (tide, e.g. "low to mid, rising", with tideSources), a reviewed, freely licensed photo of surf at that break from Wikimedia Commons when one exists, with author and licence, and reviewed YouTube surf clips filmed there: clips[].url). dataQuality says how far to trust the town's data (trust 0–100 and level high/medium/low, when it was last checked against sources, how many spots are verified, open audit warnings): tell the user when trust is low or the data was never checked. surfByMonth gives, for each month, how often the surf was good there, measured over the last three years (goodDays, greatDays: % of days rated Good or better / Great or better at the best spot; seaTempC: the mean sea temperature measured by satellite, NASA JPL MUR SST; waveHeightM), with its source: use it for "when should I go" and say it is measured, not a forecast.

NameRequiredDescriptionDefault
slugYesTown slug from search_towns, e.g. "ericeira".

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description goes further by explaining that dataQuality carries a 0–100 trust score with audit warnings and that surfByMonth is a three-year measured statistic (NASA JPL MUR SST), explicitly not a forecast — real interpretive context an agent could otherwise misreport.

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

Conciseness3/5

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

It is front-loaded correctly with the resource and its contents, and with no output schema much of the length is earned. But it is delivered as one dense, comma-spliced block with nested parentheticals (facing, tide, tideSources, clips[].url) that is hard to scan and buries the two most actionable instructions near the end.

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 carries the full burden of documenting returns, and it does so thoroughly: field-by-field meaning for dataQuality and surfByMonth, photo licensing, and clip URLs. Minor gaps remain — it does not say what happens for an unknown slug, nor clarify formats for 'season' or 'levels'.

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?

Only one parameter exists and the schema documents it fully at 100% coverage (slug from search_towns, with an example). The description adds nothing about the slug's format or behavior beyond what the schema already states, so the 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?

Opens with a specific verb and resource ('Full profile of one surf town') and enumerates the exact contents: description, season, water temperature, wave types, levels, spots, photos, clips, dataQuality and surfByMonth. That is far more specific than the name alone. It never explicitly contrasts itself with search_towns or town_feed, so the sibling differentiation is only implied by 'one surf town' versus a 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?

There is no statement of when to call this instead of search_towns, town_feed or surf_now; the agent must infer that this is the detail lookup after a search. The description does give output-usage guidance ('use surfByMonth for when should I go', 'tell the user when trust is low'), which is useful but is not tool-selection guidance.

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

nearby_placesPlaces near a surf townA
Read-onlyIdempotent
Inspect

Places around a surf town, sorted by distance: stay (Places to stay), coffee (Coffee), food (Food & drinks), surf (Surf shops & schools), spots (Surf spots (community mapped)). Stays are a saved, merged OpenStreetMap + Overture Maps collection (hotels, resorts, hostels, surf camps, guesthouses, homestays, B&Bs, holiday rentals, villas, camping) with website, phone, email, socials, stars, rooms and facilities where known. Cafés, food and surf shops/schools are a saved Overture Maps collection too; community-mapped surf spots are a live OpenStreetMap lookup. Places with a reviewed, freely licensed photo (Wikimedia Commons) include it as photo { url, page, author, license }.

NameRequiredDescriptionDefault
kindNoOnly one kind of place, e.g. stay: "surf_camp", "hostel", "homestay"; coffee: "cafe", "bakery"; food: "restaurant", "bar"; surf: "school", "shop".
townYesTown slug.
limitNo
categoryNostay
radius_kmNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, open world), so the description is credited for going beyond them. It discloses data provenance that materially affects trust in results: stays and food/surf businesses are saved merged OSM+Overture collections, while 'spots' is a live OpenStreetMap lookup — a meaningful freshness difference between categories. It also specifies the photo sub-object contract ({url, page, author, license}) and licensing condition, which no annotation conveys.

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

Conciseness3/5

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

The category map is front-loaded, which is good, but it is buried inside nested parentheses ('spots (Surf spots (community mapped))') that are hard to parse. The long parenthetical enumeration of stay types (hotels, resorts, hostels, surf camps, guesthouses...) consumes significant space for marginal selection value. The final sentence about photos is useful and earns its place.

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

Completeness4/5

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

There is no output schema, and the description does an unusually good job of describing return payloads: which fields stays carry (website, phone, email, socials, stars, rooms, facilities), and the shape of embedded photos. Combined with the category-to-data-source mapping, an agent knows what it will get back. Minor gaps remain around pagination/limit semantics and the spatial default when radius_km is omitted.

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 only 40%, so the description must compensate. It does useful work by expanding the 'category' enum into readable buckets and describing what data each collection yields (stay fields, photo object shape), but it says nothing about limit behaviour or radius_km even though ordering by distance implies a radius filter. With annotations already declaring readOnly/idempotent/openWorld, the behavioral burden is lighter, hence 3 rather than 4.

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 resource (places around a surf town) and a specific ordering rule (sorted by distance), then enumerates the five category buckets with their labels. An agent can immediately tell this is a distance-sorted place listing. It stops short of distinguishing itself from the sibling find_surf_spots, whose scope partially overlaps the 'spots' category.

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 only implied through the category breakdown; there is no explicit statement of when to choose this over find_surf_spots or search_towns, and no exclusion guidance. An agent can infer this is the tool for lodging/food/coffee/surf-business listings near a known town, but the routing decision against siblings is left to inference.

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

search_townsSearch surf townsA
Read-onlyIdempotent
Inspect

Find surf towns by name/country text, region, month with good surf, surfer level and wave type. All filters are optional; results are ranked most popular first (popularity.rank 1 = best known: Wikipedia readership, places to stay and surf spots) and include best months, water temperature, number of curated surf spots and a page URL. With a month, the towns are ranked by how good that month's surf measured over the last three years (good + great days) and each has inMonth: goodDays and greatDays (% of days rated Good or better, Great or better, at the town's best spot), seaTempC and waveHeightM (null where not measured yet).

NameRequiredDescriptionDefault
levelNo
limitNo
monthNoOnly towns whose best season includes this month (1 = January).
queryNoFree text: town, country, area or region, e.g. "portugal" or "bali".
regionNo
countryNoCountry name or ISO code, e.g. "Portugal" or "PT". Each town also has a zone (e.g. "Lisbon coast", "Canary Islands").
break_typeNo
include_towns_without_spotsNoBy default only towns with curated surf spots (the ones listed on swellcabin.com) are returned.

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare a safe read-only, idempotent, closed-world operation, and the description goes well beyond them: it discloses the default ranking basis (popularity.rank 1 = best known, derived from Wikipedia readership, places to stay, surf spots), the alternate ranking when a month is supplied (good + great days over three years at the town's best spot), and that the default excludes towns without curated spots. It also notes null semantics for seaTempC and waveHeightM, which is the kind of caveat an agent needs to interpret results.

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?

Two sentences, purpose front-loaded, then a dense but purposeful second sentence covering ranking and return fields. Every clause carries information, though the month-ranking clause is long and could be split for scanability.

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 8 parameters and no output schema, the description usefully documents the returned fields (best months, water temperature, spot count, page URL, inMonth goodDays/greatDays, seaTempC, waveHeightM). Gaps are minor: it does not describe limit/pagination behavior or the meaning of the level and break_type enum values, which are the least self-explanatory remaining parameters.

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 50%, with level, limit, region and break_type undocumented in the schema, but the description compensates by naming surfer level, wave type and region as filter dimensions. It also adds meaning beyond the schema for month, clarifying that it both filters ('month with good surf') and switches the ranking metric, which the schema text alone does not convey.

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 ('Find surf towns') and enumerates the filterable dimensions: name/country text, region, month, surfer level, wave type. It reads clearly as a discovery/list tool, but never names a sibling such as find_surf_spots or get_town to draw the boundary 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?

'All filters are optional' implies the no-filter browse case, and the month filter's effect is explained. However, there is no explicit statement of when to reach for this instead of the overlapping siblings (find_surf_spots for spots, get_town for detail, nearby_places for proximity), so the routing is left to inference.

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

social_postsSwell Cabin's social postsA
Read-onlyIdempotent
Inspect

What Swell Cabin posts on social media, worked out from its own data: swell alerts (a swell building to 1.5 m or more with a Good-or-better day in it, on days the three wave models agree on), the best day this week (Good or better, and big enough for the word: Good from waist high, Great from chest high, Epic from head high), the weekend's best-rated towns, a town's surf season opening, surf events, the evergreen kinds (where to surf this month: the best-known towns in season with the water and wetsuit; a town spotlight from its own record; about Swell Cabin, in its own numbers), and the weekly stories (swell on the move: a long-period swell reaching towns of one region in the order it arrives; the week ahead in numbers on Mondays; the local surf scene, a town's reviewed local accounts, on Tuesdays; learn to surf this weekend on Thursdays; surf by day, out by night on Fridays; the spot of the week with a reviewed, credited surf clip on Saturdays). Cards show the town's or spot's reviewed, freely licensed photo with its credit; a list's towns follow as photo slides; a post for a spot with a reviewed clip shares the clip as its video. With a town: the posts it would make about that town now, best first, each written for Instagram, Facebook, Threads, X, Bluesky and Mastodon with its time (UTC, in the town's morning or evening), link, card image (a PNG drawn from the same facts: card for a feed post, story for 9:16) and the facts every number comes from. Without a town: the latest daily proposal across every town (the owner approves it; the approved posts go out through Buffer) and the posts already scheduled. A post names a surf spot only when it is well known (it has a cam or surf clips), and never says today or tomorrow (it goes out later than it's written).

NameRequiredDescriptionDefault
townNoTown slug. Leave out for the latest daily proposal across every town and what is scheduled.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that: proposals are approved by the owner and dispatched through Buffer, so the tool itself does not publish. It adds genuinely useful behavior beyond the annotations — per-network formatting, UTC send times, PNG card/story output, fact provenance, the well-known-spot naming constraint, and the no-'today/tomorrow' rule. It does not state volume limits, pagination, or how many posts come back.

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

Conciseness2/5

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

The first sentence runs to several hundred words with deeply nested parentheticals enumerating every post type, which buries the operational facts an agent needs. Later sentences are comparatively readable, but the whole is a wall of text where 'a full inventory of content types' displaces the front-loaded essentials.

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 one optional parameter and no output schema, the description carries the full burden of describing returns, and it does so in detail: networks, timestamps, links, card images, and grounding facts. The enumeration of evergreen and weekly post kinds is more taxonomy than an agent needs to call the tool, but nothing critical to correct invocation is missing.

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% and the schema already explains that the town slug is optional and what omitting it does. The description still adds meaning beyond the schema: results are for that town 'now, best first', which conveys ordering and recency semantics the schema does not.

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 opening clause, 'What Swell Cabin posts on social media, worked out from its own data,' plus the 'With a town' / 'Without a town' split makes clear this returns/generates social post proposals and lists scheduled posts. It is a noun phrase rather than a verb+resource, and the dual identity (proposal generator for one town vs. latest global proposal + scheduled list) is buried mid-sentence rather than stated up front, so the agent must read a long way to confirm the operation.

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 distinguishes the two calling modes: pass a town to get that town's ranked posts, omit it to get the latest daily proposal across every town plus what is already scheduled. There is no reference to sibling tools (whats_on, town_feed) and no statement of when not to use it, so it stops short of full alternative routing.

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

surf_camsLive surf camsA
Read-onlyIdempotent
Inspect

Live surf cams for a town or one of its surf spots: free cams (e.g. MEO Beachcam and Surftotal in Portugal, Viewsurf and GoSurf in France, Beach Cam Israel, WaveHub and GoSurf Israel, council, surf-school and YouTube live cams) and premium ones (Surfline), each with when it was last checked, whether it was up, when a browser last saw it play a real picture (verifiedPlaying) and whether it is video (live: true) or still pictures (live: false), and embed: how Swell Cabin shows it on its own pages where the operator allows that (kind youtube: the YouTube player URL; kind still: the SkylineWebcams picture that updates every 5 minutes, from the still API; kind player: the operator's own player, which the operator agreed Swell Cabin may show, with the date they agreed (permission); null: a link only, e.g. MEO Beachcam, whose terms keep the stream its own); pinNote explains where a network pins the cam in the wrong place. networks are the local cam networks that cover the town (worth checking for spots without a saved cam). Only cams Swell Cabin opened and checked are listed (Surfline last); no search links. For spots without a saved cam, search lists the checked networks that cover the town.

NameRequiredDescriptionDefault
spotNoOptional: one surf spot name, as returned by get_town or find_surf_spots.
townYesTown slug.

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already cover the read-only, idempotent, non-destructive profile, and the description goes well beyond them: it discloses that only cams Swell Cabin actually opened and checked are returned (Surfline last), that no search links are included, and what verifiedPlaying, live, pinNote and the embed kinds mean. That is exactly the extra behavioral context the annotations cannot carry.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is one very long run-on sentence dense with nested parentheticals (embed kinds, network names, permission dates) that is hard to scan. The information earns its place, but the structure does not.

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

Completeness5/5

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

With no output schema, the description carries the full burden of explaining return values, and it does: it defines verifiedPlaying, live, embed kinds (youtube/still/player/null), permission, pinNote, networks and search. An agent knows what it will receive and how to interpret it.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented, and the description adds only the framing that `spot` narrows to one of the town's spots. Baseline 3 is appropriate since the schema does the heavy lifting.

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 opening clause states a specific resource and scope: 'Live surf cams for a town or one of its surf spots,' which tells an agent exactly what comes back. It does not, however, distinguish itself from the sibling cam_now, so the agent must infer the split between the two cam tools.

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 gives one concrete routing hint — use `networks`/`search` for spots without a saved cam — and notes that only checked cams are listed. It never says when to prefer this over cam_now or surf_now, so the when-to-use 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.

surf_forecastSurf forecastA
Read-onlyIdempotent
Inspect

Live 7-day surf forecast for a surf town and each of its spots, rated hour by hour for that spot (rating Flat, Poor, Fair, Good, Great or Epic with a 0–10 score and the reasons why, from the way the spot's coast faces, the swell trains, their period and the wind against the coast): per day the rating, the best time window (best.from–best.to, local time, which already accounts for the tide), what to expect in surfers' words (body: 'Chest to head high', surface: Glassy/Clean/Fair/Bumpy/Choppy/Blown out), breaking surf height (surf [min, max] m), wave height range, swell height, period and direction, wind, high and low tides with heights (predicted from the nearest tide gauge: see tide, or approximate from the ocean model where there is none), sunrise/sunset, water temperature (the ocean model's, set to the newest satellite measurement at the town: water says how, with source 'satellite' and the satellite's day, 'climate' when only this month's measured difference was used, or 'model'; months: the measured mean by month) and confidence (high/medium/low: three wave models compared, ECMWF, Météo-France and NOAA, with their figures in models; a model the town's buoy has shown to be far off there is left out), and, when the models differ on a day's size by 20% or more, range (wave [min, max] m at sea, surf [min, max] m at the spot, body in surfers' words); the town's days name the best spot (bestSpot). accuracy, where the town has a buoy (NOAA, Queensland Government, E.U. Copernicus Marine or Israel Oceanographic & Limnological Research): how often the forecast was within 20% of it over the last weeks, whether sizes are corrected for the model's bias there (method 'ratio', or 'power' with fit { k, beta }: the correction depends on size), at which spots (correctedSpots: those facing the same sea as the buoy), the swell period's record and correction (period: within15 is the share of hours within 1.5 s, offset the seconds added), each wave model's own record at the buoy (models: { n, mae, within20 }), the closest one (bestModel) and the ones left out of the confidence check (unreliable). offshore, for every town: the open water off the town checked against the satellite altimeters' passes (Copernicus Marine, within 100 km; passes, km, from/to, within20 and within20Raw, ratio satellite ÷ model, corrected: whether sizes here are scaled by it, which happens only where no buoy correction applies, models/bestModel/unreliable offshore, and the credit line to show). updated says when the forecast was worked out (it is cached for up to 3 hours). Plus the next 48 hours every 3 hours, now (rating, why, tide rising/falling, and water: this hour's sea temperature in °C, set to the satellites like the days'; trust it as measured only where water.source is 'satellite' or 'climate', as the town page does) and live: what the nearest buoy or wave station, the newest satellite altimeter pass near the town (satellite: mission, time, km out, wave height, and what the model said there and then) and the airport wind report (METAR) measure right now, checked against the forecast (check: on-track, bigger/smaller, windier/calmer; check.factor is the nudge applied to today's sizes, from the buoy, or from the satellite where there is no buoy). When it is not 1, nowcast says so and today's surf and body (now, hours, today's day) are already scaled toward the measurement, as on the site; ratings stay the model's. Waves from Open-Meteo Marine, wind from MET Norway.

NameRequiredDescriptionDefault
spotNoOptional: one spot name from get_town.
townYesTown slug, e.g. "ericeira".

TDQS

A4/5.0
Behavior5/5

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

Beyond the supplied annotations, the description discloses that results are cached for up to 3 hours, names the underlying wave and wind data sources, explains confidence methodology across three models, and describes nowcast scaling and caveats about trusting water temperature only when the source is satellite or climate. This is substantial behavioral context that annotations alone do not provide.

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

Conciseness2/5

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

The description is front-loaded with the main purpose, but it then becomes an extremely dense, semicolon-heavy block with deeply nested parenthetical detail. Much of the output detail is useful because there is no output schema, but the structure is difficult to parse and would benefit significantly from breaking the material into shorter sections.

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

Completeness5/5

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

Given the tool's complexity and the absence of an output schema, the description is remarkably complete: it explains forecast fields, confidence and model comparison, accuracy and buoy correction, offshore satellite checks, now, live observations, and nowcast scaling. An agent has enough context to understand what the tool returns and how to interpret the caveats.

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 defines town as a town slug and spot as an optional spot name from get_town. The description adds little parameter-specific guidance beyond reinforcing that forecasts cover a town and each of its spots, so the high-coverage baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Live 7-day surf forecast for a surf town and each of its spots, rated hour by hour.' It clearly distinguishes this forecast tool from current-condition siblings like surf_now and surf_cams by emphasizing the 7-day outlook and per-spot hourly ratings.

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 'Live 7-day surf forecast' and the forecast-vs-now distinction is clear in context, but the description never explicitly says when to use this tool versus surf_now, surf_cams, or find_surf_spots. It also does not state that the optional spot should come from get_town, leaving that to the schema.

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

surf_nowWhere the surf is good nowA
Read-onlyIdempotent
Inspect

Where the surf is good around the world in the next days: every town whose best day from today up to within_days ahead is at least min_rating, best and soonest first, each with that day (rating Flat … Epic at its best spot, the spot, its best time, the surf in surfers' words, how sure the forecast is, and when: today, tomorrow or the weekday in the town's own time) and today's rating. From Swell Cabin's forecast for every town, worked out twice a day (generated says when; stale is true when it is more than 36 hours old). Use it for "where is it good right now / this weekend", then surf_forecast for one town's full forecast, and share each town's url.

NameRequiredDescriptionDefault
limitNo
regionNo
min_ratingNogood
within_daysNoDays from today, today included.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantive context beyond them: data is regenerated twice a day, a stale flag means more than 36 hours old, results are ordered best-and-soonest, and day labels are resolved in each town's local time. Those are behavioral traits an agent cannot get from the schema or annotations.

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

Conciseness3/5

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

The purpose and the sister-tool pointer are front-loaded, which is good, but the core is one long run-on sentence with nested parentheses listing return fields. It is dense enough that key details (stale threshold, ordering) are easy to skim past.

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

Completeness4/5

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

With no output schema, the description does the work of enumerating return content (day, rating, spot, best time, surf description, forecast confidence, local day name, today's rating) and mentions sharing each town's url. The gaps are the undocumented limit and region parameters rather than missing result semantics.

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 only 25%, and the description compensates for two of four parameters: within_days ('from today up to within_days ahead') and min_rating ('at least min_rating'). region and limit are never mentioned, so the agent gets no hint about regional scoping or what limit truncates.

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 resource and ranking rule: towns whose best day within the window meets min_rating, ordered 'best and soonest first', with the fields each result carries. It also explicitly distinguishes itself from surf_forecast (one town's full forecast), so an agent can route without opening either schema.

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?

Gives an explicit trigger phrase ('where is it good right now / this weekend') and names the natural follow-up tool, surf_forecast, for drilling into a single town. That is a when-to-use plus an alternative, not just implied context.

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

surf_poolsSurf pools (wave pools)A
Read-onlyIdempotent
Inspect

Wave pools and surf lakes open to the public (The Wave Bristol, URBNSURF, Alaïa Bay, Atlantic Park, DSRT Surf...): city, country, coordinates, wave technology where published (e.g. Wavegarden Cove), levels, website, notes (address, seasons), the date each was last checked and the published sources it was checked against. Give a town slug (pools within 250 km, nearest first, with km), lat and lng (with radius_km), a country code, or nothing for all of them. Pools are inland: they work when the sea is flat, and are good for beginners and for training.

NameRequiredDescriptionDefault
latNoLatitude, with lng, to search around a point.
lngNoLongitude, with lat.
townNoTown slug: pools within 250 km of it (or radius_km).
levelNoOnly pools with sessions for this level.
countryNoISO 3166-1 alpha-2 country code, e.g. GB, US, AU.
radius_kmNoSearch radius for town or lat/lng (default 250, max 5000).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the baseline is low-hanging. The description adds real value beyond them: nearest-first ordering with distances in km, the 250 km default / 5000 km max radius, the 'where published' caveat on wave technology, and disclosure that each record carries a last-checked date and its sources. It still doesn't say how large the full result set is or whether output is truncated.

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

Conciseness3/5

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

Appropriately front-loaded and free of filler, but the first sentence is a long run-on that packs example pool names and a full field inventory into one breath, which costs scanability. Splitting the field list from the identity sentence would make it easier to parse.

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 six optional parameters and no output schema, the description does the work of describing the return shape (city, country, coordinates, technology, levels, website, notes, last-checked date, sources), which is exactly what's needed. Feedback coverage is slightly incomplete on result-size limits and on what a town-slug search does when nothing is within radius.

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 combination semantics the schema does not state — the four mutually exclusive search modes including 'nothing for all of them' — and confirms nearest-first ordering with km values for town searches. The level filter is only lightly touched ('good for beginners and for training') compared to the explicit enum in the schema.

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?

Names a concrete resource (public wave pools/surf lakes) with named real-world examples and enumerates the returned fields, so the agent knows exactly what this returns. It never names a sibling tool to differentiate itself, but the inland/public-pool scope is specific enough to separate it from generic spot or cam tools.

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?

Gives clear invocation contexts (town slug, lat/lng, country code, or no argument for everything) and adds a genuine selection cue: pools are inland, work when the sea is flat, and suit beginners/training. It stops short of explicitly naming alternatives such as find_surf_spots or surf_cams, so the when-not guidance is implied rather than stated.

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

town_feedWhat's new in a surf townA
Read-onlyIdempotent
Inspect

The town's Feed: what's new there, and what Swell Cabin's data says. insights: Swell Cabin's own cards worked out from the live forecast and what's on (today's surf in plain words, the best day this week with a 7-day wave chart, go early before the wind, swell building or dropping, a beginner or experts-only day with the spots for that level, what's on tonight, upcoming events, the season and the wetsuit for this month), each { key, kind, label, title, text, chart? }. posts: recent public Bluesky and Mastodon posts about surfing the town (text, photo or link, likes, replies, link to reply). recentVideos: YouTube videos about surfing the town from the last 30 days, newest first (at most two per channel), with links to watch, whether each is portrait (a Short), its duration in seconds, views and likes; videosAt: when they were fetched from YouTube (each town's videos are fetched at most once a day, the every-town ones every 12 hours, to stay within YouTube's quota; null when there are none yet). instagramPosts: the latest posts from the town's Instagram pages and its region's (instagramAccounts: e.g. the surf club, surf schools and shops, and regional pages such as a national surf-cam network, which carry region "zone:…" or "country:XX"; pages are found and ranked from measured activity, engagement, surf focus and the places their posts name), newest first (at most 4 from one page), with likes, comments, video (every reel's mp4 to play: from Business Discovery, or from the reel's public embed page when that leaves it out) and a link to like or comment on Instagram. articles: the newest articles from the major surf magazines (Surfer, Stab, BeachGrit, Surfer Today, The Surfer's Journal, Tracks, Carve, SurfGirl, Freesurf, Eastern Surf, Zigzag, and in French, Portuguese and Spanish Surf Session, ONFIRE, Waves and Surfer Rule; never Surfline) that name the town or one of its breaks (an article about Pipeline is Haleiwa's, one about Cloud 9 General Luna's), from the last 21 days, newest first: { magazine, name, title, summary, url, image, publishedAt, tags, towns (every town it names, most prominent first), town }. Every video and post has passed Swell Cabin's quality check first: hotel, villa and rental ads, property for sale, transport and transfer guides, children's videos, video games, TV, live-cam recordings and upcoming streams, posts nobody watched or liked after a fair chance, posts with too little to show, reels Instagram plays only in its own app (licensed music), Bluesky/Mastodon posts that say surf only in their hashtags or don't name the town, and the same post again from one account are left out; promos and clickbait are kept but ranked lower (quality below 1, with qualityFlags). quality: { checked, kept, dropped: { reason: count } }; review: true also lists what was left out and why (dropped). classics: surf clips a person picked for the town's breaks (or every town's with town "all"), what the site's Feed goes on with once everything new is shown. Every video, post and classic says which languages it's written in (langs, ISO 639-1 codes, main first; none when it's too short or too full of names to tell); the site shows each visitor only what's in English or in their own language (the page's, or one their browser is set to) and what's too short to tell; languages does the same here (e.g. ["pt"]: English, Portuguese and the unsure ones). Share the links and the town's Feed page so the user can watch. town "all" gives the same across every town (no insights), each item with its town slug and page, every magazine article (one about none of our towns has no town: general surf news), plus top: the home Feed's mix ranked across towns by engagement (likes, comments, views), quality and freshness, Instagram and videos before Bluesky/Mastodon, articles about a town before general surf news (which is spaced out, at most one card in ten; any article at most one in four), automated alert accounts left out; exclude leaves towns out.

NameRequiredDescriptionDefault
townYesTown slug, or "all" for what's new across every town (the home page's Feed; each video and post then names its town).
limitNo
reviewNoAlso list the videos and posts the quality check left out, with why (dropped).
excludeNoWith town "all": town slugs to leave out.
languagesNoThe languages the user reads (ISO 639-1 codes, e.g. ["pt"] or ["he"]): leaves out videos and posts that are in neither English nor one of these, as the site does for each visitor. Leave out for every language.

TDQS

A3.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses extensive behavior: the quality check and what it drops, ranking of promos and clickbait, YouTube fetch cadence and quota constraints, Instagram reel handling, language filtering, town "all" aggregation, top ranking rules, and exclusion behavior. It does not contradict the readOnlyHint, idempotentHint, openWorldHint, or destructiveHint annotations.

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

Conciseness2/5

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

The description is a very long, dense paragraph with nested parentheticals and implementation details such as YouTube quota timing and Instagram Business Discovery. Although it starts with a high-level purpose and labels many fields, its run-on structure makes it difficult to scan and includes more detail than an agent needs for invocation.

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?

There is no output schema, so the description must carry the return-shape burden, and it does: it enumerates the feed sections, item fields, quality metadata, language behavior, classics, and town "all" output. For a complex composite feed tool, this is complete enough for an agent to understand what will be returned.

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 high at 80%, so the baseline is 3, but the description adds substantial meaning for town "all," review's dropped items, languages filtering, and exclude. The only notable gap is that the limit parameter is not described in either the schema or 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 clearly identifies the resource as the town's Feed and enumerates what it contains: insights, posts, videos, Instagram posts, articles, classics, quality metadata, and the town "all" variant. It does not explicitly differentiate this composite feed from siblings such as social_posts, whats_on, or surf_now, so it falls short of a 5.

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

Usage Guidelines2/5

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

The description explains what the feed contains and how town "all" behaves, but it gives no explicit when-to-use guidance, no when-not-to-use conditions, and no named alternatives among the sibling tools. Usage is only implied by the word "Feed," which is not enough for strong selection guidance.

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

whats_onWhat's on in a surf townA
Read-onlyIdempotent
Inspect

What happens each night in a surf town (weekly schedule: parties, live music, DJs, comedy, movie nights, games, salsa, markets, culture) and upcoming dated events, with a short summary of the scene and the source of every entry. Defaults to tonight and the coming week, in the town's local time. Some towns aren't covered yet (covered: false).

NameRequiredDescriptionDefault
dayNoOne weekday instead of tonight.
townYesTown slug.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered; the description goes beyond that by disclosing the timezone basis for results, the default time window, and the coverage failure mode (covered: false). It also states that every entry carries a source, which is a meaningful trust signal. It stops short of describing result ordering or pagination.

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 the tool returns before the defaults and the coverage caveat. The long parenthetical category list is dense but earns its place by scoping exactly what counts as 'what's on'; nothing is redundant.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining returns and does so: a weekly schedule, dated events, a scene summary, a per-entry source, and a coverage flag. Combined with the local-time and default-window notes, an agent has everything needed to call it and interpret the result.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters, which sets the baseline at 3. The description adds the important semantic that omitting 'day' yields tonight plus the coming week rather than a single day — a default the schema does not encode — but gives no extra help on the 'town' slug format.

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 the resource concretely — recurring nightly schedules (parties, live music, DJs, comedy, movie nights, games, salsa, markets, culture) plus upcoming dated events in a surf town — so an agent knows exactly what content comes back. It does not explicitly contrast itself with overlapping siblings like town_feed or social_posts, which keeps it from a 5.

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 conveys the default window ('tonight and the coming week, in the town's local time') and a real precondition ('some towns aren't covered yet (covered: false)'), which is useful context for deciding whether to call it. However, it never names an alternative tool or says when a different sibling (e.g. town_feed) should be preferred, so usage guidance is implied rather than stated.

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. 12 tool updates
    • First observedcam_now
    • First observedfind_surf_spots
    • First observedget_town
    • First observednearby_places
    • First observedsearch_towns
    • First observedsocial_posts
    • First observedsurf_cams
    • First observedsurf_forecast
    • First observedsurf_now
    • First observedsurf_pools
    • First observedtown_feed
    • First observedwhats_on

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Surf Park live session availability for booking and cancellation. Made by surfers for wave pools worldwide
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables users to check whether a beach suits a beach day or a surf session today or up to six days ahead, using Open-Meteo weather and marine forecasts scored by deterministic, documented rules. It exposes tools for raw hourly forecast data, suitability scores and verdicts by activity and skill level, and finding the best multi-hour window within a day.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for real-time surf conditions at 5,000+ beaches worldwide. Enables checking surf conditions, finding nearest spots, and listing spots via natural language.
    53 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that provides real-time surf intelligence, including wave quality scoring, beach discovery, session planning, and forecast analysis across 12+ global data sources. It turns AI assistants into surf-savvy copilots for finding the perfect wave.
    2
    GPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources