Skip to main content
Glama
hacklist-mcp

hacklist-mcp

hacklist-mcp

An MCP server that gives Claude and ChatGPT live access to HackList, the directory of AI and Web3 hackathons, grants, bounties and programs.

Ask things like:

  • "What should I enter this month? I write Solidity and Python, build agents, I'm in Nigeria and can't travel."

  • "When was the Qloo hackathon posted, and what's the actual cash prize?"

  • "Anything new on HackList this week over $10k?"

  • "Find ZK or privacy hackathons closing in the next 10 days."

Why it isn't just a scraper

HackList lists everything. This server tells you which listings are worth your weekend:

Problem on the raw list

What the server does

Same event listed twice (Amazon, GitLab, OpenCV, GenAI Works…)

Detects duplicates by title, organizer, deadline and apply link, and collapses them

"$190,000 total value" that is mostly AWS credits

Separates cash from credits clause by clause; headline shows the cash

₹, USDC, USDT, € prizes you can't compare

Converts to an approximate USD figure (original text always kept)

Events you can't actually enter

Flags students-only, region-locked, in-person-only, partners-only and application-gated events, and drops them from recommendations

"Build an AI app that solves real-world problems"

Scores each brief for how generic it is (0 = specific, 1 = generic) and lists the concrete hooks: named APIs, datasets, scoring metrics, tracks

Rolling grants and bounties with no deadline

Kept as open ("no fixed deadline") and ranked fairly instead of being dropped or buried

best_opportunities combines all of that with your skills and constraints and explains every pick (why) and every risk (watch_outs).

Related MCP server: bounty-mcp

Tools

Tool

What it does

best_opportunities

Ranks open opportunities for a builder (skills, interests, country, student, can travel, cash only). Down-ranks generic briefs, removes ineligible ones, explains each pick.

search_opportunities

Keyword search with filters: type, AI/Web3, online/in-person/hybrid, min prize, cash only, closes within N days, updated within N days, include closed.

get_opportunity

Full detail for one listing by HackList URL, id or title: brief, prize (USD estimate, cash vs credits), deadline and days left, posted/updated date, apply link, eligibility, duplicates.

whats_new

Listings posted or updated in the last N days.

closing_soon

Open listings ending within N days, soonest first.

hacklist_overview

Counts, cash prize total, biggest prizes, duplicate groups, data coverage. refresh: true re-fetches.

search / fetch

The two tools ChatGPT connectors and deep research expect.

All tools are read-only.

Install

Claude and ChatGPT on the web (no install)

A hosted server is live, so on claude.ai and chatgpt.com you only paste one URL:

https://hacklist-mcp.samuelsuccess234.workers.dev/mcp

claude.ai (also syncs to the Claude desktop and mobile apps)

  1. Open Settings → Connectors and click Add custom connector.

  2. Name: HackList. Remote MCP server URL: the URL above. Click Add.

  3. In a chat, open the tools menu next to the message box and make sure HackList is turned on.

  4. Ask: "What hackathons are open right now?" or "What should I enter this month? I write Solidity and I'm in Nigeria."

ChatGPT

  1. Open Settings → Apps & Connectors → Advanced settings and turn on Developer mode.

  2. Back in Apps & Connectors, click Create.

  3. Name: HackList. MCP server URL: the URL above. Authentication: No authentication. Tick the box saying you trust this application, then click Create.

  4. In a chat, click +, choose Developer mode, enable HackList, and ask your question.

ChatGPT's deep research uses the search and fetch tools; normal chats can call all of them.

If you can't find the connector option, check your plan: Claude and ChatGPT decide which plans can add custom connectors, and that changes over time.

Claude Desktop (local, stdio)

