{"schema_version":"2024-11-05","name":"io.lodikidsactivities/main","display_name":"Lodi Kids Activities","description":"Free directory of youth programs and licensed daycares in Lodi, CA. AI-native: search programs and daycares, manage your family's saves and kids, request tours, share a household, post practice/game schedules, and subscribe to family calendars.","version":"2.0.0","homepage_url":"https://lodikidsactivities.com","documentation_url":"https://lodikidsactivities.com/mcp","privacy_policy_url":"https://lodikidsactivities.com/privacy","contact":"hello@lodikidsactivities.com","categories":["directory","local","family","children","childcare","education","youth-sports","community"],"transports":["streamable-http"],"endpoint":"https://lodikidsactivities.com/api/mcp","auth":{"public":{"description":"Anonymous read access to programs, daycares, guides, events, and city stats."},"bearer":{"description":"Per-user / per-org / admin scoped tokens for personalized + write access.","token_url":"https://lodikidsactivities.com/account/mcp"}},"capabilities":{"tools":{"listChanged":false}},"tools":[{"name":"search_programs","description":"Search youth programs in Lodi, CA. Filter by free-text query (program name or description), category (Sports, Music, Arts, Academics, Swimming, etc.), child age (integer in years — programs that accept that age), free-only flag, or season. Returns up to 15 matching programs with full details for decision-making (cost, schedule, location, registration status).","scope":"public","requires_consent":false},{"name":"get_program","description":"Get full details for a single program by slug. Use this after `search_programs` returned a result and the user wants to know more — full description, schedule, registration timing, contact info.","scope":"public","requires_consent":false},{"name":"search_daycares","description":"Search licensed daycares in Lodi, CA. Filter by child age (in MONTHS — daycares think in months for under-5s), program kind (daycare / preschool / after_school), facility setting (in_home / center), or claimed-only (more reliable data). Returns up to 10 daycares with hours + tuition where available. For subsidy / bilingual / curriculum filters, follow up with `get_daycare` on a slug.","scope":"public","requires_consent":false},{"name":"get_daycare","description":"Get full details for a single daycare by slug, including capacity by age band (infant / toddler / 2s / 3s / 4s / pre-K / kindergarten) when the daycare has filled it in. Use after `search_daycares` to surface specifics.","scope":"public","requires_consent":false},{"name":"list_upcoming_events","description":"List upcoming family events in Lodi, CA — open houses, workshops, community days, storytimes, sports clinics. Different from `search_programs` (ongoing classes) — these are single-day or short-window events.","scope":"public","requires_consent":false},{"name":"get_event","description":"Get full details for a single event by slug. Use after `list_upcoming_events`.","scope":"public","requires_consent":false},{"name":"list_categories","description":"Returns the distinct program categories currently active in the LKA directory (e.g. Sports, Music, Arts, Academics, Swimming, Dance). Use this before search_programs to suggest exact category strings.","scope":"public","requires_consent":false},{"name":"list_cities","description":"Returns the cities Lodi Kids Activities currently serves. Today: Lodi, CA only. Other cities are seeded but inactive; do not surface as active to users.","scope":"public","requires_consent":false},{"name":"city_stats","description":"Aggregate stats for a city: # programs, # daycares, % claimed by owners, % with Spanish description, % free, category breakdown. Useful for AIs answering 'how many youth programs are there in Lodi' or comparing Lodi to other cities.","scope":"public","requires_consent":false},{"name":"list_guides","description":"Lists editorial guides published on LKA — parent-facing articles like 'How to pick a summer camp,' 'Lodi after-school programs by neighborhood,' etc. Useful when a parent is researching a topic rather than searching a specific program.","scope":"public","requires_consent":false},{"name":"get_guide","description":"Fetch the full markdown body of a published editorial guide by slug.","scope":"public","requires_consent":false},{"name":"featured_listings","description":"Returns the currently-promoted programs on the LKA homepage. Reads from featured_listings table within the active date window.","scope":"public","requires_consent":false},{"name":"upcoming_registrations","description":"Programs whose registration window is opening soon (within the next 60 days). Useful for parents planning ahead.","scope":"public","requires_consent":false},{"name":"nearby_programs","description":"Programs within a radius (miles) of a lat/lng point. Useful for AIs answering 'what's near 95240' style questions. Uses naive Haversine — accurate enough for a single city.","scope":"public","requires_consent":false},{"name":"list_reviews","description":"Public reviews for a program or daycare. Returns rating, text, reviewer first name only, season. Used by AIs to surface parent sentiment when recommending a program.","scope":"public","requires_consent":false},{"name":"program_events_feed","description":"Upcoming events (practices, games, scrimmages, cancellations) for a specific program. Returns next 30 days. Use this to answer 'is there a game this Saturday?' style questions, and to power Add-to-Calendar flows.","scope":"public","requires_consent":false},{"name":"site_directory","description":"Structured map of LKA's public URLs and content sections. Equivalent to llms.txt — gives an AI grounding agent the full topology of the site so it knows what's worth crawling/calling.","scope":"public","requires_consent":false},{"name":"parent_list_saves","description":"Returns the signed-in parent's saved (hearted) programs AND daycares. Each row has a `kind` field of 'program' or 'daycare' so callers can route to the right detail page. Previously this tool returned `{program_id: null}` for daycare rows with no other data — a hangover from when only programs could be saved.","scope":"parent","requires_consent":false},{"name":"parent_save_program","description":"Save a program to the parent's hub. Accepts either the program UUID or its slug (e.g. 'youth-soccer-league'). Optionally associate the save with one or more specific kids (by UUID or name) so the kid filter in /account → Saved Programs picks it up. Requires consent.","scope":"parent","requires_consent":true},{"name":"parent_unsave_program","description":"Remove a saved program from the parent's hub. Accepts either the program UUID or its slug. Requires consent.","scope":"parent","requires_consent":true},{"name":"parent_list_kids","description":"Returns the parent's kids on file (names + ages, no PII beyond what they shared).","scope":"parent","requires_consent":false},{"name":"parent_add_kid","description":"Add a kid to the parent's account. Requires consent.","scope":"parent","requires_consent":true},{"name":"parent_list_tours","description":"Returns the parent's daycare tour requests with status.","scope":"parent","requires_consent":false},{"name":"org_list_leads","description":"Returns recent daycare leads + program saves for the org.","scope":"org","requires_consent":false},{"name":"org_list_programs","description":"Returns the org's programs.","scope":"org","requires_consent":false},{"name":"org_update_program_capacity","description":"Set the listing status on a program (accepting / full / waitlist_only / closed_for_season). Requires consent.","scope":"org","requires_consent":true},{"name":"org_reply_to_review","description":"Post an org response to a review. Requires consent. Replies are one-shot per review.","scope":"org","requires_consent":true},{"name":"parent_me","description":"Returns the signed-in parent's profile + preferences.","scope":"parent","requires_consent":false},{"name":"parent_update_prefs","description":"Update parent notification + language preferences.","scope":"parent","requires_consent":true},{"name":"parent_update_kid","description":"Update a kid record (birthdate, interests, school, special_needs).","scope":"parent","requires_consent":true},{"name":"parent_remove_kid","description":"Remove a kid from the parent's account. Irreversible — deletes the kid record and any kid-linked enrollments/reviews remain but become orphaned (kid_id set null).","scope":"parent","requires_consent":true},{"name":"parent_list_enrollments","description":"Returns the parent's enrollments (programs their kid is signed up for).","scope":"parent","requires_consent":false},{"name":"parent_report_enrollment","description":"Self-report that the parent enrolled their kid in a program outside the LKA RegFlow ('I'm In'). Accepts program UUID or slug.","scope":"parent","requires_consent":true},{"name":"parent_save_daycare","description":"Save a daycare to the parent's hub.","scope":"parent","requires_consent":true},{"name":"parent_submit_review","description":"Submit a review for a program or daycare. One review per (parent, program). Use parent_update_review to edit afterward.","scope":"parent","requires_consent":true},{"name":"parent_my_reviews","description":"Reviews the parent has submitted.","scope":"parent","requires_consent":false},{"name":"parent_my_household","description":"Returns the parent's household members + shared kids. If no household exists yet, returns null.","scope":"parent","requires_consent":false},{"name":"parent_invite_household_member","description":"Invite a co-parent / partner / grandparent to share this household. They receive a one-time invite link by email; on accept, they join the household and can see all kids + saves.","scope":"parent","requires_consent":true},{"name":"parent_accept_household_invite","description":"Accept a household invite using the token from the invite link.","scope":"parent","requires_consent":true},{"name":"parent_leave_household","description":"Leave the current household. If you're the owner and there are other members, ownership transfers to the longest-tenured member.","scope":"parent","requires_consent":true},{"name":"parent_my_upcoming_events","description":"Upcoming program events (practices, games, scrimmages) for the parent's enrolled programs. Covers next 30 days by default. Cancellations included as 'canceled' status.","scope":"parent","requires_consent":false},{"name":"parent_calendar_subscribe_url","description":"Returns the parent's personal iCal feed URL — subscribe in Google/Apple/Outlook Calendar to see practices + games in your normal calendar app. Refreshes hourly.","scope":"parent","requires_consent":false},{"name":"parent_request_tour","description":"Submit a daycare tour request. Returns the tour id + status='requested'.","scope":"parent","requires_consent":true},{"name":"parent_cancel_tour","description":"Cancel a tour request you previously submitted.","scope":"parent","requires_consent":true},{"name":"parent_my_waitlist_positions","description":"Daycare waitlists the parent is on, with current position.","scope":"parent","requires_consent":false},{"name":"parent_my_applications","description":"Daycare applications the parent has submitted.","scope":"parent","requires_consent":false},{"name":"parent_recommended_for_me","description":"Programs matched to the parent's primary kid's age + interests. Simple matcher today — surfaces top 10 active programs that include the kid's age in their range, weighted by interest overlap.","scope":"parent","requires_consent":false},{"name":"parent_export_my_data","description":"Export everything LKA has on you in a single JSON payload (kids, saves, enrollments, tours, reviews, household membership).","scope":"parent","requires_consent":false},{"name":"parent_revoke_my_tokens","description":"Revoke ALL MCP tokens issued under your parent account. Use this if you suspect an AI agent has misused your access.","scope":"parent","requires_consent":true},{"name":"org_dashboard","description":"Org dashboard summary — program count, leads in last 7d, new saves in last 7d, listing-status breakdown.","scope":"org","requires_consent":false},{"name":"org_update_profile","description":"Update the org's profile (website, phone, email, logo_url, instagram).","scope":"org","requires_consent":true},{"name":"org_update_program","description":"Update an existing program's editable fields.","scope":"org","requires_consent":true},{"name":"org_archive_program","description":"Soft-archive a program (active=false). Hides from public directory but preserves history.","scope":"org","requires_consent":true},{"name":"org_confirm_listing_fresh","description":"Confirm a program listing is still accurate (resets the stale-nudge timer).","scope":"org","requires_consent":true},{"name":"org_list_program_events","description":"List upcoming events for a program owned by this org.","scope":"org","requires_consent":false},{"name":"org_add_program_event","description":"Add a single event (practice, game, scrimmage, picture day, cancellation, etc.) to a program's calendar.","scope":"org","requires_consent":true},{"name":"org_cancel_program_event","description":"Mark a program event as canceled. Enrolled parents see this in their hub + iCal.","scope":"org","requires_consent":true},{"name":"org_analytics","description":"Org-level analytics — page views, saves, contacts in a date window.","scope":"org","requires_consent":false},{"name":"org_generate_promo_kit_url","description":"Returns a URL to the org's downloadable promo kit (QR poster + share card) for a given program.","scope":"org","requires_consent":false},{"name":"daycare_capacity","description":"Get current capacity by age band for the daycare(s) this org owns.","scope":"org","requires_consent":false},{"name":"daycare_set_capacity","description":"Upsert capacity for one age band on a daycare. Age bands: infant, toddler, twos, threes, fours, prek, kindergarten.","scope":"org","requires_consent":true},{"name":"daycare_list_tours","description":"Tour requests for the org's daycare(s).","scope":"org","requires_consent":false},{"name":"daycare_respond_to_tour","description":"Respond to a tour request — confirm with a date/time, propose alternates via notes, or decline.","scope":"org","requires_consent":true},{"name":"daycare_list_waitlist","description":"Current waitlist queue for the org's daycare.","scope":"org","requires_consent":false},{"name":"daycare_list_applications","description":"Submitted applications for the org's daycare.","scope":"org","requires_consent":false},{"name":"admin_pending_claims","description":"Pending org + daycare claim REQUESTS (someone applied to claim but admin hasn't approved). Excludes the long tail of seed orgs that have no contact info yet.","scope":"admin","requires_consent":false},{"name":"admin_pending_discoveries","description":"Pending discoveries in admin queue.","scope":"admin","requires_consent":false},{"name":"admin_pending_guides","description":"Pending editorial guide drafts.","scope":"admin","requires_consent":false},{"name":"admin_cost_summary","description":"Month-to-date spend across Anthropic / Firecrawl / Serper / Apify / Resend / Twilio (when each logger is in place).","scope":"admin","requires_consent":false},{"name":"admin_mcp_stats","description":"MCP call volume + top tools + top agents in the last 7 days.","scope":"admin","requires_consent":false},{"name":"admin_live_activity","description":"Last 24h of activity across the platform — signups, saves, contacts, claims, discoveries.","scope":"admin","requires_consent":false},{"name":"admin_search_trends","description":"Top parent search queries in the last 30d. Reads parent_search_queries.","scope":"admin","requires_consent":false}]}