# ClusterHack (remote · clusterhack.dev)

Run hackathons end to end: events, teams, submissions, judging and winners.

- Trust score: 87/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- remote · `clusterhack.dev`: 87/100 (this document), [markdown](https://verifymcp.io/servers/dev-clusterhack-clusterhack/clusterhack.md), [page](https://verifymcp.io/servers/dev-clusterhack-clusterhack/clusterhack)

## Channel facts

- Endpoint: `https://clusterhack.dev/mcp/`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Endpoint Security**: 83/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 90/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6500 tokens (~106/item across 61 items; 60 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 80/100
  - Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 60 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 62 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the ClusterHack MCP server?

ClusterHack is a hosted endpoint at https://clusterhack.dev/mcp/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http dev-clusterhack-clusterhack 'https://clusterhack.dev/mcp/'
```

### Cursor

```json
{
  "mcpServers": {
    "dev-clusterhack-clusterhack": {
      "url": "https://clusterhack.dev/mcp/"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "dev-clusterhack-clusterhack": {
      "type": "http",
      "url": "https://clusterhack.dev/mcp/"
    }
  }
}
```

### Codex

```toml
[mcp_servers.dev-clusterhack-clusterhack]
url = "https://clusterhack.dev/mcp/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-clusterhack-clusterhack": {
      "type": "remote",
      "url": "https://clusterhack.dev/mcp/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-clusterhack-clusterhack --url 'https://clusterhack.dev/mcp/' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  dev-clusterhack-clusterhack:
    url: "https://clusterhack.dev/mcp/"
```

### Netclaw

```json
{
  "McpServers": {
    "dev-clusterhack-clusterhack": {
      "Transport": "http",
      "Url": "https://clusterhack.dev/mcp/"
    }
  }
}
```

### Vellum

```bash
assistant mcp add dev-clusterhack-clusterhack -t streamable-http -u 'https://clusterhack.dev/mcp/'
```

### Other

```json
{
  "mcpServers": {
    "dev-clusterhack-clusterhack": {
      "type": "http",
      "url": "https://clusterhack.dev/mcp/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-19 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-13 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-11 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-10 (score 82, 0)

- [security] Tool “event_branding” rewrote its description, which is the text the model reads

### 2026-09-09 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-07 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (60)

### `event_roles` (~67 tokens)

My roles at an event

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `list_api_endpoints` (~90 tokens)

List API endpoints

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.

Input parameters:

- `limit` (integer): Maximum endpoints to return.
- `query` (string): Filter by path, view name or description, e.g. 'certificate'.

### `list_capabilities` (~119 tokens)

List capabilities

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.

Input parameters:

- `category` (string): Limit to one area of the product.
- `include_unavailable` (boolean): Also list tools this connection cannot use, and say what they need.

### `search` (~120 tokens)

Search everything

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.

Input parameters:

- `kinds` (array): Which kinds to search. Defaults to all of them.
- `limit` (integer): Maximum results per kind (1-50).
- `query` (string, required): What to look for. Matches names, descriptions and tags.

### `server_info` (~41 tokens)

Server info

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.

### `whoami` (~128 tokens)

Who am I

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 decide which tools apply before calling anything else, and to
resolve "my event" / "our team" into a concrete slug or id.

### `event_background_images` (~67 tokens)

List certificate backgrounds

The global catalogue of certificate background templates (used for the
\`background` field of an event's certificate config). Not tied to one
event.

Input parameters:

- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_cities` (~68 tokens)

List cities

The global catalogue of cities (used for the `city` field on
\`event_create`/`event_update` and to show where events happen).

Input parameters:

- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_faq` (~99 tokens)

Get event FAQ

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_get` (~107 tokens)

Get an event

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.

Input parameters:

- `event_slug` (string, required): Slug of the event, e.g. 'ai-build-day'.

### `event_info_blocks` (~82 tokens)

Get event info blocks

An event's additional free-form information blocks (extra sections shown
on its public page beyond the main description — rules, prizes, sponsors
notes, etc.).

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_list` (~154 tokens)

Browse events

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.

Input parameters:

- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).
- `status` (string): Only events with this status. Filtered over the fetched page, so combine with a larger page_size for an exhaustive scan.

### `event_nominations` (~81 tokens)

Get event nominations

An event's award nominations/tracks (e.g. "Best AI prototype"), used when
creating teams, awarding winners and building the leaderboard per track.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_presets` (~61 tokens)

Event creation presets

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.

### `event_schedule` (~125 tokens)

Get event schedule

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_share_links` (~99 tokens)

Get an event's share links

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `event_team_stages` (~100 tokens)

Get team-progress stages

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_types` (~66 tokens)

List event types

The global catalogue of event types (used for the `type` field on
\`event_create`/`event_update`). Small and rarely changes.

Input parameters:

- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_branding` (~105 tokens)

Get event branding

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `event_free_agents` (~123 tokens)

List free agents at an 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.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).

### `event_my_membership` (~100 tokens)

My status at an event

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `event_my_registration_answers` (~92 tokens)

Get my registration answers

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).

### `event_registration_form` (~107 tokens)

Get an event's registration form

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_id`s exist
and which are required.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).

### `invite_preview` (~106 tokens)

Preview an invite link

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.

Input parameters:

- `token` (string, required): The invite token, e.g. from a shared /invite/<token>/ URL.

### `team_get` (~70 tokens)

Get a team

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.

Input parameters:

- `team_id` (integer, required): Id of the team.

### `team_list` (~159 tokens)

List teams

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.

Input parameters:

- `event_slug` (string): Only teams at this event.
- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).
- `search` (string): Match against team name, description or project name.

### `team_locations` (~91 tokens)

Get a team's location

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`.

Input parameters:

- `team_id` (integer, required): Id of the team.

### `team_matchmaking_teams` (~122 tokens)

Suggest teams for a free agent

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.

Input parameters:

- `free_member_id` (integer, required): Id of the free-agent listing.
- `locale` (string): Language for the generated explanations, e.g. 'en' or 'ru'.

### `team_members` (~90 tokens)

List team members

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`.

Input parameters:

- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).
- `team_id` (integer, required): Id of the team.

### `team_open_roles` (~267 tokens)

List open team roles

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` and
\`team_matchmaking_teams`). Filter with `team_id` for one team, or
\`event_slug` to see everything the caller can see at that event.

\`team_id` is answered exactly. `event_slug` (and the unfiltered form) is
not: the underlying endpoint narrows by one team at a time and has no
event filter, so a very large event can return a `note` saying rows were
left unscanned. Ask per team when that matters.

Input parameters:

- `event_slug` (string): Only open roles at this event (within what the caller can see).
- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).
- `team_id` (integer): Only this team's open roles.

### `team_posts` (~113 tokens)

List a team's posts

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`.

Input parameters:

- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).
- `team_id` (integer, required): Id of the team.

### `team_readiness` (~44 tokens)

Get a team's readiness

Check whether a team has marked itself ready to present, plus whether it
is banned or currently accessible for judging.

Input parameters:

- `team_id` (integer, required): Id of the team.

### `team_roles` (~78 tokens)

List a team's roles

List the roles a team has defined (e.g. "Frontend", "Designer"), which
members can be assigned via `team_assign_role`.

Input parameters:

- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).
- `team_id` (integer, required): Id of the team.

### `team_seeking_members` (~207 tokens)

Browse teams looking for people

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 organise the event) and shows a
stranger nothing. Each row here carries the team's public profile plus its
\`open_roles`. Follow up with
\`team_request_join`, or list yourself with `event_join_as_free_agent` if
nothing fits.

Input parameters:

- `event_slug` (string, required): Slug of the event.
- `page` (integer): Page number, starting at 1.
- `page_size` (integer): Rows per page (max 100).
- `search` (string): Free-text filter over team name and description.

### `submission_get` (~102 tokens)

Get a submission

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.

Input parameters:

- `submission_id` (integer, required): Numeric id of the submission.

### `submission_list` (~172 tokens)

List submissions

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 status itself — combine with a
larger `page_size` if you need it applied beyond one page.

Input parameters:

- `event_slug` (string): Only submissions for this event.
- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).
- `status` (string): Filter the returned page by status.
- `team_id` (integer): Only the submission belonging to this team.

