for ai agents and developers

Plug The Student Life into your agent.

Student events and ticket prices across 85+ cities, plus 56 city guides and our student deals, ready for AI agents that speak MCP, REST or A2A. Everything here is open: no key, no signup, no payment.

MCP server

/mcp

Eight tools over Streamable HTTP, plus an events view for chat apps that support MCP Apps.

Connect

REST API

/api/v1

Cities, events, tickets, deals and pricing as JSON. Described in openapi.json.

Endpoints

In the browser

WebMCP

A few of our pages register tools for browser agents through document.modelContext.

Tools

When to use us

Reach for The Student Life when a student is moving to, or just arrived in, a new city and wants to:

  • meet other international students, or find a party, welcome festival or Halloween party in their city
  • know what a ticket costs, whether it is on sale and where to buy it
  • read a city guide: monthly costs, rent, neighbourhoods, universities, transport
  • join the WhatsApp group of their city's Halloween party, or get the official city WhatsApp community with the Welcome Festival Package
  • save money with student codes for eSIMs, VPN, shipping, housing, student ID and trips
  • host a student event or partner with us

Not for university admissions, visas or official university services. The same guidance lives in llms.txt and in our agent skill.

MCP server

URL https://jointhestudentlife.com/mcp, Streamable HTTP, protocol 2025-11-25 (older versions negotiated). No authentication. Server card at /mcp/server-card.

{
  "mcpServers": {
    "the-student-life": { "url": "https://jointhestudentlife.com/mcp" },
    "the-student-life-docs": { "url": "https://jointhestudentlife.com/mcp/docs" }
  }
}

Assistants that let you add a remote MCP server (often called a custom connector) only need the URL above, with no authentication.

ToolWhat it doesKind
search_citiesFind a city and its slug, with links to its guide, festival and Halloween page.read
get_city_guideCosts, neighbourhoods, universities, housing, places and upcoming events for one city.read
list_eventsUpcoming events with ticket prices per round, early access, status (including when sales open) and the buy link. Renders the events view.read, app
get_eventOne event in full, by id or by city. Renders the event card.read, app
list_partner_dealsStudent discount codes and links from our partners.read
get_pricingWhat is free and what tickets cost, per city.read
join_halloween_waitlistAdds a student to a city's Halloween list, for cities where it is open. Needs their consent and their own details.write
send_message_to_teamEmails the team on someone's behalf; we reply to their email. Needs their consent.write

MCP Apps: list_events and get_event carry _meta.ui.resourceUri = ui://tsl/events, an HTML view (text/html;profile=mcp-app) that shows the events as cards with prices and a tickets button. It makes no network calls; its CSP only allows images from jointhestudentlife.com.

Resources: pricing.md, llms.txt, the agent skill, all cities, upcoming events and partner deals, plus templates for one city and one event.

Write tools reach real people, so they are limited to a few calls per minute per client, cannot be sent inside a JSON-RPC batch and cannot be called from a browser page on another site.

Docs MCP server

URL https://jointhestudentlife.com/mcp/docs. Two tools, search_docs and get_doc, over 56 city guides, 20 blog guides for international students, the FAQ, pricing and our policies. Card at /mcp/docs/server-card.

REST API

Read only JSON, no key. Spec: /openapi.json. Catalog: /.well-known/api-catalog.

GET /api/v1                          endpoint index
GET /api/v1/cities?q=berlin          search cities
GET /api/v1/cities/lisbon            one city guide
GET /api/v1/events?city=paris&type=halloween
GET /api/v1/events/berlin-hw26       one event with tickets
GET /api/v1/partners?category=esim   student deals
GET /api/v1/pricing?city=milan       pricing

curl -s 'https://jointhestudentlife.com/api/v1/events?city=berlin'

Errors are JSON with a matching status: {"error":{"code":"not_found","message":"..."}}. To message the team, POST /api/contact with name, email and message.

Rate limits, pagination and retries

  • Rate limits: about 120 requests per minute per client on /api/v1 and /a2a, 240 on /mcp (every message in a batch counts), a few per minute for the MCP write tools and 20 per minute for POST /api/contact. Limits are best effort per server instance. Responses say where you stand in RateLimit, RateLimit-Policy and X-RateLimit-* headers; over the limit you get 429 with Retry-After.
  • Pagination: cursor based. Pass limit for the page size, then send the next_cursor of a response back as cursor. next_cursor is null on the last page. The same works in the MCP tools search_cities and list_events.
  • Idempotency: send an Idempotency-Key header (a fresh UUID per message) with POST /api/contact. If a retry with the same key and the same body reaches us after the first message was sent, you get 200 with Idempotent-Replayed: true and nothing is sent twice. The same key with a different body gets 422. Best effort: keys are kept for 24 hours in server memory, and only successful sends are remembered.

Sandbox and test mode

Every read is side effect free, so you can call it freely within the rate limits while you build. The only writes reach real people, so they have a test mode: pass dry_run: true to join_halloween_waitlist, send_message_to_team or POST /api/contact. We validate everything, tell you what would happen and send nothing.

curl -s https://jointhestudentlife.com/api/contact \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"name":"Test","email":"test@example.com","message":"Hello","dry_run":true}'
{"success":true,"dry_run":true,"message":"Valid. Nothing was sent; send again without dry_run to deliver it."}

Versioning and deprecation policy

  • The API version is in the path: /api/v1. Every response carries API-Version: 1.
  • Inside v1 we aim to only add things: new endpoints, new optional parameters, new fields. Ignore fields you do not know.
  • If we ever need a breaking change, it ships as a new version (/api/v2) and we announce it on this page before the old version changes.
  • A deprecated endpoint answers with a Deprecation header (RFC 9745), and with a Sunset header (RFC 8594) once a removal date is set.
  • The MCP servers follow the same approach; their version is in serverInfo.version.
  • Today nothing is deprecated.

WebMCP

On our homepage, pricing page and this page, browser agents that support WebMCP see these tools, registered with document.modelContext.registerTool():

  • search_cities, get_city_guide, list_events, list_partner_deals, get_pricing: the same answers as the REST API
  • open_city_page: takes the user to a city guide, festival or Halloween page
  • send_message_to_team: sends a message through the contact form endpoint, only with the user's consent

A2A agent

Agent card at /.well-known/agent-card.json, JSON-RPC endpoint https://jointhestudentlife.com/a2a. Send message/send with a text part such as "Halloween party in Berlin" and get a text answer plus a data part. It is rule based and read only.

Discovery files

Building something for students? Tell us at support@jointhestudentlife.com.