loading…
Search for a command to run...
loading…
Enables users to discover and search for Unstop hackathons through features like filtering, location-based discovery, and detailed event enrichment. It provides
Enables users to discover and search for Unstop hackathons through features like filtering, location-based discovery, and detailed event enrichment. It provides MCP tools and prompts that allow LLMs to compare events, plan searches, and access cached data for fast lookups.
unstop-mcp is a Python Model Context Protocol (MCP) server for discovering Unstop hackathons.
It exposes:
This repository is now MCP-first. The old direct-import Python wrapper API is not the supported public interface anymore.
stdio transport onlyuv recommended for local developmentuv workflowgit clone https://github.com/your-org/unstop-mcp.git
cd unstop-mcp
uv venv
source .venv/bin/activate
uv pip install -e .
pipgit clone https://github.com/your-org/unstop-mcp.git
cd unstop-mcp
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
unstop-mcp --help
You should see the stdio transport option.
Run the server locally over stdio:
unstop-mcp
Equivalent module form:
python -m unstop_mcp
The server intentionally supports only:
unstop-mcp --transport stdio
search_hackathonsSearch Unstop hackathons with filters, sorting, pagination, and optional cache usage.
Arguments:
oppstatus: open | recent | expired | closedregion: online | offlinepayment: paid | unpaidteamsize: 1 | 2 | 3usertype: college_students | fresher | professionals | school_studentssort: prize | days_leftdirection: asc | descsearch: free-text keyword searchpage: >= 1per_page: 1-100use_cache: true | falseReturns a structured object with:
items: normalized hackathon summariespagination: total/current page/last page/per-page/has-morecache: cache freshness metadataapplied_filters: the validated input used for the callget_hackathon_detailsFetch full details for a single hackathon by numeric ID.
Arguments:
hackathon_idReturns:
item: normalized detail viewcache: metadata describing current server cache statesearch_hackathons_by_locationFind offline hackathons near a location using geocoding and radius filtering.
Arguments:
locationradius_kmregionpaymentteamsizeusertypesearchsort: prize | days_left | distancedirectionpageper_pageReturns the same normalized structure as search_hackathons, plus:
location.search_locationlocation.search_radius_kmlocation.search_coordinatesrefresh_cacheForce a rebuild of the cached open-hackathon dataset.
Returns:
cacheget_cache_infoInspect cache state without rebuilding the full dataset.
Returns:
cacheunstop://cache/infoRead-only JSON view of cache freshness, TTL, and item counts.
unstop://hackathons/openRead-only JSON snapshot of all cached open hackathons.
unstop://hackathons/{hackathon_id}Read-only JSON detail view for a specific hackathon. The server serves cached data when possible and falls back to a direct detail fetch when needed.
find_relevant_hackathonsGuides an LLM to gather missing user preferences, call the right search tool, and summarize the best matches.
Arguments:
user_goalcompare_hackathonsGuides an LLM to fetch multiple hackathons and compare them.
Arguments:
hackathon_idsplan_hackathon_searchGuides an LLM on which tools and resources to call, in what order, for a discovery task.
Arguments:
user_requestTool and resource results are normalized into stable JSON-friendly fields rather than returning raw upstream Unstop payloads as the primary contract.
Each hackathon item includes:
idtitlestatusregionis_paidpublic_urldescriptionprize_amountprize_summaryfiltersrequired_skillsorganisationaddressregistrationroundscontactsdistance_km when applicableThis keeps the MCP contract predictable even if upstream response shapes vary.
Point your MCP client at this command:
unstop-mcp
If your client needs an absolute command path, use the one from your environment, for example:
/absolute/path/to/.venv/bin/unstop-mcp
Example claude_desktop_config.json entry:
{
"mcpServers": {
"unstop": {
"command": "/absolute/path/to/.venv/bin/unstop-mcp",
"args": []
}
}
}
Configure a local MCP server entry that launches:
{
"command": "/absolute/path/to/.venv/bin/unstop-mcp",
"args": []
}
If your Codex setup manages MCP servers through a separate config file or UI, use the same command and no extra arguments.
src/unstop_mcp/server.py: FastMCP server definition and MCP registrationsrc/unstop_mcp/service.py: Unstop fetching, caching, normalization, and geocoding logicsrc/unstop_mcp/schemas.py: validated inputs and normalized output modelssrc/unstop_mcp/config.py: environment-driven runtime configurationtests/: unit, MCP registration, stdio smoke, and optional live testsThese are optional:
UNSTOP_MCP_TIMEOUTUNSTOP_MCP_MAX_RETRIESUNSTOP_MCP_RETRY_DELAYUNSTOP_MCP_CACHE_TTL_SECONDSUNSTOP_MCP_DETAIL_WORKERSUNSTOP_MCP_DETAIL_DELAYUNSTOP_MCP_GEOCACHE_PATHUNSTOP_MCP_USER_AGENTrefresh_cache forces an immediate rebuildgeopyregion="online"Run the default test suite:
python -m pytest -q
What the default suite covers:
stdio startup and tool listingThese are excluded by default:
UNSTOP_MCP_RUN_LIVE_TESTS=1 python -m pytest -q -m live
Use live tests only when you want to verify the current Unstop integration against the real network.
Useful local checks:
python -m pytest -q
python -m unstop_mcp --help
If you already use an MCP Inspector, point it at the local unstop-mcp command and stdio transport to inspect registered tools, resources, and prompts interactively.
The server validates inputs before making upstream calls.
Common failure cases:
oppstatus or sortWhen possible, tool failures are surfaced as clear MCP-facing validation or request errors.
stdio only in v1If you want to add more Unstop opportunity types later, keep this split:
service.pyschemas.pyserver.pyThat keeps transport concerns separate from domain logic.
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"unstop-mcp-server": {
"command": "npx",
"args": []
}
}
}