Requires Node 18.17+.

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "hacklist": {
      "command": "npx",
      "args": ["-y", "hacklist-mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http hacklist https://hacklist-mcp.samuelsuccess234.workers.dev/mcp
# or run it locally:
claude mcp add hacklist -- npx -y hacklist-mcp

Cursor, Windsurf, other stdio clients

Same command: npx -y hacklist-mcp.

Self-hosting the connector

To run your own copy instead of the hosted URL, deploy the HTTP mode or the Cloudflare Worker (below) and use https://your-host/mcp in the steps above.

Run the HTTP server

npm install && npm run build
PORT=3000 npm run start:http          # serves POST /mcp and GET /healthz

Stateless Streamable HTTP, so it scales horizontally and works behind any load balancer. One HackList snapshot is shared across requests.

Deploy anywhere that runs Docker:

docker build -t hacklist-mcp .
docker run -p 3000:3000 hacklist-mcp

Works as-is on Render, Railway, Fly.io or Cloud Run (all give you HTTPS). To keep it private, set HACKLIST_MCP_TOKEN and the server will require Authorization: Bearer <token>. Leave it unset for a public, no-auth connector.

Cloudflare Workers

src/worker.ts serves the same endpoints without Express or a disk cache:

npx wrangler login
npm run dev:worker                    # local, http://localhost:8787/mcp
npm run deploy:worker                 # https://hacklist-mcp.<your-subdomain>.workers.dev/mcp
npx wrangler secret put HACKLIST_MCP_TOKEN   # optional, same bearer-token behaviour

The HackList snapshot is cached per Worker instance, so a cold instance's first call re-fetches the feed (about 2s). If the free plan's 10ms CPU limit trips on cold starts (Exceeded CPU Limit in npx wrangler tail), move to Workers Paid.

Check it's reading HackList correctly

npm run check

Prints whether the official feed was used, how many listings were loaded vs. what HackList says is open, and how often each field was filled.

Configuration

Env var

Default

Purpose

PORT

3000

HTTP mode port

HACKLIST_MCP_TOKEN

unset

Require a bearer token in HTTP mode

HACKLIST_LIST_TTL_MS

1200000 (20 min)

How long a snapshot stays fresh

HACKLIST_MAX_DETAIL_FETCHES

260

Cap on detail pages fetched per refresh

HACKLIST_CACHE_DIR

~/.cache/hacklist-mcp

Disk cache for detail pages (restarts are instant)

HACKLIST_BASE_URL

https://hacklist.io

Override for testing or a mirror

HACKLIST_FEED_URL

/api/opportunities

Feed path or full URL

How it gets the data

  1. Official feed (GET https://hacklist.io/api/opportunities), provided by HackList. One request per refresh (cached 20 min) returns every open hackathon, program, grant and bounty, with each listing's real created_at posting date.

  2. Fallback: if the feed is down or returns something unexpected, the server reads the public pages instead (homepage, /sitemap.xml, detail pages), keyed off visible labels so cosmetic redesigns don't break it.

  3. Closed listings (include_closed: true) come from the sitemap and detail pages, since the feed only lists open ones.

hacklist_overview and every result report data_source (feed or pages) and data_as_of (when HackList generated the feed).

Thanks to HackList (@0xbeni, Telegram) for exposing the feed. This project is not affiliated with HackList.

Develop

npm install
npm test        # 19 tests: feed + page parsers, fallback, prize/eligibility/duplicate logic, full MCP round-trips
npm run dev     # stdio server via tsx

Limits

  • Prize USD figures are estimates (fixed approximate FX rates). The original prize text is always returned alongside.

  • Prizes paid in crypto (ETH, SOL…) get no USD estimate because the price moves; they're labeled instead.

  • In page-scraping fallback mode, programs, grants and bounties beyond the homepage's first page may be missing (the sitemap only covers hackathons).

  • "Generic" scoring is heuristic. It's tuned to separate briefs like "build any AI app" from briefs like "detect 12 knee MRI abnormalities, scored by AUC", and include_generic: true turns the penalty off.

MIT licensed.

Available Tools

8 tools
best_opportunitiesRank the best non-generic opportunitiesA
Read-onlyIdempotent
Inspect

Ranks open HackList opportunities for a specific builder and explains each pick. Favours specific briefs (a named API, dataset, metric or protocol) over generic 'build anything with AI' events, weighs prize size and whether it is real cash, deadline runway and accessibility, collapses duplicate listings, and drops events the builder can't enter (students only, region-locked, in-person, partners only). Returns why each one ranks and what to watch out for.

NameRequiredDescriptionDefault
kindNohackathon
limitNo
skillsNoe.g. ['solidity', 'python', 'langgraph', 'zk']
countryNoWhere the builder is based, for region-locked events.
cash_onlyNo
interestsNoe.g. ['agents', 'defi', 'fintech', 'africa']
can_travelNofalse = drop in-person-only events.
is_studentNo
max_days_leftNo
min_days_leftNo
include_genericNoSet true to stop down-ranking generic briefs.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds real behavioral value beyond that: the ranking heuristics, duplicate collapsing, ineligibility filtering, and the shape of the response ('why each one ranks and what to watch out for'). It omits data freshness, latency or result stability, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence front-loads the core action, and the dense middle clause lists ranking factors that each carry information. The long run-on factor list is heavy but nearly every clause earns its place by mapping to a real input or behaviour.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully describes the return content ('why each one ranks and what to watch out for'), and it explains the filtering and ranking behaviour for an 11-param tool. Remaining gaps are a few undocumented params and no note on determinism or data recency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 45% across 11 params, so the description must carry weight, and it does explain the semantics behind cash_only, country/region-locking, can_travel/in-person, is_student, deadline runway, and include_generic. However it leaves limit, skills, interests and kind unaddressed, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (ranks), a specific resource (open HackList opportunities), and a scope (for a specific builder), plus the side effect of explaining each pick. This clearly separates it from the sibling search_opportunities/closing_soon, which merely list rather than rank and explain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong implicit routing: it is the curation/ranking tool that favours specific briefs and drops ineligible events, contrasting with plain listing siblings. It stops short of naming an alternative tool or stating an explicit 'use this when/not when', so it lands at a clear-context 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

closing_soonClosing soon on HackListB
Read-onlyIdempotent
Inspect

Open listings whose deadline is within N days, soonest first, with the prize and whether it's worth a sprint.

NameRequiredDescriptionDefault
daysNo
limitNo
min_prize_usdNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond them: results are limited to open listings, sorted soonest first, and include prize plus a worth-a-sprint verdict. It omits pagination behavior and how the verdict is derived.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the filter, sort order, and return highlights arrive in the right order. It is efficient, though it spends words on the informal 'worth a sprint' phrasing instead of documenting parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description gives a usable sketch of results but leaves limit/pagination and min_prize_usd entirely unexplained. Adequate as a minimum-viable definition, with clear gaps for a 3-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters, so the description carries the full burden — but it only gestures at 'N days' without naming the parameter, its default (7) or its 0-60 bound, and never mentions limit or min_prize_usd at all. An agent cannot infer the prize filtering capability from the text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Open listings whose deadline is within N days') plus the ordering ('soonest first'), which clearly separates it from best_opportunities and whats_new. It stops short of naming an alternative sibling, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The deadline-window framing implies the use case (find time-sensitive listings) but there is no explicit when-to-use/when-not guidance and no pointer to a sibling for other browsing needs. Usage must be inferred from the name and the 'N days' filter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchFetch HackList listing (connector)A
Read-onlyIdempotent
Inspect

Fetch the full HackList listing for an id returned by search. (Compatibility tool for ChatGPT connectors and deep research.)

NameRequiredDescriptionDefault
idYesListing id from search

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds the useful context that this is a compatibility shim and that it returns the 'full' listing, but says nothing about error behavior for stale/unknown ids or response size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and the input constraint, with the compatibility note demoted to a parenthetical. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with full annotation coverage and no output schema, the description gives enough to invoke it correctly. It could be stronger by clarifying how it differs from get_opportunity, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the single 'id' parameter as coming from search, which the description merely restates. Baseline 3 is appropriate since the description adds no format, validation, or provenance detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch the full HackList listing') and pins the input to 'an id returned by search', so the agent knows this is an id-based retrieval, not a discovery call. It does not, however, address the obvious overlap with the sibling get_opportunity, so sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'for an id returned by search' implies the correct upstream call and the parenthetical indicates the tool's niche (connector/deep-research compatibility). But there is no explicit when-to-use or when-not-to-use guidance versus get_opportunity or search, so an agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_opportunityGet HackList listingA
Read-onlyIdempotent
Inspect

Full details for one HackList listing: brief, prize (with USD estimate and cash vs credits), deadline and days left, when it was posted/updated on HackList, apply link, eligibility traps (students only, region-locked, in-person, approval needed) and duplicate listings. Accepts a HackList URL, an id, or a title.

NameRequiredDescriptionDefault
refYesHackList URL, listing id, or title (e.g. 'Qloo Agentic Hackathon').

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world and non-destructive. Beyond that the description discloses substantive content traits: USD estimates, cash-vs-credits distinction, and eligibility traps (students-only, region-locked, in-person, approval) plus duplicate-listing flagging, which tells the agent what terrain to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the purpose before the field list and accepted inputs. The enumerations of fields are long but each carries informational weight, so there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the burden of describing what comes back, and it does so thoroughly (brief, prize breakdown, deadline, timestamps, apply link, eligibility, duplicates). Nothing an agent needs to invoke or interpret this tool seems missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents 'ref' with URL/id/title examples. The description restates the same accepted forms without adding syntax or ambiguity-resolution rules, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Full details for one HackList listing') and the single-listing scope distinguishes it from siblings like search, search_opportunities, and best_opportunities. An agent knows this is the detail-lookup path for one known item.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage by noting the accepted reference forms (URL, id, title), but never says when to choose this over search/fetch or what to do if the reference is ambiguous. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hacklist_overviewHackList overviewA
Read-onlyIdempotent
Inspect

A snapshot of HackList right now: how many open listings by type and category, total listed prize money, the biggest prizes, duplicate listings found, and how fresh/complete this server's data is. Pass refresh=true to re-fetch.

NameRequiredDescriptionDefault
refreshNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is free. The description adds genuine value by enumerating what the snapshot contains (including duplicate detection and data freshness/completeness), though the only explicit behavioral note is that refresh=true re-fetches — no mention of caching behavior when false, cost, or latency of a re-fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with a colon-delimited content list, plus a short operational note. Dense and largely waste-free, though the list is long enough that it reads closer to a manifest than a summary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of describing returns, and it does so concretely across all the reported facets. Only the freshness/completeness metrics and cache semantics are left vague, which is minor for a read-only overview tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single boolean `refresh` is undocumented in the schema, but the description compensates by stating "Pass refresh=true to re-fetch," which makes the true/false branch meaningful. It stops short of stating that the default false serves cached data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete deliverable — a point-in-time snapshot of HackList with open listings by type/category, total prize money, top prizes, duplicates, and data freshness — which distinguishes it as an aggregate dashboard rather than a per-record lookup like get_opportunity. It never explicitly contrasts itself with siblings such as best_opportunities or whats_new, so differentiation is inferable but not stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"A snapshot of HackList right now" implies a starting-orientation use case, but the description gives no explicit when-to-use guidance and never names the sibling tools it should be preferred over (best_opportunities, whats_new, search). An agent must infer that this is the entry-point summary rather than a search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_opportunitiesSearch HackListA
Read-onlyIdempotent
Inspect

Search and filter HackList's AI & Web3 hackathons, grants, bounties and programs. Filters by keyword, type, category, format, prize, how soon it closes and how recently it was posted or updated. Duplicate listings of the same event are collapsed by default. Use get_opportunity for the full brief and eligibility details of a result.

NameRequiredDescriptionDefault
kindNoany
sortNorelevance
limitNo
queryNoKeywords, e.g. 'zk privacy', 'trading bot', 'Solana', 'computer vision'.
formatNoany
categoryNoany
cash_onlyNoExclude rewards that are mostly credits or in-kind.
free_onlyNo
min_prize_usdNoMinimum headline prize in USD (approximate conversion for other currencies).
include_closedNoAlso search past listings from HackList's archive (slower the first time).
closes_within_daysNo
collapse_duplicatesNo
updated_within_daysNoOnly listings posted or updated on HackList in the last N days.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructiveness, so the safety profile is fully covered. The description adds one behavioral detail, that duplicate listings of the same event are collapsed by default, though this largely restates the collapse_duplicates schema default. It does not disclose any result-format, result-count, or throttling behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core capability and ending with the sibling hand-off, which is efficiently structured. The duplicate-collapsing sentence slightly overlaps the schema default and could be trimmed, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter search tool with no output schema and only 38% schema description coverage, the description is adequate but incomplete: it never sketches what a result contains or how many are returned, and several parameters lack any explanation. It covers the main filter surface without fully rounding out the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 38% across 13 parameters. The description usefully maps natural-language filters (keyword, type, category, format, prize, closes soon, recently posted/updated) onto the matching parameters, but leaves sort, limit, free_only, include_closed and collapse_duplicates semantics unexplained, so it does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search and filter) plus resource (HackList's AI & Web3 hackathons, grants, bounties, programs), and enumerates the filter axes. An agent can distinguish this from siblings like best_opportunities or closing_soon, since it is clearly the general filtered-search entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to get_opportunity for the full brief and eligibility details of a returned result, which is clear when-to-use guidance. However, it gives no guidance on when to prefer this over search, best_opportunities, closing_soon, or whats_new, so the sibling routing is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whats_newNew on HackListA
Read-onlyIdempotent
Inspect

Listings posted or updated on HackList in the last N days, newest first. Useful for 'what got added this week'. Uses HackList's own posted date when the site exposes it, otherwise its sitemap last-modified time.

NameRequiredDescriptionDefault
daysNo
limitNo
open_onlyNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description only needs to add beyond that. It does: it discloses sort order (newest first) and, notably, the date semantics — HackList's own posted date when exposed, otherwise sitemap last-modified time — which materially affects result interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core behavior front-loaded and the fallback date logic appended where it belongs. No filler and nothing redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description never indicates what a listing record contains. Combined with the undocumented open_only default and limit cap, an agent can call the tool but cannot predict the shape or filtering of results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It only accounts for the 'days' parameter ('last N days'); 'limit' and especially 'open_only' (default true, a meaningful filter that silently excludes closed listings) are never mentioned in either schema or description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Listings posted or updated on HackList in the last N days, newest first.' The recency framing implicitly separates it from deadline-driven siblings like closing_soon and quality-driven ones like best_opportunities, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "Useful for 'what got added this week'" gives an implied use case, but there is no when-not guidance and no routing to alternatives such as search_opportunities or closing_soon when recency is not the criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.2.0
    • First observedbest_opportunities
    • First observedclosing_soon
    • First observedfetch
    • First observedget_opportunity
    • First observedhacklist_overview
    • First observedsearch
    • First observedsearch_opportunities
    • First observedwhats_new

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation3/5

There is notable functional overlap: search and search_opportunities both do keyword search over listings (one returning ids, the other filtered results), and fetch and get_opportunity both retrieve full details for a single listing. Descriptions partially disambiguate by labeling search/fetch as 'compatibility tools' and by giving search_opportunities richer filtering, but an agent could easily pick the wrong one. Other tools (whats_new, closing_soon, best_opportunities) are more clearly distinct.

Naming Consistency3/5

The names mix several conventions: verb_noun (search_opportunities, get_opportunity), adjective_noun (best_opportunities, closing_soon), bare verbs (fetch, search), and noun/snapshot forms (whats_new, hacklist_overview). Each name is readable, but there is no single predictable pattern to rely on when guessing a tool name.

Tool Count4/5

Eight tools is a well-scoped size for a read-only listing aggregator covering discovery, detail, ranking, and stats. The only mild redundancy is the pair of compatibility tools (search/fetch) that duplicate search_opportunities/get_opportunity, but the count is still reasonable.

Completeness4/5

The surface covers the key read workflows: keyword/filter search, recent listings, deadline-driven listing, full detail retrieval, personalized ranking, and a data-freshness overview. As a read-only catalog it is largely complete, with the only real gap being that duplicate-listing and freshness concerns are surfaced only indirectly rather than via dedicated tools.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides hackathon intelligence for builders by analyzing projects to rank best hackathons, target tracks, and differentiate using fit scoring and public gallery intel.
    28
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to find and query real-time GitHub coding bounties with built-in scam filtering, supporting listing, matching, and detailed bounty retrieval.
    4
    49 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to discover Gibwork bounties, verify their Solana escrow accounts on-chain, rank opportunities by value, competition and deadline, diff captures over time, and export Markdown/CSV/JSON reports through four read-only MCP tools requiring no wallet or API key.
    MIT