{"serverId":"mcp-registry/com.theoutdoorsapp/outdoors","tools":[{"name":"adventure.candidates","fixed":{"name":"adventure_candidates","description":"Suggest candidate adventures near a location by scoring nearby trails/parks/campgrounds deterministically.","inputSchema":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"types":{"type":"array","default":["trail","park","campground"]},"max_results":{"type":"integer","default":20},"radius_miles":{"type":"integer","default":100},"trail_difficulty":{"type":["null","string"],"default":null}}},"annotations":{"title":"Suggest adventures","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"adventure.candidates\" → \"adventure_candidates\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"adventure.outline","fixed":{"name":"adventure_outline","description":"Create a structured, day-by-day itinerary outline from selected trail/park/campground IDs or slugs.","inputSchema":{"type":"object","required":["start_date","end_date"],"properties":{"park":{"type":["null","string"],"default":null},"trail":{"type":["null","string"],"default":null},"end_date":{"type":"string"},"campground":{"type":["null","string"],"default":null},"start_date":{"type":"string"}}},"annotations":{"title":"Outline itinerary","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"adventure.outline\" → \"adventure_outline\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"aqi.current","fixed":{"name":"aqi_current","description":"Current air quality (AQI) for a location.","inputSchema":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number"},"lon":{"type":"number"},"distance_miles":{"type":"integer","default":25}}},"annotations":{"title":"Air quality","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"aqi.current\" → \"aqi_current\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"campgrounds.get","fixed":{"name":"campgrounds_get","description":"Get a single published, verified campground by id or slug.","inputSchema":{"type":"object","required":["campground"],"properties":{"campground":{"type":"string"}}},"annotations":{"title":"Get campground","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"campgrounds.get\" → \"campgrounds_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":57,"tokensAfter":57},{"name":"campgrounds.search","fixed":{"name":"campgrounds_search","description":"Search published, verified campgrounds with common filters (type, reservation, region/state, geo).","inputSchema":{"type":"object","properties":{"q":{"type":"string","default":""},"lat":{"type":["null","number"],"default":null},"lng":{"type":["null","number"],"default":null},"page":{"type":"integer","default":1},"state":{"type":["null","string"],"default":null},"bounds":{"type":["null","string"],"default":null},"park_id":{"type":["null","integer"],"default":null},"per_page":{"type":"integer","default":20},"region_id":{"type":["null","integer"],"default":null},"has_cabins":{"type":["null","boolean"],"default":null},"has_rv_sites":{"type":["null","boolean"],"default":null},"radius_meters":{"type":["null","integer"],"default":null},"has_tent_sites":{"type":["null","boolean"],"default":null},"campground_type":{"type":["null","string"],"default":null},"reservation_type":{"type":["null","string"],"default":null}}},"annotations":{"title":"Search campgrounds","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"campgrounds.search\" → \"campgrounds_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":269,"tokensAfter":269},{"name":"campsites.get","fixed":{"name":"campsites_get","description":"Get a single campsite (and its campground/park/region relations) by campground + campsite id.","inputSchema":{"type":"object","required":["campground","campsite_id"],"properties":{"campground":{"type":"string"},"campsite_id":{"type":"integer"}}},"annotations":{"title":"Get campsite","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"campsites.get\" → \"campsites_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"campsites.list","fixed":{"name":"campsites_list","description":"List campsites for a campground with filters (type, hookups, accessibility, availability, loop).","inputSchema":{"type":"object","required":["campground"],"properties":{"loop":{"type":["null","string"],"default":null},"page":{"type":"integer","default":1},"sort":{"type":"string","default":"name"},"status":{"type":["null","string"],"default":null},"min_amps":{"type":["null","integer"],"default":null},"per_page":{"type":"integer","default":50},"direction":{"type":"string","default":"asc"},"campground":{"type":"string"},"hookup_type":{"type":["null","string"],"default":null},"pets_allowed":{"type":["null","boolean"],"default":null},"campsite_type":{"type":["null","string"],"default":null},"is_accessible":{"type":["null","boolean"],"default":null},"is_reservable":{"type":["null","boolean"],"default":null},"is_waterfront":{"type":["null","boolean"],"default":null},"min_occupancy":{"type":["null","integer"],"default":null},"available_only":{"type":["null","boolean"],"default":null},"vehicle_length":{"type":["null","integer"],"default":null},"is_pull_through":{"type":["null","boolean"],"default":null}}},"annotations":{"title":"List campsites","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"campsites.list\" → \"campsites_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":321,"tokensAfter":321},{"name":"fires.nearby","fixed":{"name":"fires_nearby","description":"Nearby wildfire incidents for a location.","inputSchema":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number"},"lon":{"type":"number"},"radius_miles":{"type":"integer","default":50}}},"annotations":{"title":"Nearby wildfires","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"fires.nearby\" → \"fires_nearby\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":69,"tokensAfter":69},{"name":"nearMe.search","fixed":{"name":"nearMe_search","description":"Aggregate nearby Trails, Parks, and Campgrounds for a map-first exploration experience.","inputSchema":{"type":"object","properties":{"lat":{"type":["null","number"],"default":null},"lng":{"type":["null","number"],"default":null},"sort":{"type":"string","default":"distance"},"types":{"type":"array","default":["trails","parks","campgrounds"]},"bounds":{"type":["array","null"],"default":null},"search":{"type":"string","default":""},"radius_miles":{"type":"integer","default":100},"combined_limit":{"type":"integer","default":150},"per_type_limit":{"type":"integer","default":50}}},"annotations":{"title":"Explore nearby","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"nearMe.search\" → \"nearMe_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":173,"tokensAfter":173},{"name":"outdoors.ping","fixed":{"name":"outdoors_ping","description":"Health check for the Outdoors MCP server.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Ping","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"outdoors.ping\" → \"outdoors_ping\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":37,"tokensAfter":37},{"name":"parks.get","fixed":{"name":"parks_get","description":"Get a single published, verified park by id or slug.","inputSchema":{"type":"object","required":["park"],"properties":{"park":{"type":"string"}}},"annotations":{"title":"Get park","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"parks.get\" → \"parks_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":51,"tokensAfter":51},{"name":"parks.search","fixed":{"name":"parks_search","description":"Search published, verified parks with optional geo and region filters.","inputSchema":{"type":"object","properties":{"q":{"type":"string","default":""},"lat":{"type":["null","number"],"default":null},"lng":{"type":["null","number"],"default":null},"page":{"type":"integer","default":1},"bounds":{"type":["null","string"],"default":null},"per_page":{"type":"integer","default":20},"park_type":{"type":["null","string"],"default":null},"region_id":{"type":["null","integer"],"default":null},"radius_meters":{"type":["null","integer"],"default":null}}},"annotations":{"title":"Search parks","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"parks.search\" → \"parks_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"safety.overview","fixed":{"name":"safety_overview","description":"Combined safety overview (weather alerts, AQI, wildfire context) for a location.","inputSchema":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number"},"lon":{"type":"number"}}},"annotations":{"title":"Safety overview","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"safety.overview\" → \"safety_overview\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":68,"tokensAfter":68},{"name":"search.global","fixed":{"name":"search_global","description":"Global search across trails, parks, and campgrounds (uses Meilisearch when available).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string"},"limit":{"type":"integer","default":5}}},"annotations":{"title":"Global search","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"search.global\" → \"search_global\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"trails.get","fixed":{"name":"trails_get","description":"Get a single public, verified trail by id or slug, including nearby trails and breadcrumbs.","inputSchema":{"type":"object","required":["trail"],"properties":{"trail":{"type":"string"}}},"annotations":{"title":"Get trail","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"trails.get\" → \"trails_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":62,"tokensAfter":62},{"name":"trails.search","fixed":{"name":"trails_search","description":"Search public, verified trails with filters (supports map bounds and near-me style geo filtering).","inputSchema":{"type":"object","properties":{"q":{"type":"string","default":""},"dir":{"type":"string","default":"asc"},"lat":{"type":["null","number"],"default":null},"lng":{"type":["null","number"],"default":null},"page":{"type":"integer","default":1},"sort":{"type":"string","default":"name"},"bounds":{"type":["null","string"],"default":null},"region":{"type":["null","integer"],"default":null},"per_page":{"type":"integer","default":24},"difficulty":{"type":["null","string"],"default":null},"radius_meters":{"type":["null","integer"],"default":null},"max_length_miles":{"type":["null","number"],"default":null},"min_length_miles":{"type":["null","number"],"default":null}}},"annotations":{"title":"Search trails","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"trails.search\" → \"trails_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"weather.alerts","fixed":{"name":"weather_alerts","description":"Weather alerts for a location.","inputSchema":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number"},"lon":{"type":"number"}}},"annotations":{"title":"Weather alerts","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"weather.alerts\" → \"weather_alerts\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":54,"tokensAfter":54},{"name":"weather.current","fixed":{"name":"weather_current","description":"Current weather conditions for a location.","inputSchema":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number"},"lon":{"type":"number"}}},"annotations":{"title":"Current weather","readOnlyHint":true}},"changes":[{"kind":"name","detail":"Renamed \"weather.current\" → \"weather_current\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":57,"tokensAfter":57}],"toolsChanged":18,"tokensSaved":0,"todo":[{"tool":"adventure_candidates","params":["lat","lng","types","max_results","radius_miles","trail_difficulty"]},{"tool":"adventure_outline","params":["park","trail","end_date","campground","start_date"]},{"tool":"aqi_current","params":["lat","lon","distance_miles"]},{"tool":"campgrounds_get","params":["campground"]},{"tool":"campgrounds_search","params":["q","lat","lng","page","state","bounds","park_id","per_page","region_id","has_cabins","has_rv_sites","radius_meters","has_tent_sites","campground_type","reservation_type"]},{"tool":"campsites_get","params":["campground","campsite_id"]},{"tool":"campsites_list","params":["loop","page","sort","status","min_amps","per_page","direction","campground","hookup_type","pets_allowed","campsite_type","is_accessible","is_reservable","is_waterfront","min_occupancy","available_only","vehicle_length","is_pull_through"]},{"tool":"fetch","params":["id"]},{"tool":"fires_nearby","params":["lat","lon","radius_miles"]},{"tool":"nearMe_search","params":["lat","lng","sort","types","bounds","search","radius_miles","combined_limit","per_type_limit"]},{"tool":"parks_get","params":["park"]},{"tool":"parks_search","params":["q","lat","lng","page","bounds","per_page","park_type","region_id","radius_meters"]},{"tool":"safety_overview","params":["lat","lon"]},{"tool":"search","params":["query"]},{"tool":"search_global","params":["q","limit"]},{"tool":"trails_get","params":["trail"]},{"tool":"trails_search","params":["q","dir","lat","lng","page","sort","bounds","region","per_page","difficulty","radius_meters","max_length_miles","min_length_miles"]},{"tool":"weather_alerts","params":["lat","lon"]},{"tool":"weather_current","params":["lat","lon"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}