Server definition
- Hash
- sha256:3e28cb73ccb1885a01659fef75c3b277578749cf050f5e3d7671e6f48b357556
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "Angling Lines sells carp fishing holidays at private lakes in France, booked as\nfixed 7-day weeks running Saturday to Saturday. There is no per-night booking.\n\nUse `list_venues` to get the full catalogue of bookable lakes with their headline\nfacts (size, capacity, lake record, accommodation) and the features each lake HAS\n(as a compact list of the same keys search_venues filters on). Build links from\nits `url_templates` by replacing {slug}; fetch a venue's fact-sheet URL when you\nneed full detail (facilities, ferry-port drive times, example prices). Prefer\n`search_venues` when the customer has criteria — it is smaller and filtered.\n\nThis catalogue is not an availability check: it lists every lake that can be\nbooked, not the ones free on a given date. Use `venues_available_on_date` for\nthat: give it a party size plus either a Saturday arrival date (`YYYY-MM-DD`) or\na month (`YYYY-MM`), and it returns only the lakes genuinely free then, with\ntheir remaining arrival dates and capacity.\n\nUse `get_quote` to price one venue for one Saturday arrival week and one party. It\nquotes the live booking engine — the venue price plus the cheapest Channel crossing\nfor the vehicles given — and reports back `unavailable` when that week is not free.\n\nUse `search_categories` to browse the themed collections of lakes that Angling Lines\ncurates by hand (big carp lakes, family-friendly lakes, lakes close to Calais and so\non) — with no arguments it lists the categories, with a category slug it returns the\nbookable lakes in that one.\n\nUse `search_venues` for any \"find me a lake\" request: it runs the same search the\nwebsite does, combining party size, lake facts (carp record, acres) and facilities\n(accommodation, all-inclusive, pool or hot tub, catfish, dogs, bait boats and more)\nwith optional availability — give it a Saturday `date` and it returns the lakes free\nthat week plus `alternatives` free on the nearest earlier and later Saturdays.\n\nUse `list_crossings` when a trip is confirmed and the customer might care how they\ncross the Channel: it prices every route pair (ferry and tunnel, day and overnight)\nas whole-holiday totals, cheapest first, with the route ids `prepare_booking`\naccepts. Crossing choice is always subject to sailing availability at checkout.\nSet `include_crossing=true` when a customer requests a crossing, including at\ncrossing-optional lakes; `false` means the customer chose a venue-only trip.\n\nUse `list_swims` when a venue has designated swims (fishing spots) and a week is\nchosen: it shows which swims are free that week, their single/double type and a\nlake-map URL for the customer, accommodation choices and venue-specific rules.\nGolden Carp Lake returns its four `booking_options`: ask the customer which\navailable package they want and pass its `booking_option` ID to get_quote,\nlist_crossings and prepare_booking. It can be booked entirely through chat.\nPass the same `swims` and `accommodation_ids` through all pricing and booking\ncalls: linked lodges and single-angler-on-double-swim rules can affect prices.\n\nUse `prepare_booking` once — and only once — the customer has confirmed a venue, a\nSaturday arrival date and the party size. It returns the live quote plus a signed,\nexpiring link to the Angling Lines review page with that booking pre-filled; the\ncustomer opens it, logs in and pays there. Pass `outbound_route_id` and\n`inbound_route_id` from `list_crossings` to book a specific crossing; omit them\nfor the cheapest. Pass `swims` (swim numbers from list_swims) to book specific\nswims; omit it and good free swims are picked automatically. It creates nothing\nby itself. Resolve missing or unavailable choices using these tools and ask\nthe customer in chat; only short-notice phone-only bookings need the office.\n\nAnswer only from what these tools return. Prices are in GBP and always cover the\nwhole week for the whole party.",
"tools": [
{
"description": "Quote one Angling Lines venue for one fixed 7-day week: give a venue name or slug, a Saturday arrival date (YYYY-MM-DD) and the party, and get the total price for the whole party for the whole week. Prices come from the live booking engine — the venue price plus the cheapest Channel crossing for the vehicles quoted — and are in GBP. Returns a structured \"unavailable\" result, not a price, when that week is not free for that party.",
"inputSchema": {
"properties": {
"accommodation_ids": {
"description": "Selected accommodation IDs returned by list_swims for this date. GCL booking_option includes the matching cabin automatically.",
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"anglers": {
"description": "Actual number of fishing guests supplied by the customer, never a package or swim capacity. Keep 2 guests as 2 even for a package with capacity 5.",
"minimum": 1,
"type": "integer"
},
"booking_option": {
"description": "Golden Carp Lake whole package explicitly chosen by the customer after seeing available list_swims options: 1 cabin & swim 1; 2 all of swims 2,3,4; 3 exclusive without cabin; 4 exclusive with cabin. Never infer a package from a single swim preference such as swim 4. Required for GCL.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"cars": {
"description": "Number of cars travelling — crossing costs are per vehicle. Ask when unknown for a crossing quote; do not silently assume 1. Pass 0 for a van-only party. Defaults to 1 for older callers.",
"minimum": 0,
"type": "integer"
},
"date": {
"description": "The Saturday arrival date of the 7-day week, as YYYY-MM-DD. Every stay runs Saturday to Saturday.",
"type": "string"
},
"exclusive": {
"description": "Quote the venue exclusively for this party. Some party sizes force exclusive use anyway.",
"type": "boolean"
},
"include_crossing": {
"description": "True when the customer wants a crossing, including cheapest crossing at a crossing-optional venue. False for venue-only. Omit to use the venue default.",
"type": "boolean"
},
"non_anglers": {
"description": "Number of non-fishing guests. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"swims": {
"description": "Chosen swim numbers from list_swims; omit for suitable available defaults. Requote after changing swims.",
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"vans": {
"description": "Number of vans travelling. Preserve the customer's count in all crossing and booking calls. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"venue": {
"description": "The venue to quote, by name or slug, e.g. \"Beaurepaire\".",
"type": "string"
}
},
"required": [
"venue",
"date",
"anglers"
],
"type": "object"
},
"name": "get_quote",
"outputSchema": null
},
{
"description": "List the Channel crossing choices for one trip — venue, Saturday arrival date (YYYY-MM-DD) and party — cheapest first. Each option gives the route, operator, ferry/tunnel type, crossing time, an overnight flag and the TOTAL holiday price with that crossing, plus the outbound/inbound route ids to pass to prepare_booking when the customer picks one. The cheapest option matches the get_quote price. Crossing choice is subject to sailing availability at checkout.",
"inputSchema": {
"properties": {
"accommodation_ids": {
"description": "Selected accommodation IDs returned by list_swims for this date. GCL booking_option includes the matching cabin automatically.",
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"anglers": {
"description": "Actual number of fishing guests supplied by the customer, never a package or swim capacity. Keep 2 guests as 2 even for a package with capacity 5.",
"minimum": 1,
"type": "integer"
},
"booking_option": {
"description": "Golden Carp Lake whole package explicitly chosen by the customer after seeing available list_swims options: 1 cabin & swim 1; 2 all of swims 2,3,4; 3 exclusive without cabin; 4 exclusive with cabin. Never infer a package from a single swim preference such as swim 4. Required for GCL.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"cars": {
"description": "Number of cars travelling. Use the same confirmed count as get_quote; crossing costs are per vehicle. Pass 0 for a van-only party. Defaults to 1 for older callers.",
"minimum": 0,
"type": "integer"
},
"date": {
"description": "The Saturday arrival date of the 7-day week, as YYYY-MM-DD.",
"type": "string"
},
"exclusive": {
"description": "Whether the venue is being booked exclusively.",
"type": "boolean"
},
"include_crossing": {
"description": "True when the customer wants a crossing, including cheapest crossing at a crossing-optional venue. False for venue-only. Omit to use the venue default.",
"type": "boolean"
},
"non_anglers": {
"description": "Number of non-fishing guests. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"swims": {
"description": "Chosen swim numbers from list_swims; omit for suitable available defaults. Requote after changing swims.",
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"vans": {
"description": "Number of vans travelling. Use the same confirmed count as get_quote. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"venue": {
"description": "The venue being booked, by name or slug, e.g. \"Beaurepaire\".",
"type": "string"
}
},
"required": [
"venue",
"date",
"anglers"
],
"type": "object"
},
"name": "list_crossings",
"outputSchema": null
},
{
"description": "Check swim and accommodation availability for a venue on a specific Saturday date and actual party. Returns free/taken swim numbers, capacities, venue-specific rules and map URL. Golden Carp Lake sells four fixed booking_options, never individual swims: if asked for one swim, explain the full package and obtain customer acceptance before passing booking_option to get_quote, list_crossings or prepare_booking. Never silently expand a single-swim request or increase the party to package capacity. At other swim venues pass chosen swims and accommodation_ids, or allow suitable free defaults. Choices can affect price, so quote the final selection before confirming.",
"inputSchema": {
"properties": {
"anglers": {
"description": "Actual number of anglers, not package or swim capacity. Pass it so the tool can check which choices fit the party.",
"minimum": 1,
"type": "integer"
},
"date": {
"description": "The Saturday arrival date of the 7-day week, as YYYY-MM-DD.",
"type": "string"
},
"exclusive": {
"description": "Whether the customer wants the venue exclusively.",
"type": "boolean"
},
"non_anglers": {
"description": "Number of non-fishing guests. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"venue": {
"description": "The venue, by name or slug, e.g. \"Fullys Lake\".",
"type": "string"
}
},
"required": [
"venue",
"date"
],
"type": "object"
},
"name": "list_swims",
"outputSchema": null
},
{
"description": "List every bookable Angling Lines carp fishing venue in France, with its headline facts (lake size, swims, capacity, lake record, accommodation), boolean feature flags (dogs_allowed, catfish, pool_or_hot_tub, …) and canonical URLs. The feature keys match the search_venues filter names, so prefer search_venues to filter server-side. Takes no arguments. This is the full catalogue, not an availability check.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_venues",
"outputSchema": null
},
{
"description": "Prepare a confirmed trip, including selected swims, accommodation, Golden Carp Lake booking_option and crossing, for the Angling Lines review page. Returns a live total and signed prefill link; creates nothing until the customer opens it. Call after the customer confirms the venue, Saturday date, party and choices. Missing or unavailable choices return a reason to resolve IN CHAT with list_swims/list_crossings; GCL can be booked through chat. Nothing is held or booked until checkout is completed.",
"inputSchema": {
"properties": {
"accommodation_ids": {
"description": "Selected accommodation IDs returned by list_swims for this date. GCL booking_option includes the matching cabin automatically.",
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"anglers": {
"description": "Actual number of fishing guests supplied by the customer, never a package or swim capacity. Keep 2 guests as 2 even for a package with capacity 5.",
"minimum": 1,
"type": "integer"
},
"booking_option": {
"description": "Golden Carp Lake whole package explicitly chosen by the customer after seeing available list_swims options: 1 cabin & swim 1; 2 all of swims 2,3,4; 3 exclusive without cabin; 4 exclusive with cabin. Never infer a package from a single swim preference such as swim 4. Required for GCL.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"cars": {
"description": "Number of cars travelling. Pass the customer's confirmed count from get_quote/list_crossings unchanged, including 0 for a van-only party. Defaults to 1 for older callers.",
"minimum": 0,
"type": "integer"
},
"date": {
"description": "The Saturday arrival date of the 7-day week, as YYYY-MM-DD. Every stay runs Saturday to Saturday.",
"type": "string"
},
"dog_info": {
"description": "Dog count and breed(s) supplied by the customer, e.g. \"2 dogs: Labrador and Spaniel\". Ask for missing count/breeds; do not invent them. Only for dog-friendly venues. Saved on the booking and review/edit pages; dog crossing fees are added on the review page, not included in this quote.",
"maxLength": 100,
"type": "string"
},
"exclusive": {
"description": "Book the venue exclusively for this party. Some party sizes force exclusive use anyway.",
"type": "boolean"
},
"inbound_route_id": {
"description": "Inbound crossing route id from list_crossings. Must be given together with outbound_route_id.",
"minimum": 1,
"type": "integer"
},
"include_crossing": {
"description": "True when the customer wants a crossing, including cheapest crossing at a crossing-optional venue. False for venue-only. Omit to use the venue default.",
"type": "boolean"
},
"non_anglers": {
"description": "Number of non-fishing guests. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"outbound_route_id": {
"description": "Outbound crossing route id from list_crossings. Omit (with inbound_route_id) to book the cheapest crossing.",
"minimum": 1,
"type": "integer"
},
"swims": {
"description": "Swim NUMBERS the customer chose (from list_swims), e.g. [1, 4]. Omit to auto-pick good free swims — the customer can change them on the review page. Ignored at venues without designated swims.",
"items": {
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"vans": {
"description": "Number of vans travelling. Pass the customer's confirmed count from get_quote/list_crossings unchanged. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"venue": {
"description": "The venue to book, by name or slug, e.g. \"Beaurepaire\".",
"type": "string"
}
},
"required": [
"venue",
"date",
"anglers"
],
"type": "object"
},
"name": "prepare_booking",
"outputSchema": null
},
{
"description": "Browse the curated venue categories Angling Lines maintains — themed collections such as big carp lakes, family-friendly lakes, lakes with a swimming pool, or lakes close to Calais. Called with no arguments it lists every category with its description and venue count; pass a category slug to get the bookable venues in that category. These lists are hand-picked by Angling Lines, so they cannot be reproduced by filtering on venue attributes.",
"inputSchema": {
"properties": {
"category": {
"description": "The category slug to open, e.g. \"big-carp-lakes\". Omit it to list every category.",
"type": "string"
}
},
"type": "object"
},
"name": "search_categories",
"outputSchema": null
},
{
"description": "The tool for \"find me a lake\": search the Angling Lines catalogue by party size, features and availability, exactly the way the website search does. Every filter is optional — call it with nothing for the whole catalogue, or combine party size (\"anglers\", \"non_anglers\"), lake facts (\"min_carp_lb\", \"min_lake_acres\") and facilities (\"accommodation\", \"all_inclusive\", \"meals\", \"pool_or_hot_tub\", \"tackle_hire\", \"catfish\", \"dogs_allowed\", \"campervans\", \"rowing_boats\", \"bait_boats\", \"bait_on_site\"). Add a Saturday \"date\" (YYYY-MM-DD) to get real availability plus \"alternatives\" — venues that match everything but that week, each with the nearest earlier and later free Saturday — or \"months\" ([\"YYYY-MM\"]) to scan whole months. Narrow to a curated theme with \"category\", whose slugs come from search_categories.",
"inputSchema": {
"properties": {
"accommodation": {
"description": "Only lakes with on-site accommodation, rather than bivvy fishing.",
"type": "boolean"
},
"all_inclusive": {
"description": "Only all-inclusive venues.",
"type": "boolean"
},
"anglers": {
"description": "Number of anglers (fishing guests) in the party. Defaults to 1.",
"minimum": 1,
"type": "integer"
},
"bait_boats": {
"description": "Only venues where bait boats are allowed.",
"type": "boolean"
},
"bait_on_site": {
"description": "Only venues selling bait on site.",
"type": "boolean"
},
"campervans": {
"description": "Only venues that take campervans and motorhomes.",
"type": "boolean"
},
"category": {
"description": "Narrow to a curated search category by slug, e.g. \"big-carp-lakes\". Call search_categories for the slugs that exist.",
"type": "string"
},
"catfish": {
"description": "Only venues stocked with catfish.",
"type": "boolean"
},
"crossing_optional": {
"description": "Only venues bookable WITHOUT a Channel crossing — the holiday is priced venue-only and the customer arranges their own travel.",
"type": "boolean"
},
"date": {
"description": "A single Saturday arrival date as \"YYYY-MM-DD\", e.g. \"2026-09-05\". Give this to get real availability plus earlier/later alternatives. Stays run Saturday to Saturday, so any other weekday is rejected.",
"type": "string"
},
"dogs_allowed": {
"description": "Only venues that accept dogs and other pets.",
"type": "boolean"
},
"fish_from_accommodation": {
"description": "Only lakes where you can fish from the accommodation. Applies with \"accommodation\".",
"type": "boolean"
},
"meals": {
"description": "Only venues where meals are available.",
"type": "boolean"
},
"min_carp_lb": {
"description": "Only lakes whose carp record is at least this many pounds, e.g. 60.",
"minimum": 0,
"type": "integer"
},
"min_lake_acres": {
"description": "Only lakes of at least this many acres, e.g. 10.",
"minimum": 0,
"type": "number"
},
"months": {
"description": "Whole months to scan, each as \"YYYY-MM\", e.g. [\"2026-09\", \"2026-10\"]. Use this OR \"date\". Returns venues with at least one free week in those months.",
"items": {
"type": "string"
},
"type": "array"
},
"non_anglers": {
"description": "Number of non-fishing guests travelling with the party. Defaults to 0.",
"minimum": 0,
"type": "integer"
},
"pool_or_hot_tub": {
"description": "Only venues with a swimming pool or a hot tub.",
"type": "boolean"
},
"rowing_boats": {
"description": "Only venues with rowing boats.",
"type": "boolean"
},
"sleeps": {
"description": "Only lakes whose accommodation sleeps at least this many. Applies with \"accommodation\".",
"minimum": 1,
"type": "integer"
},
"tackle_hire": {
"description": "Only venues where tackle can be hired.",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_venues",
"outputSchema": null
},
{
"description": "Check which Angling Lines venues genuinely have space for a party, either on one specific Saturday or across a whole month. Stays are fixed 7-day weeks, so an arrival date must be a Saturday in \"YYYY-MM-DD\" form; pass \"month\" as \"YYYY-MM\" instead to scan a whole month (defaults to the current month). Returns only venues with real availability, each with its free arrival dates and remaining capacity. Use this — not list_venues — whenever the question is about what is free or bookable.",
"inputSchema": {
"properties": {
"anglers": {
"description": "Number of anglers (fishers) in the party.",
"minimum": 1,
"type": "integer"
},
"date": {
"description": "A single Saturday arrival date as \"YYYY-MM-DD\", e.g. \"2026-09-05\". Use this OR \"month\". Stays run Saturday to Saturday, so any other weekday is rejected.",
"type": "string"
},
"month": {
"description": "A whole month to scan as \"YYYY-MM\", e.g. \"2026-09\". Use this OR \"date\". Defaults to the current month when neither is given.",
"type": "string"
},
"non_anglers": {
"description": "Number of non-fishing guests travelling with the party. Defaults to 0.",
"minimum": 0,
"type": "integer"
}
},
"required": [
"anglers"
],
"type": "object"
},
"name": "venues_available_on_date",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:3e28cb73ccb1885a01659fef75c3b277578749cf050f5e3d7671e6f48b357556 | sha256sum