### `submission_list_media` (~79 tokens)

List submission media

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.

Input parameters:

- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).
- `submission_id` (integer, required): Id of the submission.

### `submission_page` (~223 tokens)

Read a project's page and its judge feedback

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 about how it
was received; `judging_scores_for_submission` is scoped to judges and event
admins, so a team cannot read its own verdict through it. A submitted
project's page is public; a draft is visible only to its team and the
event's admins. Before the ceremony the placement is shown to the team and
the hosts alone, flagged `placement_private` so a client says "not
announced yet" instead of leaking it. `private_note` is the organisers'
line and is absent — not blanked, absent — from everyone else's payload.

Input parameters:

- `submission_id` (integer, required): Id of the submission.

### `event_leaderboard` (~86 tokens)

Get an event's leaderboard

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).

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `showcase_browse` (~114 tokens)

Browse the showcase

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.

Input parameters:

- `event_slug` (string): Limit to one event's projects.
- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).

### `company_about_us` (~64 tokens)

Get a company's about-us page

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.

Input parameters:

- `company_id` (integer, required): Numeric id of the company.

### `company_employees` (~109 tokens)

List company employees

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.

Input parameters:

- `company_id` (integer): Only rows for this company.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `company_employment_requests` (~99 tokens)

List employment requests

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.

Input parameters:

- `company_id` (integer): Only show requests for this company.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `company_ex_employees` (~105 tokens)

List a company's former employees

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).

Input parameters:

- `company_id` (integer): Only rows for this company.
- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `company_get` (~85 tokens)

Get a company

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.

Input parameters:

