Zooza is an MCP server with 35 tools an agent can call, among them bookings_add_lead, bookings_find, classes_add_course. It answers at https://mcp.zooza.app/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 10 of 10 times since 4 September 2026; the last check, on 17 October 2026, succeeded.
MCP server for Zooza — class scheduling, attendance, and booking for activity businesses.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
bookings_add_lead | Create a LEAD — a lightweight registration on a lead-collection schedule — for a prospective customer, from their name and email. Use this to capture an inbound enquiry as a trackable Zooza record you can later label, message, and check for Inputs: company_id, schedule_id, first_name, last_name, email, phone |
bookings_find | Find this company's bookings — a client's enrolment in a class (registration; "prihláška"/"Buchung") — and resolve them to a `registration_id`, or a client to a `user_id`. Use for "is X enrolled?", "who's in this class?", "who hasn't paid?" Inputs: company_id, search, name, course_id, schedule_id, user_id |
classes_add_course | Create a new programme (course) — the top-level container in Zooza that holds pricing, payment settings, and booking-form configuration. Classes and sessions are added inside it afterwards; a programme cannot accept bookings until it has at Inputs: company_id, name, programme_kind, audience, for_children, payment_collection |
classes_commit_class | Writes a class to api-v1 in one shot: creates the schedule, attaches any selected payment templates (bundled inline), and posts the assembled events array. Call this only after the user has confirmed the class shell (from `classes_preview_s Inputs: company_id, schedule, events, payment_schedule_template_ids |
classes_find_classes | Search this company's CLASSES — the scheduled groups inside a programme (a "class" / "group" / "skupina"; internally a *schedule*) — by name (substring) and resolve them to a `schedule_id`. Reach for this whenever the user names a specific Inputs: company_id, name, course_id, trainer_id, place_id, day |
classes_find_courses | Search the company's courses by name (substring match) and optionally by registration_type. Returns a slim list of matches — `{id, name, registration_type, target_audience, price, schedules_count, ...}` — enough to disambiguate, not enough Inputs: company_id, name, registration_type, include_archived, page, page_size |
classes_find_resource | Resolve a NAME the operator said into an id, for four kinds of company-level records. Pick `kind`: - `place` — venues. Returns `{id, name, city, street, rooms: [{id, name, capacity}]}`. Rooms are inlined because picking a venue is usually f Inputs: company_id, kind, name, city, place_id, course_id |
classes_list_schedule_patterns | Returns all valid field values for building class schedules and payment plans in Zooza. No Zooza API call — hardcoded from Events_Preview.php and Payment_Schedule.php. Call this BEFORE classes_preview_schedule or classes_commit_class to avo Inputs: domain |
classes_preview_events | Expands one or more recurrence patterns and/or ad-hoc dates into the concrete list of class sessions, honouring holiday-skip flags. Stateless — performs no writes. Call this once per pattern the user describes during class creation. Accumul Inputs: company_id, place_id, from_date, to_date, blocks, additional_dates |
classes_preview_schedule | Resolves a new class's *schedule shell* — the course, venue, trainer, capacity, prices, billing period, and default payment templates — and returns the result alongside any warnings. Performs no writes. Use this first in a class-creation fl Inputs: company_id, course_id, place_id, trainer_id, room_id, trainer_rate_type_id |
classes_update | Edit one or more existing classes (a "class"/"timetable" is the recurring group within a programme) — name, price, registration fee, capacity, make-up/replacement extra capacity ("počet miest navyše pre náhradné hodiny" → extra_capacity/ext Inputs: company_id, token, confirmed, schedule_ids, changes, session_scope |
classes_update_course_settings | Change the settings of an existing programme (course) — pricing, online booking, make-up sessions, trial, auto-enrolment, attendance, feedback, basic info, or archiving. Works one section at a time, like the settings tiles in the Zooza app. Inputs: company_id, token, confirmed, course_id, section, changes |
comms_find_replies | Read inbound replies a customer has sent back to Zooza emails, and optionally mark a reply handled. Use it to see whether a lead responded and what they said — filter by the lead's registration id, sender email, state (unread / todo / resol Inputs: company_id, registration_id, from_email, state, since, mark_reply_id |
comms_list_merge_vars | Returns all valid merge variables for Zooza message templates (email, SMS, WhatsApp). Format: *|VARIABLE_NAME|* (MailChimp-compatible). No Zooza API call — hardcoded from Merge_Vars::merge_vars() in api-v1. Use this BEFORE writing any messa Inputs: category, medium |
comms_list_templates | Lists the automated email templates Zooza sends to this company's clients — registration confirmations, trial follow-ups, cancellation notices, session reminders, loyalty/discount emails, and custom templates. For each template returns its Inputs: company_id, type, source, include_body |
comms_send_message | Email clients of this company. Describe the audience (a course/programme, a class schedule, a specific booking, one client, a saved segment, an ad-hoc cohort, or course-level labels) and the content (an existing template `type` from comms_l Inputs: company_id, token, confirmed, confirm_large_send, channel, audience |
explain_data_model | Returns a structured description of Zooza's domain entities — hierarchy, roles, valid field values (enums), parent/child relationships, and disambiguation rules. No Zooza API call is made — purely hardcoded domain knowledge. Call this befor Inputs: entity |
get_skill | Returns the full markdown playbook for one of the registered skills. Call this BEFORE starting a flow named in the server's instructions — the playbook contains the interview steps, mapping rules, and confirmation pattern for that scenario. Inputs: name |
get_terminology | Search the Zooza domain glossary. Returns canonical term names, definitions, cross-language synonyms, disambiguation rules, and AI guidance notes. No Zooza API call is made — purely local lookup against the compiled glossary. Use this to re Inputs: query, language, category |
labels_mark | Attach or detach a label (a named tag) on a Zooza course, schedule, or registration. Set `present: true` to attach (the label is created automatically if it doesn't exist yet — attach is idempotent), `present: false` to detach. Use it to ta Inputs: company_id, object_type, object_id, label, present |
negotiate_terminology | Free tool — no Zooza API call, no company_id required. Two modes: "start" → returns the 8-question interview template for Claude to conduct conversationally. "build" → validates answers against the Zooza glossary, returns a TerminologyProfi Inputs: action, answers |
payments_add_plan | Put a booking on a payment plan — the instalment calendar the client actually pays against. A plan attached to a programme or class is NOT inherited by bookings; each booking has to have it applied, and until then the client owes nothing an Inputs: company_id, token, confirmed, registration_id, payment_schedule_id, total_price |
reports_get_data | Return the REAL, pre-aggregated numbers for ONE business question about an activity brand — and the basis for SHOWING it. This is how you show an operator a report / dashboard / chart of their business numbers (occupancy, unpaid, churn, att Inputs: view, from, to, company_id |
sessions_add_summary | Write a post-session summary on one event. Two independent fields: - `public_summary` — visible to attendees / parents via their in-app Zooza feed. Use when the user says "write a summary for the parents," "send a recap," "note for the fami Inputs: company_id, event_id, public_summary, internal_summary, override_locked |
sessions_find_events | List **events** (scheduled sessions of classes) in the caller's company. Use this whenever you need to resolve an `event_id` from natural language ("my next class," "Monday's ballet," "all swim sessions this week," "Sarah's classes tomorrow Inputs: company_id, ids, from, to, date, status |
sessions_get_attendance | Read who's enrolled in **one event** (a single session of a class) and their current attendance, so you can show the list and then mark it. Pass an `event_id`; the tool returns each enrolled attendee, their current attendance value (if alre Inputs: company_id, event_id |
sessions_mark_attendance | Record per-attendee attendance for **one event** (a single session of a class — e.g. "Monday Ballet on 2026-06-03 at 09:00"). Pass an `event_id` and a list of attendees, each with their own attendance value (`attended`, `noshow`, `canceled` Inputs: company_id, event_id, attendees |
sessions_update | Edit specific individual sessions (events) of a class, OR add new sessions to a class. Two modes, one tool. EDIT-MODE — pass `event_ids` + `changes`: reschedule a session's date/time, or change a hand-picked session's instructor, venue/room Inputs: company_id, token, confirmed, event_ids, changes, schedule_id |
setup_add_payment_template | Create a company-level payment plan template ("splátková šablóna") — the object that defines HOW a programme's price is collected: in how many instalments, how often, with what discount and rounding. A programme set to instalment collection Inputs: company_id, name, schedule_type, frequency, value, value_date |
setup_update_course_templates | Choose which payment plan templates a programme offers clients — attach new ones, and DETACH ones that should not be there. Detaching is the point: Zooza attaches templates by itself when a programme's price type or payment collection chang Inputs: company_id, token, confirmed, course_id, template_ids |
submit_feedback | Submit user feedback about the Zooza MCP integration to the engineering team. Two paths: - 'path: "github"' — returns a prefilled issue-creation URL on the **public** `zooza-dev/zooza-mcp-server` repo. The user opens it in their browser and Inputs: path, title, body, category, related_tool |
todos_add | Create a to-do item for a Zooza operator — a task a human needs to action. Give it a `message` and the `to_user_id` of the person it's assigned to. Optionally link it to a record (`entity_type` + `entity_id`, e.g. a registration) so the ope Inputs: company_id, message, to_user_id, entity_type, entity_id, due_date |
todos_mark | Change the status of a to-do item: `done` (completed), `cancelled` (won't do), or `open` (reopen). Only OPEN todos can be marked `done` or `cancelled`; a `done` or `cancelled` todo can only be reopened to `open`. Marking `done` stamps compl Inputs: company_id, todo_id, status |
trainers_add_helpers | Register **additional lecturers** — a second instructor, assistant, or helper — on one or more classes, and control which of their sessions each one actually works. This is NOT how you set or change a class's main instructor (that is `class Inputs: company_id, schedule_ids, course_id, billing_period_id, assignments, session_scope |
whoami | Returns the connected user's identity, the companies they can operate on, regional context, and the session's token state. Call ONCE at the start of every conversation. How to interpret the response: - 'status: "ok"' — authenticated, at lea |
Every block below points at https://mcp.zooza.app/mcp. Pick your client and copy.
claude mcp add --transport http zooza https://mcp.zooza.app/mcp
{
"mcpServers": {
"zooza": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.zooza.app/mcp"]
}
}
}{
"mcpServers": {
"zooza": {
"url": "https://mcp.zooza.app/mcp"
}
}
}{
"servers": {
"zooza": {
"type": "http",
"url": "https://mcp.zooza.app/mcp"
}
}
}{
"context_servers": {
"zooza": {
"url": "https://mcp.zooza.app/mcp"
}
}
}{
"mcpServers": {
"zooza": {
"serverUrl": "https://mcp.zooza.app/mcp"
}
}
}{
"mcpServers": {
"zooza": {
"url": "https://mcp.zooza.app/mcp"
}
}
}name: Zooza
version: 0.0.1
schema: v1
mcpServers:
- name: Zooza
type: streamable-http
url: https://mcp.zooza.app/mcp{
"mcpServers": {
"zooza": {
"httpUrl": "https://mcp.zooza.app/mcp"
}
}
}{
"mcpServers": {
"zooza": {
"type": "http",
"url": "https://mcp.zooza.app/mcp"
}
}
}{
"mcpServers": {
"zooza": {
"url": "https://mcp.zooza.app/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fmcp.zooza.app%2Fmcp&type=streamable_http&id=zooza&name=Zooza
It answered our last check on 17 October 2026 in 195 ms. Over 10 checks since 4 September 2026 it answered 10. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by zooza.app and served from mcp.zooza.app, the vendor's own domain: https://mcp.zooza.app/mcp.
35, as returned by the server's own tools/list on 9 September 2026: bookings_add_lead, bookings_find, classes_add_course, classes_commit_class, classes_find_classes, classes_find_courses, classes_find_resource, classes_list_schedule_patterns, and 27 more.
It answered our last check on 17 October 2026 in 195 ms. Over 10 checks since 4 September 2026 it answered 10.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.zooza.app/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: app.zooza. Endpoint host: mcp.zooza.app. ARD identifier: urn:air:app.zooza:mcp:mcp-server.
First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.