Skip to main content
Glama

jointhestudentlife

Official SDK and CLI for The Student Life: student events, ticket prices, city guides and student deals in 85+ cities, for international and exchange students.

The API is open. No key, no signup, no payment. Zero dependencies, ESM only (import, not require); works anywhere fetch exists (Node 18+, Deno, Bun, browsers, edge runtimes).

CLI

npx jointhestudentlife events berlin            # upcoming events with ticket prices
npx jointhestudentlife events --type halloween  # every Halloween party
npx jointhestudentlife city lisbon              # costs, universities, upcoming events
npx jointhestudentlife deals esim               # student discount codes
npx jointhestudentlife pricing                  # what is free, what tickets cost
npx jointhestudentlife cities --country DE --json

Related MCP server: UoE Companion

SDK

import { TheStudentLife } from 'jointhestudentlife';

const tsl = new TheStudentLife();
const { events } = await tsl.events({ city: 'paris', type: 'halloween' });
console.log(events[0].tickets.options); // [{ name: 'Round 1', price: 9.5, currency: 'EUR' }, ...]

const guide = await tsl.city('lisbon');
for await (const city of tsl.eachCity()) console.log(city.name);

Methods: cities, city, events, event, partners, pricing, eachCity, eachEvent, sendMessage, info. Lists are cursor paginated (next_cursor). Errors throw TheStudentLifeError with status and code (including timeout and network_error). Requests retry on 429 (honouring Retry-After); reads also retry on 5xx, while a message is only retried when it carries an idempotency key: without a key the SDK never retries a message, so it cannot send it twice. Requests time out after 30 seconds (timeoutMs).

sendMessage emails our team on someone's behalf. Only use it with that person's consent and their own name and email. It is meant for server side code: browser pages on other sites are refused. Set dryRun: true to validate without sending. To make retries safe, pass a fresh idempotency key per message in the second argument; the server then recognises a retry (best effort, see the developer docs). Messages are limited to a few per minute.

await tsl.sendMessage({ name, email, message, dryRun: true }); // validates, sends nothing
await tsl.sendMessage({ name, email, message }, { idempotencyKey: crypto.randomUUID() });

MCP

The Student Life runs a remote MCP server at https://jointhestudentlife.com/mcp (Streamable HTTP). Clients that only speak stdio can use this package as a bridge:

{
  "mcpServers": {
    "the-student-life": { "command": "npx", "args": ["-y", "jointhestudentlife", "mcp"] }
  }
}

The server has six read tools and two that act: send_message_to_team emails our team and join_halloween_waitlist adds someone to a city's Halloween list. Only call them with that person's consent and their own details. Both accept dry_run: true, which validates everything and sends nothing.

The code in this package is MIT licensed. The Student Life name, logo and the data served by the API are not covered by that licence. The Student Life is operated by Socials BV, Brussels.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables hosts and couples to plan event music using Vibo by browsing events, managing song requests, and exporting selections to Spotify/Apple Music via natural language.
    42
    595 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables browsing live event, venue, and lineup listings city by city, with optional category filtering for gigs, club nights, comedy, theatre, and talks. Also returns full detail for any single event, including dates, venue and address, on-sale window, starting price, billed artists, and highlights such as age restrictions.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search upcoming public events and group topic categories by keyword, city, or group slug, and to retrieve full details for individual events and groups, keylessly and without touching attendee or member data.
    MIT