- `company_id` (integer, required): Numeric id of the company.

### `company_list` (~72 tokens)

List companies

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.

Input parameters:

- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `company_roster` (~156 tokens)

A company's public roster

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" apart from "you may not see who does". This endpoint is the part of
the page that is already public, and nothing more: no join requests, no
ex-employees, no write verbs.

Input parameters:

- `company_id` (integer, required): Numeric id of the company.

### `company_vacancies` (~75 tokens)

List off-platform companies

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.

Input parameters:

- `page` (integer): Page number, 1-based.
- `page_size` (integer): Results per page (max 100).

### `event_sponsor_text` (~73 tokens)

List an event's off-platform sponsors

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `event_sponsor_tiers` (~63 tokens)

List an event's sponsor tiers

The sponsorship tiers/groups defined for one event (e.g. "Sponsors",
"Partners", "General Partner") — the buckets `event_add_sponsor` slots
companies into. Public read.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `event_sponsors` (~79 tokens)

List an event's sponsors

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.

Input parameters:

- `event_slug` (string, required): Slug of the event.

### `article_get` (~48 tokens)

Get an article

Retrieve one CMS article by id: its body, publish date, hidden flag, and
which title/slug and language it belongs to.

Input parameters:

- `article_id` (integer, required): The article's id.

### `article_languages` (~75 tokens)

List article languages

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.

Input parameters:

- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).

### `article_list` (~147 tokens)

List articles

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.

Input parameters:

- `language` (string): Language short code to filter by, e.g. 'en' or 'ru'.
- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).
- `slug` (string): Title slug to filter by, e.g. 'how-to-organize'.

### `article_titles` (~107 tokens)

List article titles

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.

Input parameters:

- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).

### `legal_info` (~146 tokens)

Site legal information

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, or answering "how old do I have to be" should
take the values from here, where the pages themselves take them, so the two
cannot drift apart. Public: it needs no account, and it is the same text an
anonymous visitor already sees.

### `tag_list` (~53 tokens)

List tags

List tags used to categorize content across the platform (articles,
projects and more share the same tag vocabulary).

Input parameters:

- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).

### `tech_list` (~61 tokens)

List technologies

List technologies (tech-stack tags) that projects and teams can be
labelled with, e.g. "React", "PostgreSQL".

Input parameters:

- `page` (integer): Page number.
- `page_size` (integer): Results per page (max 100).

### `account_ai_access` (~207 tokens)

Managing AI access to this account

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 browser session, a JWT,
or an API token they hold themselves. A connected AI client — including
this one — is refused, on purpose. If it were not, a client could revoke
its rivals, enumerate the user's other connections, or read the trail it
leaves behind. So this tool tells the user where to go and what they will
find; it makes no API call and cannot fail.

Also names where account deletion and data export live: the export has a
tool (`account_export_data`), the deletion deliberately does not.

### `account_how_to_sign_in` (~126 tokens)

How to sign in

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 ClusterHack password directly. This
tool works with no account at all, and just explains the steps and links.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/dev-clusterhack-clusterhack/clusterhack#diagnostics

## Score history

- 2026-09-20: 87
- 2026-09-19: 87
- 2026-09-18: 86
- 2026-09-17: 86
- 2026-09-16: 85
- 2026-09-15: 85
- 2026-09-14: 84
- 2026-09-13: 84
- 2026-09-12: 83
- 2026-09-11: 83
- 2026-09-10: 82
- 2026-09-09: 82
- 2026-09-08: 81
- 2026-09-07: 81
- 2026-09-06: 80
- 2026-09-05: 80
- 2026-09-04: 80
- 2026-09-03: 79
- 2026-09-02: 79
- 2026-09-01: 78
- 2026-08-31: 78
- 2026-08-30: 77
- 2026-08-29: 77
- 2026-08-28: 76
- 2026-08-27: 76

## Common questions

### What is the ClusterHack MCP server?

ClusterHack is an MCP server listed in the public MCP registry as dev.clusterhack/clusterhack. Run hackathons end to end: events, teams, submissions, judging and winners. This page covers its hosted endpoint (https://clusterhack.dev/mcp/).

### Is the ClusterHack MCP server safe to use?

ClusterHack scores 87 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the ClusterHack MCP server expose?

ClusterHack exposes 60 tools: event_roles, list_api_endpoints, list_capabilities, search, server_info, and 55 more. Their descriptions and schemas cost roughly 6,274 tokens of context every time the server is loaded.

### Does the ClusterHack MCP server require authentication?

No. We connected to ClusterHack without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the ClusterHack MCP server still maintained?

ClusterHack is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://clusterhack.dev/mcp/
- Website: https://clusterhack.dev/mcp-features
- Changelog RSS feed: https://verifymcp.io/servers/dev-clusterhack-clusterhack/clusterhack.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-clusterhack-clusterhack/clusterhack.json
- HTML version of this page: https://verifymcp.io/servers/dev-clusterhack-clusterhack/clusterhack
