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
Eight tools over Streamable HTTP, plus an events view for chat apps that support MCP Apps.
WebMCP
A few of our pages register tools for browser agents through document.modelContext.
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.
| Tool | What it does | Kind |
|---|---|---|
search_cities | Find a city and its slug, with links to its guide, festival and Halloween page. | read |
get_city_guide | Costs, neighbourhoods, universities, housing, places and upcoming events for one city. | read |
list_events | Upcoming events with ticket prices per round, early access, status (including when sales open) and the buy link. Renders the events view. | read, app |
get_event | One event in full, by id or by city. Renders the event card. | read, app |
list_partner_deals | Student discount codes and links from our partners. | read |
get_pricing | What is free and what tickets cost, per city. | read |
join_halloween_waitlist | Adds 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_team | Emails 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/v1and/a2a, 240 on/mcp(every message in a batch counts), a few per minute for the MCP write tools and 20 per minute forPOST /api/contact. Limits are best effort per server instance. Responses say where you stand inRateLimit,RateLimit-PolicyandX-RateLimit-*headers; over the limit you get429withRetry-After. - Pagination: cursor based. Pass
limitfor the page size, then send thenext_cursorof a response back ascursor.next_cursorisnullon the last page. The same works in the MCP toolssearch_citiesandlist_events. - Idempotency: send an
Idempotency-Keyheader (a fresh UUID per message) withPOST /api/contact. If a retry with the same key and the same body reaches us after the first message was sent, you get200withIdempotent-Replayed: trueand nothing is sent twice. The same key with a different body gets422. 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 carriesAPI-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
Deprecationheader (RFC 9745), and with aSunsetheader (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 APIopen_city_page: takes the user to a city guide, festival or Halloween pagesend_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
- /llms.txt: what we are, when to use us, where everything lives
- /index.md and /pricing.md: markdown versions; the homepage also answers
Accept: text/markdown - /.well-known/ard.json (same as ai-catalog.json): every agent resource with provenance digests
- /.well-known/agent-skills/index.json: our agent skill
- /.well-known/mcp.json and /.well-known/mcp/server-card.json
- /auth.md: authentication, which is none
Building something for students? Tell us at support@jointhestudentlife.com.
