A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Office services through the Graph API
ClusterHack is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Run hackathons end to end: events, teams, submissions, judging and winners.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http clusterhack-mcp https://clusterhack.dev/mcp/
# 2 — ask your agent for something these tools do
# event_roles, list_api_endpoints, list_capabilities and 57 more
ClusterHack costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http clusterhack-mcp https://clusterhack.dev/mcp/Reconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
60 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Which roles the signed-in user holds at one specific event. Cheaper and more precise than whoami when you already know the event and just need to know whether the user can organise, judge or only take part.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
List the raw REST endpoints behind this server. Use it together with api_request when you need something no curated tool covers. The list is read from the live URL configuration, so it always matches what the server actually serves.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Filter by path, view name or description, e.g. 'certificate'. |
| limit | integer | no | Maximum endpoints to return. |
The catalogue of everything this server can do, grouped by area. Returns each tool available to the current connection with its one-line purpose, the role it is meant for and the permission it consumes. Use it when you are not sure a capability exists — it is cheaper than guessing tool names, and it shows what the user would gain by granting more permissions.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category | string | no | Limit to one area of the product. |
| include_unavailable | boolean | no | Also list tools this connection cannot use, and say what they need. |
Search across the platform: events, teams, projects, people and articles. One call when you do not yet know the identifier of the thing the user means ("the AI hackathon in Berlin", "Sasha's team"). Returns the matching objects with the slug or id you need for every other tool.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | What to look for. Matches names, descriptions and tags (at most 200 characters and 10 words). |
| kinds | array | no | Which kinds to search. Defaults to all of them. |
| limit | integer | no | Maximum results per kind (1-50). |
What this MCP server is, which version it speaks, and how to connect. Useful for diagnostics and for telling the user where to manage or revoke the connection.
No parameter schema on file.
Who is signed in, what roles they hold, and where. Call this first in any new conversation. It returns the account, the OAuth permissions this connection was granted, and — crucially — the list of events, teams and companies the user belongs to *with the role they hold in each one* (organizer, judge, participant, team lead, free agent, builder, speaker, company admin, platform admin). Use it to
No parameter schema on file.
The global catalogue of certificate background templates (used for the background field of an event's certificate config). Not tied to one event.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
The global catalogue of cities (used for the city field on event_create/event_update and to show where events happen).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
An event's FAQ: the question/answer pairs shown on its public page. Public read — use it to answer a participant's question from the event's own words before guessing, and to check what is already covered before adding more.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
Get one event's full public profile by slug: name, dates, address, topic, description, status and city. Call this once you have a slug (from event_list or search) and need the details. It does not include the schedule, FAQ or nominations — use event_schedule, event_faq and event_nominations for those.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event, e.g. 'ai-build-day'. |
An event's additional free-form information blocks (extra sections shown on its public page beyond the main description — rules, prizes, sponsors notes, etc.).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
Browse hackathons on the platform — filter by status, city or date. Returns each event's slug, which every other event tool needs, plus name, status, dates and city. Use this when the user names an event you do not have a slug for and search is not precise enough, or to show a list of upcoming/past events. Hidden events only appear here for their own organisers.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
| status | string | no | Only events with this status. Filtered over the fetched page, so combine with a larger page_size for an exhaustive scan. |
An event's award nominations/tracks (e.g. "Best AI prototype"), used when creating teams, awarding winners and building the leaderboard per track.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
Public catalogue of event-creation presets (AI build day, student hackathon, corporate innovation day, ...) with sensible defaults and starter nominations. Call before event_create when the user describes a kind of hackathon rather than exact field values.
No parameter schema on file.
The event's timeline: an ordered list of stages/activities (opening, workshops, deadlines, closing ceremony) with title, location, time window and status (past/now/future). This is what participants see as "the schedule". Broadcast link and chat link are only included for the event's admins and registered participants — everyone else sees them blanked.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
The public links for promoting an event: its shareable page, the calendar file participants can add to their own calendar, the Open Graph preview image used when the link is pasted into chat, and a plain-text digest meant for AI assistants. Handy when drafting an announcement — put the share URL in the post and the .ics next to the date. Public read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
An event's team-facing reporting checkpoints (e.g. "Idea locked", "Demo ready") with their time windows — distinct from event_schedule, which is the event's own agenda. Used to track team progress through the event.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
The global catalogue of event types (used for the type field on event_create/event_update). Small and rarely changes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
Read an event's white-label branding: brand colours, public-page theme and dedicated subdomain, plus the resolved values actually used for rendering and branding_enabled — whether the evening currently wears its costume, i.e. whether those values are applied. Public, because the colours are visible on the event page anyway. Use it before event_set_branding to see what is already set.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
List participants at an event who are looking for a team. Visibility follows the platform's own rule, not a full public roster: a normal caller only sees their own free-agent listing here, while an organiser of the event sees everyone's. Use team_matchmaking_teams on a listing's id for AI-ranked team suggestions for that person.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
Summarise the signed-in user's relationship to one event: whether they have joined, their registration answers on file, whether they are listed as a free agent, and which roles they hold there (organizer, judge, team lead, ...). Cheaper than combining several other tools when you just need "is this user in, and how" for one event.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
List the signed-in user's own answers to one event's registration questions. Only ever returns their own data — use event_registration_responses (organiser only) to read other people's.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
List the custom questions an event asks at registration time (its registration form), in display order. Public data — the question text is visible to anyone. Use this before event_submit_registration_answers to know which form_field_ids exist and which are required.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
Look up what a shareable invite link opens, without redeeming it. Public and PII-free: returns the event's name and slug and whether the token is still valid (active, not expired, uses remaining). Use this before invite_join to show the user what they are about to join, or to explain why a link stopped working.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| token | string | yes | The invite token, e.g. from a shared /invite/<token>/ URL. |
Get one team's full detail: name, description, project info, readiness, accessibility flags, and which event and nomination it belongs to. Only visible if the signed-in user belongs to the team, created it, or administers its event.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | yes | Id of the team. |
List teams — scoped to what the signed-in account can see: teams they belong to, created, or administer via being an admin of the team's event. This is never a full public directory of every team on the platform. Filter by event_slug to see just one event's teams, or search to match team/project name and description. Use team_get for the full detail of one team once you have its id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | no | Only teams at this event. |
| search | string | no | Match against team name, description or project name (at most 200 characters, 10 words). |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
Read the physical location details linked to a team's additional-info profile (street, city, state, zip), if one has been set. There is currently no self-service way to create a new location through this API — location rows are set up separately, then referenced by id via team_additional_info's location_id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | yes | Id of the team. |
AI-ranked list of teams one free (teamless) participant could join, within the same event. Callable by the free-agent listing's own owner, or an admin of the event. Use event_free_agents or event_join_as_free_agent to get a free_member_id. Throttled — do not call it in a tight loop.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| free_member_id | integer | yes | Id of the free-agent listing. |
| locale | string | no | Language for the generated explanations, e.g. 'en' or 'ru'. |
List a team's current members with their role and caption. Use the row id (a membership id, not a user id) with team_assign_role or team_remove_member.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | yes | Id of the team. |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
List the positions teams are looking to fill ("we need a designer"). Visibility is limited to what the signed-in account can already see: their own team's open roles, or — if they organise the event — every team's. It is not a public cross-team browse for a stranger looking for any team: that is team_seeking_members, which reads the find-a-team page's own list (pair it with event_free_agents
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | no | Only this team's open roles. |
| event_slug | string | no | Only open roles at this event (within what the caller can see). |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
List a team's public updates ("twits") — the short build-log posts a team publishes as it works, in the order the server returns them. Use it to catch up on what a team has been doing, or to check what has already been posted before writing another update with team_post.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | yes | Id of the team. |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
Check whether a team has marked itself ready to present, plus whether it is banned or currently accessible for judging.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | yes | Id of the team. |
List the roles a team has defined (e.g. "Frontend", "Designer"), which members can be assigned via team_assign_role.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| team_id | integer | yes | Id of the team. |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
Browse the teams of one event that are advertising open positions — the public "who is recruiting" list behind the find-a-team page, readable by anyone, including someone who has not joined the event yet. This is the tool for a person looking for a team. team_open_roles is the other direction: it lists open positions the caller already has access to (their own teams', or every team's if they or
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
| search | string | no | Free-text filter over team name and description (at most 200 characters, 10 words). |
| page | integer | no | Page number, starting at 1. |
| page_size | integer | no | Rows per page (max 100). |
Retrieve one project submission by id: title, links, description, status, approval status, vote count and attached media. Anonymous and unrelated callers only see it once the team has submitted (status "submitted"); drafts are visible only to the team, the event's admins and its judges. Use submission_list or submission_get_mine when you do not already know the numeric id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| submission_id | integer | yes | Numeric id of the submission. |
Browse project submissions, filterable by event, team or status. Anonymous and unrelated callers only ever see submitted (public) projects; a signed-in caller additionally sees their own team's drafts and every submission at events they administer or judge. `status` narrows the returned page client-side (draft / submitted / disqualified) since the underlying list endpoint does not filter by sta
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | no | Only submissions for this event. |
| team_id | integer | no | Only the submission belonging to this team. |
| status | string | no | Filter the returned page by status. |
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
List the screenshots/gallery images attached to a submission. Visibility mirrors the parent submission: public once submitted, otherwise limited to the team, event admins and judges.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| submission_id | integer | yes | Id of the submission. |
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
Read a project's public page: the submission itself, every judge's written feedback (signed with the judge's name only where that judge consented to being named, empty otherwise), and — once the organiser has published the winners — its placement, rank and judge score. This is the tool for "what did the judges say about our project?". submission_get returns the project's own fields and nothing
| Parameter | Type | Required | Notes |
|---|---|---|---|
| submission_id | integer | yes | Id of the submission. |
The ranked leaderboard for one event: submissions ordered by weighted judge score then vote count, with each entry's rank, team and score. Public once the organiser publishes winners; before that, only the event's admins and judges can preview it (everyone else gets a clear "not published yet" error).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
Browse the public, cross-event showcase: shipped/submitted projects ranked for display, with title, tagline, team name, vote count and a cover image. Optionally narrow to one event. This is the public gallery — use event_leaderboard instead when you specifically need judged rankings for one event.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | no | Limit to one event's projects. |
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
A company's longer "about us" blurb (up to 10,000 characters), separate from its short description. Returns found: false if the company has not written one yet.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_id | integer | yes | Numeric id of the company. |
A company's employee roster (position, start date). Without company_id, returns every roster row the caller can see (their own employment rows plus every company they administer) — the underlying API is already scoped that way. With company_id, narrows to that company only.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_id | integer | no | Only rows for this company. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
Pending requests to join a company. A company admin sees everyone waiting on their door; anyone else sees only their own outstanding applications. This is where the request_id for company_decide_employment_request comes from.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_id | integer | no | Only show requests for this company. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
A company's former employees (position, start and end date) — the record created when someone is fired via company_fire_employee. Without company_id, returns every ex-employment row the caller can see (their own, plus every company they administer).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_id | integer | no | Only rows for this company. |
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
One company page by id: name, description, organisation type, website and logo. Public read. Use it after company_list or search to get the full record, and to confirm you have the right company before employment or sponsorship actions, which are irreversible for the people involved.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_id | integer | yes | Numeric id of the company. |
Browse ClusterHack company pages: name, description, org type, website and logo. Public data — use this to find a company's id before calling any other company tool.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
The company page's public roster in one call: the people listed as employees and the people listed as moderators, exactly as the company page renders them to any visitor. Use this — not company_employees / company_admins — whenever you want to read *someone else's* roster. Those two are scoped to self-or-admin, so an outsider gets an empty list from them and cannot tell "nobody works here" ap
| Parameter | Type | Required | Notes |
|---|---|---|---|
| company_id | integer | yes | Numeric id of the company. |
The public board of companies not yet on ClusterHack (a lightweight off-platform listing — name, description, website — not a job-posting system). Public, no filters.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number, 1-based. |
| page_size | integer | no | Results per page (max 100). |
Sponsors of one event that are NOT themselves on ClusterHack (a name, description, website and logo entered as free text, with the sponsorship tier each one belongs to) — the off-platform counterpart to event_sponsors. Public read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
The sponsorship tiers/groups defined for one event (e.g. "Sponsors", "Partners", "General Partner") — the buckets event_add_sponsor slots companies into. Public read.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
The on-platform companies sponsoring one event, with the sponsorship tier each one is slotted into (e.g. "Sponsors", "Partners", "General Partner"). Public read. Use event_sponsor_text alongside this for sponsors that are not themselves on ClusterHack yet.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_slug | string | yes | Slug of the event. |
Retrieve one CMS article by id: its body, publish date, hidden flag, and which title/slug and language it belongs to.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | The article's id. |
List the languages articles can be written in, e.g. {"language_name": "English", "short_name": "en"}. Use this to find the language_id article_create needs.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
Browse CMS articles (the pages under /articles/<language>/<slug>). Filter by language (a language's short code, e.g. 'en') and/or slug (a title's slug) to find one specific page's translations. Hidden drafts are only included for staff callers; everyone else sees only published articles.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| language | string | no | Language short code to filter by, e.g. 'en' or 'ru'. |
| slug | string | no | Title slug to filter by, e.g. 'how-to-organize'. |
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
List the CMS "title" records — each one a page's title text and slug, e.g. {"title": "How to organize a hackathon", "slug": "how-to-organize"}. An article always points at one of these; use this to find the title_id article_create needs, or to see what pages exist at all.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
The service's legal identity, as the terms-of-service, privacy and support pages render it: the service and operating entity, whether that entity is registered and where, the contact and privacy email addresses, the postal address, the terms' effective date and the minimum age to hold an account. Read it instead of hard-coding a copy — a client building its own footer, quoting the contact address
No parameter schema on file.
List tags used to categorize content across the platform (articles, projects and more share the same tag vocabulary).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
List technologies (tech-stack tags) that projects and teams can be labelled with, e.g. "React", "PostgreSQL".
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | integer | no | Page number. |
| page_size | integer | no | Results per page (max 100). |
How the signed-in user sees and revokes AI access to their own account — read this instead of looking for a tool that lists or cuts off connected clients, because there is deliberately no such tool. The controls over AI access (list connected clients, revoke one, list and end live MCP sessions, read the record of what a client did as them) are gated to the account holder signing in directly: a br
No parameter schema on file.
Explains how to connect an account to this MCP server — read this instead of guessing at a login/registration tool, because there isn't one. ClusterHack's own credential endpoints (register, login, JWT issuance, password reset) are the website's login form, not MCP tools: an MCP client authenticates by OAuth 2.1 (the same flow a human approves in a browser tab) and must never see or handle a Clus
No parameter schema on file.
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install ClusterHack or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish ClusterHack can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.