{"ok":true,"site":{"host":"thai-run-club-webmcp.humble-flea-4717.chatgpt.site","url":"https://thai-run-club-webmcp.humble-flea-4717.chatgpt.site/","type":"live","desc":"An English-first multilingual Runner Agent for planning Thai run weeks, checking readiness, arranging a safe return, and preparing a human-confirmed Run Pass through WebMCP.","tools":[{"name":"plan_run_schedule","kind":"act","impl":"imperative","description":"Build a chronological run schedule from city, distance, pace, and social preferences, then show the same plan on the Runner Agent week board. Use when a runner asks what is coming up or wants a shortlist to act on.","title":"Plan my run schedule","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"city":{"type":"string","enum":["Bangkok","Chiang Mai","Phuket","Khon Kaen"]},"distance_km":{"type":"number","enum":[3,5,7,10]},"pace":{"type":"string","enum":["social","steady","tempo"]},"social_preference":{"type":"string","enum":["alcohol_free","beer_optional","run_only"]},"alcohol_free_required":{"type":"boolean","default":false}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_run_schedule","kind":"act","impl":"imperative","description":"Build the requested schedule and persist that exact week to the signed-in runner's D1-backed Runner Passport. Use only when the runner asks to remember or save a plan.","title":"Save my run schedule","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"city":{"type":"string","enum":["Bangkok","Chiang Mai","Phuket","Khon Kaen"]},"distance_km":{"type":"number","enum":[3,5,7,10]},"pace":{"type":"string","enum":["social","steady","tempo"]},"social_preference":{"type":"string","enum":["alcohol_free","beer_optional","run_only"]},"alcohol_free_required":{"type":"boolean","default":false}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_runner_passport","kind":"answer","impl":"imperative","description":"Read the signed-in runner's profile, saved run weeks, and Run Pass count from persistent storage. Use this to continue planning from remembered goals without guessing preferences.","title":"Read my Runner Passport","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"build_runner_support_loop","kind":"act","impl":"imperative","description":"Turn one run into a visible bring, borrow, refill, repair, and give-back plan. Use when a runner asks what to prepare or source without defaulting to shopping. Merchant search remains an optional future handoff and never creates a cart or checkout.","title":"Build a circular runner support loop","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","minLength":2,"maxLength":80}},"required":["event_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_runner_need","kind":"answer","impl":"imperative","description":"Search the connected Shopify Storefront MCP catalog for one runner-confirmed gap after bring, borrow, refill, and repair have been checked. Updates the visible Runner Commons panel with external merchant results. Never creates a cart or checkout.","title":"Search a remaining runner need","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]},"need":{"type":"string","enum":["reflective_visibility","reusable_hydration","repair_essentials"]}},"required":["event_id","need"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"discover_run_events","kind":"act","impl":"imperative","description":"Find matching Thailand run-club events by city, distance, pace, date, and post-run social preference. Use this before comparing or registering. Alcohol is always optional.","title":"Discover Thailand run events","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"city":{"type":"string","enum":["Bangkok","Chiang Mai","Phuket","Khon Kaen"]},"distance_km":{"type":"number","enum":[3,5,7,10]},"pace":{"type":"string","enum":["social","steady","tempo"]},"date":{"type":"string","format":"date","maxLength":10},"social_preference":{"type":"string","enum":["alcohol_free","beer_optional","run_only"]},"alcohol_free_required":{"type":"boolean","default":false}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compare_run_events","kind":"act","impl":"imperative","description":"Compare two or three run events side by side using dates, distance, pace, price, capacity, social choices, and safe-return information.","title":"Compare run events","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"event_ids":{"type":"array","items":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]},"minItems":2,"maxItems":3,"uniqueItems":true}},"required":["event_ids"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_run_event_details","kind":"answer","impl":"imperative","description":"Get full operational details for one event and make it visible in the shared human interface.","title":"Get run event details","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]}},"required":["event_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_event_rules","kind":"answer","impl":"imperative","description":"Read run safety, age, alcohol, licensed-venue, transport, health, and choice rules when evaluating participation or registration.","title":"Read participation and social rules","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]},"topic":{"type":"string","maxLength":40}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"check_participation_readiness","kind":"answer","impl":"imperative","description":"Apply event safety rules to user-provided declarations and return ready, attention, or blocked with next actions. This is not medical advice or diagnosis.","title":"Check participation readiness","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]},"age_20_plus":{"type":"boolean"},"has_concerning_symptoms":{"type":"boolean"},"has_hydration_plan":{"type":"boolean"},"transport_mode":{"type":"string","enum":["transit","taxi","walk","sober_driver"]},"social_preference":{"type":"string","enum":["alcohol_free","beer_optional","run_only"]}},"required":["event_id","age_20_plus","has_concerning_symptoms","has_hydration_plan","transport_mode","social_preference"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_safe_return_options","kind":"answer","impl":"imperative","description":"Get event-specific public transport, taxi, walking, and sober-driver options, with non-driving choices for anyone selecting optional beer.","title":"Plan a safe return","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]},"social_preference":{"type":"string","enum":["alcohol_free","beer_optional","run_only"]}},"required":["event_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"prepare_run_registration","kind":"act","impl":"imperative","description":"Validate and stage a run registration, then show the summary for the human to review and confirm in the visible page.","title":"Prepare run registration","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"event_id":{"type":"string","enum":["bkk-riverside-5","bkk-oldtown-7","cnx-moat-5","hkt-oldtown-3","kkc-lake-10","bkk-green-3"]},"runner_name":{"type":"string","minLength":2,"maxLength":80},"email":{"type":"string","format":"email","maxLength":120},"emergency_contact":{"type":"string","minLength":8,"maxLength":40},"pace":{"type":"string","enum":["social","steady","tempo"]},"social_preference":{"type":"string","enum":["alcohol_free","beer_optional","run_only"]},"age_20_plus":{"type":"boolean"},"transport_mode":{"type":"string","enum":["transit","taxi","walk","sober_driver"]},"rules_accepted":{"type":"boolean","const":true},"privacy_accepted":{"type":"boolean","const":true}},"required":["event_id","runner_name","email","emergency_contact","pace","social_preference","age_20_plus","transport_mode","rules_accepted","privacy_accepted"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_my_run_passes","kind":"answer","impl":"imperative","description":"List Run Passes from the signed-in Runner Passport, or from this browser in guest mode. Emergency-contact details are always redacted from the result.","title":"Get my run passes","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"cancel_run_registration","kind":"transact","impl":"imperative","description":"Cancel a run pass only after the user explicitly confirms cancellation. If confirmed is false, return confirmation_required without changing anything.","title":"Cancel a run registration","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"pass_id":{"type":"string","minLength":8,"maxLength":80},"confirmed":{"type":"boolean"}},"required":["pass_id","confirmed"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Travel & Events","favicon":"/favicons/thai-run-club-webmcp.humble-flea-4717.chatgpt.site.png","apiSurface":"spec","toolCount":14}}