Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
Extralingo is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Search language schools abroad, compare courses, dates and prices, and request bookings.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http extralingo-mcp https://www.extralingo.com/mcp
# 2 — ask your agent for something these tools do
# search_language_schools, search_destinations, get_school_filters and 14 more
Extralingo costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http extralingo-mcp https://www.extralingo.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
17 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Search and rank language schools. Returns school_id, url, indicative from-price, and reviews. Prices are not a booking quote; call calculate_trip_price before quoting a total.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Free-text search (school name, city, or keyword). Empty returns popular matches for the other filters. |
| language | string | no | Language slug filter from get_school_filters (e.g. spanish, english). |
| country | string | no | Country slug or name filter from get_school_filters. |
| city | string | no | Single city slug filter. Prefer cities[] for multiple. |
| cities | array | no | City slug filters from get_school_filters. |
| course_type | string | no | Course type slug from get_school_filters (e.g. intensive, private). |
| limit | integer | no | Maximum schools to return (1–20). |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
Search cities, countries, and school names. Use before search_language_schools to resolve place names to slugs.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Destination or school name prefix. Empty returns popular destinations. |
| language | string | no | Optional language slug to restrict destinations (e.g. spanish). |
| limit | integer | no | Maximum results (1–20). |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
Valid filter values for search_language_schools (languages, countries, cities, course types, and other facets).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
School briefing: profile, cancellation policy, reviews, image URLs, bookings_live flag, and optional hero image for chat UI. Requires school_id from search_language_schools.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| school_id | integer | yes | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
| include_hero_image | boolean | no | When true, structuredContent may include a compressed JPEG in MCP image content; hero_image is stripped from structuredContent after attach. |
Live course catalogue for a bookings_live school (course ids, weeks, prices). Use returned course ids inside save_trip configuration.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| school_id | integer | yes | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| startDate | string | no | Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
| country_code | string | no | Visitor country ISO 3166-1 alpha-2 (e.g. NL). Affects fee display where applicable. |
Allowed course start dates (typically Mondays) for a school. Use startDate values in list_courses and configuration.startDate.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| school_id | integer | yes | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
Accommodation groups for a school. Use group ids in save_trip configuration (accommodationGroupId).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| school_id | integer | yes | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| startDate | string | no | Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
| country_code | string | no | Visitor country ISO 3166-1 alpha-2 (e.g. NL). Affects fee display where applicable. |
Details for one course id from list_courses (pricing rows, supplements, metadata).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| course_id | string | yes | Course product id from list_courses. |
| school_id | integer | yes | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| startDate | string | no | Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
One group from list_accommodations (group_id): type, room_types, meal/board options, distance, amenities, age and min-stay rules, and week prices for startDate and currency. Use after list_accommodations, before save_trip or calculate_trip_price, or to answer questions about one option. Week prices are indicative; call calculate_trip_price for a checkout total.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| group_id | string | yes | Accommodation group id from list_accommodations. |
| startDate | string | no | Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
Live checkout quote for a configuration. Not a booking. Call before create_booking and before telling the student a final price.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| school_id | integer | no | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| trip_id | string | no | Optional saved trip id; when set, the quote may be stored on that trip. |
| configuration | object | no | Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
| discountCode | string | no | Optional promotion or discount code. |
| country_code | string | no | Visitor country ISO 3166-1 alpha-2 (e.g. NL). Affects fee display where applicable. |
Create or update a server-side trip draft. Returns trip_id, url, trip_url, and continue_url (/s/{id}) so the student can restore selections on Extralingo.com. Not a booking. Requires OAuth trips scope (Bearer token).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| school_id | integer | no | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| trip_id | string | no | Omit to create a new trip. Pass an existing trip_id from save_trip to update the same continue_url. |
| configuration | object | no | Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras. |
| string | no | Optional student email for anonymous drafts. With OAuth, the verified account email is used. | |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
Load a saved trip by trip_id from save_trip. Returns continue_url for website handoff with configuration restored.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| trip_id | string | yes | trip_id returned by save_trip. |
Email continue_url (/s/{id}) to the verified account inbox. Requires OAuth trips scope. Rate-limited. Not a booking; you can share continue_url without emailing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| trip_id | string | yes | trip_id from save_trip. |
| string | no | Optional. Must match the verified OAuth account email if sent. The link is always sent to that account. | |
| firstName | string | no | Optional salutation for the email body. |
| lastName | string | no | Optional salutation for the email body. |
| locale | string | no | Response language and site context. One of en, nl, da, sv. |
Submit an unpaid booking for a bookings_live school (same path as the website Book now flow). The school still confirms availability; Extralingo emails the student; down payment is due within 5 days of school confirmation via Extralingo only. Never tell the user they are confirmed or paid. Requires OAuth bookings scope (Bearer token). Optional idempotency_key replays the same payload within 24 hou
| Parameter | Type | Required | Notes |
|---|---|---|---|
| trip_id | string | no | Optional trip_id from save_trip linking this booking to a draft. |
| school_id | integer | no | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| configuration | object | no | Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras. |
| phone | string | no | Student phone number (required). |
| phoneCountry | string | no | ISO 3166-1 alpha-2 country for the phone (e.g. NL). |
| termsAccepted | boolean | no | Must be true when not using OAuth (OAuth grants record acceptance). |
| privacyAccepted | boolean | no | Must be true when not using OAuth. |
| contact | object | no | Optional first_name, last_name, phone. Email always comes from the verified account; contact.email must match or be omitted. |
| studentDetails | array | no | Per-student details aligned with configuration.students (names, dates of birth, etc.). |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| idempotencyKey | string | no | Optional alias of idempotency_key. |
| idempotency_key | string | no | Optional. Same key + same payload within 24 hours replays the original response; conflicting payload returns validation_failed. |
| specialRequests | string | no | Free-text notes for the school. |
Ask the school for a personal quote when bookings_live is false or the student is not ready to book. Requires OAuth requests scope. Optional idempotency_key.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| idempotency_key | string | no | Optional. Same semantics as create_booking (24 hour replay window). |
| idempotencyKey | string | no | Optional alias of idempotency_key. |
| trip_id | string | no | Optional trip_id from save_trip. |
| school_id | integer | no | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| configuration | object | no | Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras. |
| comments | string | no | Student message to the school. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| contact | object | no | Optional first_name, last_name. Email always comes from the verified account. |
Trip discussion: trip_id or school_id+configuration plus message. ask_school_question: question without a trip. request_quote: personal quote (comments) when not booking. School gets the config; Extralingo emails the verified account and coordinates replies. Returns kind, newBookingId, redirectUrl, message (not a booking). OAuth scope requests. Optional idempotency_key.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| idempotency_key | string | no | Optional. Same semantics as create_booking (24 hour replay window). |
| idempotencyKey | string | no | Optional alias of idempotency_key. |
| trip_id | string | no | Optional trip_id from save_trip. |
| school_id | integer | no | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| configuration | object | no | Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras. |
| message | string | no | Student message to the school. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| contact | object | no | Optional first_name, last_name. Email always comes from the verified account. |
Send a question to the school without a full trip configuration. Requires OAuth requests scope. Optional idempotency_key.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| idempotency_key | string | no | Optional. Same semantics as create_booking (24 hour replay window). |
| idempotencyKey | string | no | Optional alias of idempotency_key. |
| trip_id | string | no | Optional trip_id from save_trip. |
| school_id | integer | yes | Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID. |
| configuration | object | no | Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras. |
| message | string | yes | Student message to the school. |
| currency | string | no | ISO 4217 currency for prices in this call. Usually EUR. |
| contact | object | no | Optional first_name, last_name. Email always comes from the verified account. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Extralingo or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| search_language_schools | no tags | |
| search_destinations | no tags | |
| get_school_filters | no tags | |
| get_school | no tags | |
| list_courses | no tags | |
| list_starting_dates | no tags | |
| list_accommodations | no tags | |
| get_course_details | no tags | |
| get_accommodation_details | no tags | |
| calculate_trip_price | no tags | |
| save_trip | state-write | state-write: declares readOnlyHint: false |
| get_trip | no tags | |
| email_trip | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| create_booking | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| request_quote | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| request_discussion | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| ask_school_question | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 3.0.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Extralingo can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.