
Zooza MCP Server
Connects Claude to Zooza's class scheduling and attendance platform, built for activity businesses like dance schools, language academies, and sports clubs. Exposes 19 tools covering schedule previews, class creation, attendance tracking, booking management, and term planning. Uses streamable HTTP at mcp.zooza.app with OAuth authentication scoped to your existing Zooza account permissions. Every write operation requires explicit confirmation before committing changes. Includes multilingual terminology negotiation so Claude adapts to your studio's vocabulary, whether you call them kurzy, Kurse, or programmes. Useful if you run a studio or franchise network and want to take attendance, build term schedules, or query bookings through natural language instead of clicking through the dashboard. Works with Claude Desktop, Claude Code, and ChatGPT via OpenAI Actions.
- GitHub stars
- 6
- tools
- 18
- transport
- HTTP
- last updated
- Jun 10, 2026
Install
From registry metadata$ npx add-mcp https://mcp.zooza.app/mcp --name zoozaRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http zooza https://mcp.zooza.app/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 18 toolsVerified live against the running server on Nov 6, 2026.
get_terminologySearch 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 resolve ambiguous user input before cal...3 params
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 resolve ambiguous user input before cal...
categorystringproduct-hierarchy · programme-types · bookings · attendance · payments · clientslanguagestringen · sk · cz · de · pl · roquerystringwhoamiReturns 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 least one company available. Pick a 'com...
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 least one company available. Pick a 'com...
No parameters. Call it with no arguments.
classes_find_coursesSearch 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 to act. Use this whenever the user na...6 params
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 to act. Use this whenever the user na...
company_idintegerinclude_archivedbooleannamestringpageintegerpage_sizeintegerregistration_typestringsingle · full2 · openclasses_find_resourceResolve 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 followed by picking a room. Filters: n...9 params
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 followed by picking a room. Filters: n...
citystringcompany_idintegercourse_idintegerinclude_inactivebooleankind*stringplace · billing_period · trainer · trainer_rate_typenamestringpageintegerpage_sizeintegerplace_idintegerclasses_find_classesSearch 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 group rather than a whole programme (...16 params
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 group rather than a whole programme (...
active_onlybooleanbilling_period_idvaluecompany_idintegercourse_idintegerdayintegerin_trialbooleaninclude_archivedbooleanlead_onlybooleannamestringpageintegerpage_sizeintegerplace_idintegerregistration_typestringsingle · full2 · opensortstringcreated_desc · created_asc · date_asc · date_desc · name_asc · registrations_desctrainer_idintegerwith_sessionsbooleanbookings_findFind 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?" (set `payment_status:["unpaid","part...18 params
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?" (set `payment_status:["unpaid","part...
billing_period_idintegercompany_idintegercourse_idintegercreated_fromstringcreated_tostringdistinctbooleaninactive_onlybooleaninclude_extra_fieldsbooleannamestringpageintegerpage_sizeintegerpayment_statusarrayplace_idintegerregistration_idintegerschedule_idintegersearchstringstatusarrayuser_idintegersessions_find_eventsList **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") before chaining into another tool...17 params
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") before chaining into another tool...
billing_period_idvaluecompany_idintegercourse_idvaluedatestringfromstringidsarraypageintegerpage_sizeintegerplace_idvalueroom_idvalueschedule_idintegersegment_idarraysortstringdate_asc · date_desc · event_no_asc · event_no_desc · created_asc · created_descstatusstringscheduled · unplanned · finished · anytostringtrainer_idvaluetypestringover_capacity · under_capacity · custom_replacement · rescheduled · substituted · cancelledsessions_get_attendanceRead 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 already marked), and per-row context the...2 params
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 already marked), and per-row context the...
company_idintegerevent_id*integersessions_mark_attendanceRecord 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`, `going`, `ignore`). Each value is s...3 params
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`, `going`, `ignore`). Each value is s...
attendees*arraycompany_idintegerevent_id*integerclasses_updateEdit 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/extra_capacity_usage, NOT registrations_...7 params
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/extra_capacity_usage, NOT registrations_...
changesobjectcompany_idintegerconfirm_course_changebooleanconfirmedbooleanschedule_idsarraysession_scopestringclass_only · upcoming · alltokenstringsessions_updateEdit specific individual sessions (events) of a class, OR add new sessions to a class. Two modes, one tool. NOT for a change that holds from a date onward or for every session ("from next week Jana teaches the Monday class", "the class moves to Room B") — that is ONE classes_u...8 params
Edit specific individual sessions (events) of a class, OR add new sessions to a class. Two modes, one tool. NOT for a change that holds from a date onward or for every session ("from next week Jana teaches the Monday class", "the class moves to Room B") — that is ONE classes_u...
changesobjectcompany_idintegerconfirmedbooleanevent_idsarraynotifybooleanschedule_idintegersessionsarraytokenstringsessions_cancelCancel one or more scheduled SESSIONS of a class so they do not take place — "cancel Tuesday's sessions", "the pool is closed on Friday", "Martina is ill all week, cancel her classes". A cancelled session stays visible in Zooza with a cancelled status; it is NOT deleted. Scope...17 params
Cancel one or more scheduled SESSIONS of a class so they do not take place — "cancel Tuesday's sessions", "the pool is closed on Friday", "Martina is ill all week, cancel her classes". A cancelled session stays visible in Zooza with a cancelled status; it is NOT deleted. Scope...
company_idintegerconfirmedbooleandatestringevent_idsarrayfromstringinclude_pastbooleannotifybooleanplace_idintegerpublic_reasonstringreasonstringreplacement_datestringreplacement_place_idintegerreplacement_room_idintegerschedule_idintegertostringtokenstringtrainer_idintegerbookings_copy_bookingCopy or move a client's existing booking into a different class. COPY creates a second booking and leaves the original in place — use it when the client is continuing into a new term or adding a class alongside their current one. MOVE relocates the booking itself, carrying its...11 params
Copy or move a client's existing booking into a different class. COPY creates a second booking and leaves the original in place — use it when the client is continuing into a new term or adding a class alongside their current one. MOVE relocates the booking itself, carrying its...
actionstringcopy · movecompany_idintegerconfirmedbooleanpaymentsstringfrom_target_class · do_not_changeregistration_idintegersend_confirmationbooleanstartstringstatusstringregistered · waitlist · late · trial_started · trial_not_startedtarget_event_idintegertarget_schedule_idintegertokenstringcomms_send_messageEmail 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_list_templates, or a custom subject +...10 params
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_list_templates, or a custom subject +...
audienceobjectbccstringchannelstringemailcompany_idintegerconfirm_large_sendbooleanconfirmedbooleancontentobjectmarketingbooleanschedule_atobjecttokenstringreports_get_dataReturn 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, attendance, trials, retention, revenue,...4 params
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, attendance, trials, retention, revenue,...
company_idintegerfromstringtostringviewstringget_skillReturns 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. Available skills: business-model-val...1 params
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. Available skills: business-model-val...
name*stringget_tool_schemaReturns the description and exact input schema of a Zooza tool, including tools not in your tool list (call_tool lists them). Call it once per tool before that tool's first call_tool.1 params
Returns the description and exact input schema of a Zooza tool, including tools not in your tool list (call_tool lists them). Call it once per tool before that tool's first call_tool.
name*stringcall_toolRuns a Zooza tool by name. Use it for every Zooza tool that is NOT in your tool list — these exist and work; never send the user to another app because a Zooza tool isn't listed. Call get_tool_schema(name) first for the arguments. Write tools behave exactly as when called dire...2 params
Runs a Zooza tool by name. Use it for every Zooza tool that is NOT in your tool list — these exist and work; never send the user to another app because a Zooza tool isn't listed. Call get_tool_schema(name) first for the arguments. Write tools behave exactly as when called dire...
argumentsobjectname*stringSponsors
Readme
Zooza MCP Server — AI-Powered Class Management for Activity Businesses
An open-source Model Context Protocol (MCP) server that connects Claude, ChatGPT, and other AI assistants directly to your Zooza account.
Natural language scheduling, attendance tracking, lead follow-up, and class management — no dashboard required.
Details
- Repository
- github.com/zooza-dev/zooza-mcp-server
- Transport
- HTTP
- Registry
- MCP registry, active
- Tools verified
- Nov 6, 2026