sih-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sih-mcpshow open SIH 2026 problem statements with the fewest ideas"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SIH-CLI-MCP
Scrapes the Smart India Hackathon 2026 problem statements and exposes them as a CLI (sih) and an MCP server (sih-mcp) so you or an agent can search, filter and sort them.
The site has no API. The table and each statement's details are server-rendered, so they are parsed from the HTML and cached for 6 hours.
Setup
Requires uv.
git clone https://github.com/kry0sc0pic/SIH-CLI-MCP && cd SIH-CLI-MCP
uv sync
uv run sih refreshRun commands with uv run sih ..., or uv tool install . to get a plain sih on your PATH.
Related MCP server: MCP Knowledge Base Server
Concepts
Ranked search. A query is scored with BM25 over title, theme/organization/department and description (title hits weigh most). It handles plurals (
drones), prefixes (agri), typos (satelite) and related words (farmingalso finds agriculture, crop and farmer statements; the synonym list is insrc/sih/ranking.py). Statements matching only some of your words still appear, ranked lower; very weak matches next to strong ones are dropped.Closed statements. Once idea submissions close, the site shows "Idea Submissions Closed" instead of a count. Those statements are hidden by default. With
--closed(CLI) orinclude_closed(MCP) they are included, but always listed after open ones whatever the sort. Their idea count isnull/closed, never0, so--min-ideas/--max-ideasexclude them.Ideas. Shown as
submitted/cap, for example3/500.Dates are ISO
YYYY-MM-DD.--openmeans the deadline has not passed (statements with no parseable deadline are kept).
CLI
sih [COMMAND] [OPTIONS]sih search [QUERY]
Ranked search, filter and sort. Prints a table; --json prints machine-readable output including total and closed_hidden.
Option | Description |
| Free-text query, ranked by relevance. Optional. |
| Organization contains this text (case-insensitive). |
| Category, |
| Theme contains this text, for example |
| Department contains this text. |
| Bounds on ideas already submitted (low means less competition). |
| Only statements whose deadline has not passed. |
| Inclusive deadline range, |
|
|
| Reverse the sort. |
| Page size (default 20). |
| Skip the first N results. |
| Include statements whose submissions are closed (listed last). |
| JSON output. |
sih search "drone surveillance"
sih search --category software --theme agriculture --sort ideas
sih search --open --from 2026-10-20 --to 2026-10-31 --json
sih search "flood" --closed --limit 50sih show PS_NUMBER
Full details for one statement: organization, department, category, theme, ideas, deadline, dataset/YouTube/contact links and the complete description. Accepts SIH26265 or just 26265, and finds closed statements too. --json for JSON.
sih facets
Counts per category, theme and organization. Open statements only unless --closed.
sih refresh
Re-download from sih.gov.in and rewrite the cache. Other commands refresh automatically when the cache is older than 6 hours.
sih install AGENT
Register the MCP server with a coding agent. See Adding to agents.
sih mcp
Run the MCP server over stdio (same as sih-mcp).
MCP server
Tools:
Tool | Arguments |
|
|
|
|
|
|
| None. Forces a re-download. |
Each statement has: ps_number, ps_id, title, organization, department, category, theme, ideas (null when closed), ideas_cap, closed, deadline, description, youtube, dataset_links, contact.
Adding to agents
sih install AGENT # print the command or config snippet
sih install AGENT --apply # actually write itAGENT is one of claude, codex, gemini, cursor, opencode, claude-desktop, hermes, or all.
Option | Description |
| Perform the registration instead of printing it. |
|
|
How each agent is handled:
Agent | What |
| Runs |
| Runs |
| Adds |
| Adds |
| Adds |
| Adds |
| Print-only (its config is YAML): prints a |
JSON configs are merged without touching your other servers, and files that aren't plain JSON (for example with comments) are left alone with an error.
Manual registration, for any MCP client:
claude mcp add sih -- uv run --directory /path/to/SIH-CLI-MCP sih-mcpConfiguration
Environment variable | Default | Purpose |
|
| Page to scrape. |
|
| Where |
Development
uv run pytestTests run against a small synthetic copy of the page and never touch the network or your real cache. They include a test that starts the real sih-mcp server as a subprocess and talks MCP to it over stdio.
License
GPL-3.0-or-later. See LICENSE.
Available Tools
4 toolsget_problem_statementB
Full details for one problem statement by PS number (e.g. 'SIH26265') or numeric id ('26265').
| Name | Required | Description | Default |
|---|---|---|---|
| ps_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Full details' hints at a rich payload, but there is no disclosure of error/not-found behavior, permissions, or response shape. The identifier-format examples are the only real behavioral added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence, front-loaded with the action and resource, followed by the key input formats. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup with no output schema or annotations, the description is mostly sufficient: it explains the identifier and implies a detailed return. It still omits what happens on invalid/missing IDs and any hint about the returned fields, which matters more because no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter is just typed as a string with no description. The description compensates well by specifying that ps_number accepts either a PS number like 'SIH26265' or a numeric id like '26265', which is meaningful syntax guidance the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Full details') and resource ('one problem statement') and identifies the lookup key, so an agent can tell it retrieves a single record rather than listing. It doesn't explicitly name search_problem_statements as the alternative, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by giving identifier formats and saying 'one problem statement', which suggests it's for when the PS number is already known. It never states when to use this versus search_problem_statements or what to do if the number is unknown, leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_facetsA
Counts of problem statements per organization, category and theme (open ones only unless include_closed).
| Name | Required | Description | Default |
|---|---|---|---|
| include_closed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one real behavioral trait: results exclude closed statements by default. It says nothing about whether counts are computed across a large dataset, whether they are exact or approximate, or what the response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with the purpose front-loaded and the filter caveat trailing as a parenthetical. Nothing is wasted, though the telegraphic style ('Counts of problem statements per...') costs a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional boolean, no annotations, and no output schema, the description is close to sufficient: it names what is counted and the three grouping dimensions. It stops short of clarifying whether the three dimensions are separate facet lists or a cross-tabulation, which matters for interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 single parameter, and it does explain that include_closed widens the default open-only scope. It remains ambiguous whether closed items are merged into the counts or reported separately, so the semantics are only partially clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (counting problem statements) and the grouping dimensions (organization, category, theme), which distinguishes it from the retrieval siblings search_problem_statements and get_problem_statement. It never names an alternative explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'open ones only unless include_closed' implies the intended default view and when to flip it, but there is no explicit guidance on when to use this aggregation tool versus search_problem_statements for browsing statements. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_problem_statementsA
Re-download the problem statements from sih.gov.in (cache otherwise lasts 6 hours).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two useful traits: the tool performs external network I/O against sih.gov.in and it mutates cached state with a 6-hour TTL. It says nothing about latency, failure behavior if the site is unreachable, whether concurrent calls are safe, or whether a refresh can degrade existing results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, with the operational caveat in a compact parenthetical. Nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter cache-refresh tool this covers what it does and the cache lifetime, which is the key decision input. Missing only the return/latency expectations that would matter since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The schema is empty and nothing in the description is needed to explain inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (re-download) and resource (problem statements) plus the source domain, which distinguishes it cleanly from the read-only siblings search_problem_statements, get_problem_statement, and list_facets. It stops just short of a 5 because it doesn't explicitly frame itself as the cache-invalidation counterpart to those reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical about the cache lasting 6 hours implies when a refresh is warranted, but the agent must infer that guidance. There is no explicit 'use this when data may be stale' or 'do not call more than once per session' instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_problem_statementsA
Search/filter/sort problem statements.
query: free text, ranked by relevance (title weighs most; handles plurals, typos, prefixes and related words like
farming/agriculture/crop). Statements matching only some terms are included but rank lower.
organization/category/theme/department: case-insensitive substring filters (category is e.g. 'Software' or 'Hardware').
min_ideas/max_ideas: filter by number of ideas already submitted (low = less competition). Statements with closed
submissions have no count (ideas is null, closed is true): they are excluded by these filters and sorted last when sorting by ideas.
open_only: exclude statements whose deadline has passed.
deadline_from/deadline_to: inclusive ISO dates (YYYY-MM-DD) bounding the idea-submission deadline.
sort: relevance (default with a query), ps_number (default otherwise), title, organization, category, theme, ideas, deadline.
include_closed: closed statements (submissions closed, no idea count) are hidden by default; when included they
always come after open ones. closed_hidden in the result says how many were left out.
Descriptions are truncated unless full_description is true.
| Name | Required | Description | Default |
|---|---|---|---|
| desc | No | ||
| sort | No | ||
| limit | No | ||
| query | No | ||
| theme | No | ||
| offset | No | ||
| category | No | ||
| max_ideas | No | ||
| min_ideas | No | ||
| open_only | No | ||
| department | No | ||
| deadline_to | No | ||
| organization | No | ||
| deadline_from | No | ||
| include_closed | No | ||
| full_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it explains relevance ranking, partial-term matching with lower rank, how closed statements are excluded or sorted last, the closed_hidden result field, and that descriptions are truncated unless full_description is true. It does not mention pagination behavior or permission/auth requirements, so it is not complete enough for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with its purpose and then organized around parameter semantics. Every sentence is doing real work for a tool with 16 parameters, and there is no filler. The formatting is dense and the line breaks are awkward, which slightly hurts readability, but the content is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 16-parameter search tool with no annotations and no output schema, the description is substantially complete: it covers ranking, filtering, sorting, closed-statement handling, and truncation. It still omits pagination semantics (limit/offset), the meaning of desc, and the overall return shape beyond closed_hidden, so there are clear remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for most parameters: query ranking semantics, case-insensitive substring filters for organization/category/theme/department, idea-count filters with closed-statement behavior, inclusive ISO dates for deadlines, sort options, include_closed, and full_description. It leaves three parameters unexplained: desc, limit, and offset. That is a meaningful gap, but the coverage is still strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search/filter/sort problem statements.' That is much clearer than a tautology and tells the agent exactly what operation this is. It does not explicitly distinguish itself from sibling tools like get_problem_statement or list_facets, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what each filter and sort option does, which implies when the tool is useful. However, it never states when to choose search_problem_statements over get_problem_statement, list_facets, or refresh_problem_statements, and it gives no explicit exclusions or prerequisites. Usage guidance is therefore implied rather than stated.
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.
4 tool updates
v0.1.0- First observed
get_problem_statement - First observed
list_facets - First observed
refresh_problem_statements - First observed
search_problem_statements
TDQS
Scored across 4 tools
Each tool targets a distinct operation: search for filtered lists, get for a single full record, list_facets for aggregate counts, and refresh for cache invalidation. There is no meaningful overlap that would cause misselection; an agent can route cleanly between browsing, lookup, aggregation, and refresh.
Three tools follow a clear verb_noun pattern (search_problem_statements, get_problem_statement, refresh_problem_statements), while list_facets uses a consistent verb but a vague domain noun. The deviation is minor and still readable, since the description clarifies that facets are problem-statement facets.
Four tools are well-scoped for a read-only problem-statement browsing service. Each tool earns its place: search, detail lookup, facet counts, and cache refresh are all necessary and non-redundant.
The surface covers the full read-only lifecycle for the domain: discovery via rich filtered search, full record retrieval, aggregate facet counts, and cache refresh. No create/update/delete operations are expected because the underlying data comes from sih.gov.in, and no obvious retrieval dead ends remain.
Maintenance
Related MCP Connectors
Make your knowledge agent-ready. One MCP endpoint, 5 connectors, 3 search modes.
Read-only AgentiScript concept search, catalog, authenticity, license, and approved asset discovery.
Agent-driven search: build, import, tune, search, and score result quality — all over MCP.
Search and fetch AI agents, skills, prompts and MCP connectors from the Spark marketplace.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI models to perform IT service management operations on Freshservice, including managing tickets, changes, problems, releases, assets, projects, and more through a set of MCP tools.362MIT
- FlicenseCqualityDmaintenanceEnables semantic search over knowledge-base articles and listing of sample support tickets using MCP tools.4-
- FlicenseNot gradedqualityCmaintenanceEnables searching live myScheme.gov.in schemes by eligibility, keyword, and detail lookup through MCP tools.-
- FlicenseNot gradedqualityBmaintenanceEnables agents to search, read, publish, and report reuse of problem-solving solutions via MCP.-