protogrid

Search / com.extralingo/extralingo

Extralingo

R0· no sign-in

Search language schools abroad, compare courses, dates and prices, and request bookings.

v3.0.1 · active · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality75good
Trust83of 100
Uptime, 30 days100%
Latency p50557 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "extralingo": {
      "type": "http",
      "url": "https://www.extralingo.com/mcp"
    }
  }
}
claude mcp add --transport http extralingo https://www.extralingo.com/mcp
[mcp_servers.extralingo]
url = "https://www.extralingo.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "extralingo": {
      "type": "remote",
      "url": "https://www.extralingo.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "extralingo": {
      "type": "http",
      "url": "https://www.extralingo.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=extralingo&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vd3d3LmV4dHJhbGluZ28uY29tL21jcCJ9"
}
{
  "servers": {
    "extralingo": {
      "type": "http",
      "url": "https://www.extralingo.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "extralingo": {
      "httpUrl": "https://www.extralingo.com/mcp"
    }
  }
}
extensions:
  "extralingo":
    enabled: true
    name: "extralingo"
    type: streamable_http
    uri: "https://www.extralingo.com/mcp"
    timeout: 300

Quality 75 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene100 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations17 of 17 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 5,955 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes17 tool changes in 30 days
  • fail
    stability.rug_pull5 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

17 tools, about 5,955 tokens to load them all · tool set eff84b4b103e · tools last changed 2026-10-03 · checked 2026-10-20 10:03 UTC

Tool changes

  • ask_school_questionchangeddescription, input schema, output schemameaning changed
    before

    Send a question to the school without a full trip config. Requires auth_token. Contact email is always the verified account email.

    after · 39% of words in common

    Send a question to the school without a full trip configuration. Requires OAuth requests scope. Optional idempotency_key.

  • request_discussionchangeddescription, input schema, output schemameaning changed
    before

    Open a trip discussion with the school. Requires auth_token. Contact email is always the verified account email.

    after · 15% of words in common

    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.

  • request_quotechangeddescription, input schema, output schema
    before

    Ask the school for a personal quote. Use when bookings_live is false, or the student is not ready to book. Requires auth_token. Contact email is always the verified account email.

    after · 58% of words in common

    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.

  • create_bookingchangeddescription, input schema, output schemameaning changed
    before

    Makes a real unpaid booking with the school. The school still confirms availability. A down payment is due within 5 days of the school's confirmation via Extralingo only. Requires a credential (OAuth bookings scope or a legacy auth_token), idempotencyKey and phone. Contact email is always the verified account email. Never tell the user they are confirmed or paid.

    after · 48% of words in common

    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 hours.

  • email_tripchangeddescription, input schema, output schema
    before

    Email continue_url (/s/{id}) to the verified account email. Requires OAuth trips scope. Rate-limited. This is not a booking. Without auth, share continue_url from save_trip instead.

    after · 65% of words in common

    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.

  • get_tripchangeddescription, input schema, output schema
    before

    Load a saved trip by trip_id. Returns continue_url for website handoff with the configuration restored.

    after · 83% of words in common

    Load a saved trip by trip_id from save_trip. Returns continue_url for website handoff with configuration restored.

  • save_tripchangeddescription, input schema, output schema
    before

    Create or update a server-side trip draft. Returns trip_id, url (legacy), trip_url, and continue_url (/s/{id}) so the student can continue on Extralingo.com with selections restored. Not a booking. Requires OAuth trips scope (Bearer token).

    after · 88% of words in common

    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).

  • calculate_trip_pricechangeddescription, input schema, output schema
    before

    Live checkout quote for a configuration. Not a booking. Call this before create_booking.

    after · 61% of words in common

    Live checkout quote for a configuration. Not a booking. Call before create_booking and before telling the student a final price.

  • get_accommodation_detailschangeddescription, input schema, output schemameaning changed
    before

    Details for one accommodation group id from list_accommodations.

    after · 16% of words in common

    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.

  • get_course_detailschangeddescription, input schema, output schema
    before

    Details for one course id from list_courses.

    after · 67% of words in common

    Details for one course id from list_courses (pricing rows, supplements, metadata).

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 83 / 100

no-repository
provenance55
liveness100
freshness100
hygiene80

+dns-namespace +website +reachable +uptime-100% +updated-17d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://www.extralingo.com/mcp streamable-httpnoneyes100%557 ms2025-06-182026-10-20

Tools (17)

ask_school_questionSend a question to the school without a full trip configuration. Requires OAuth requests scope. Optional idempotency_key.
calculate_trip_priceread-onlyLive checkout quote for a configuration. Not a booking. Call before create_booking and before telling the student a final price.
create_bookingSubmit 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 hours.
email_tripEmail 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.
get_accommodation_detailsread-onlyOne 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.
get_course_detailsread-onlyDetails for one course id from list_courses (pricing rows, supplements, metadata).
get_schoolread-onlySchool briefing: profile, cancellation policy, reviews, image URLs, bookings_live flag, and optional hero image for chat UI. Requires school_id from search_language_schools.
get_school_filtersread-onlyValid filter values for search_language_schools (languages, countries, cities, course types, and other facets).
get_tripread-onlyLoad a saved trip by trip_id from save_trip. Returns continue_url for website handoff with configuration restored.
list_accommodationsread-onlyAccommodation groups for a school. Use group ids in save_trip configuration (accommodationGroupId).
list_coursesread-onlyLive course catalogue for a bookings_live school (course ids, weeks, prices). Use returned course ids inside save_trip configuration.
list_starting_datesread-onlyAllowed course start dates (typically Mondays) for a school. Use startDate values in list_courses and configuration.startDate.
request_discussionTrip 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.
request_quoteAsk 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.
save_tripCreate 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).
search_destinationsread-onlySearch cities, countries, and school names. Use before search_language_schools to resolve place names to slugs.
search_language_schoolsread-onlySearch 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.extralingo/extralingo",
  "title": "Extralingo",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://www.extralingo.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "3.0.1",
  "websiteUrl": "https://www.extralingo.com/en/developers",
  "description": "Search language schools abroad, compare courses, dates and prices, and request bookings."
}