For agents
Connect your agent
Hackalendar speaks MCP. Point the agent you already use at it, and it can search the curated catalogue, read the deadlines and hand you the registration link — with the human-written pick notes in the loop.
Claude Code
claude mcp add --transport http hackalendar https://hackalendar.com/api/mcp
Cursor, Windsurf, or anything that reads mcp.json
{
"mcpServers": {
"hackalendar": {
"url": "https://hackalendar.com/api/mcp"
}
}
}What it can do
search_hackathons— Browse upcoming events — filter by text, city, theme or mode.query, city, theme (ai, web3, climate, health, data, hardware, student, creative), mode (in_person, online, hybrid), limit (1–50, default 20). All optional. city is an exact match on the label, case aside; query is the loose one, matched against name, organiser and city. Filtering by in_person or online also returns the hybrid events.get_hackathon— One event in full: description, venue, dates, calendar link.slug, required — the value a search result hands back.upcoming_deadlines— Registrations closing soon, soonest first.days (1–60, default 14). An event with no published deadline counts from its start date.
Try it before you wire it up
“Which AI hackathons are coming up in Paris?” is one call. No key, no auth, no session:
curl -s https://hackalendar.com/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"search_hackathons",
"arguments":{"city":"Paris","theme":"ai","limit":5}}}'You get back a count and an events array. Every entry carries:
slug, name, url, startsAt, endsAt, timezone, location, countryCode, mode, themes, isFree, prizePool, organizer, registrationUrl, registrationDeadline, deadlineNote, happeningNow, pickNote, cancelled
Anything nobody could establish comes back as null rather than a guess, so an absent prizePool means we do not know it, not that there is none.
Is it up?
GET https://hackalendar.com/api/mcp/health
JSON, never cached. It answers 503 when the catalogue behind the server is unreachable, and 200 otherwise with a status of ok or degraded — degraded meaning the door answers but what is behind it should not be trusted: nothing published, or nothing re-verified in a week. The body names the problem, the protocol version, how many upcoming events there are, and the tool list — which is the machine-readable copy of the three above, and the one to believe if this page ever drifts from it. The status code on its own tells you whether the door is open; read status and catalogue.verifiedAgeHours to know whether what comes through it is current.
Read-only, by design. The connection browses what a human curator published; it cannot register, write, or touch anything. Signing up happens on the organiser’s own page — your agent gets the URL and the deadline, you keep the pen.