Skip to main content
Glama

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 refresh

Run 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 (farming also finds agriculture, crop and farmer statements; the synonym list is in src/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) or include_closed (MCP) they are included, but always listed after open ones whatever the sort. Their idea count is null/closed, never 0, so --min-ideas/--max-ideas exclude them.

  • Ideas. Shown as submitted/cap, for example 3/500.

  • Dates are ISO YYYY-MM-DD. --open means 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

QUERY

Free-text query, ranked by relevance. Optional.

-o, --org TEXT

Organization contains this text (case-insensitive).

-c, --category TEXT

Category, software or hardware.

-t, --theme TEXT

Theme contains this text, for example agriculture.

--dept TEXT

Department contains this text.

--min-ideas N / --max-ideas N

Bounds on ideas already submitted (low means less competition).

--open

Only statements whose deadline has not passed.

--from DATE / --to DATE

Inclusive deadline range, YYYY-MM-DD.

-s, --sort KEY

relevance, ps_number, title, organization, category, theme, ideas, deadline. Default: relevance with a query, otherwise ps_number.

--desc

Reverse the sort.

-n, --limit N

Page size (default 20).

--offset N

Skip the first N results.

--closed

Include statements whose submissions are closed (listed last).

--json

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 50

sih 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

search_problem_statements

query, organization, category, theme, department, min_ideas, max_ideas, open_only, deadline_from, deadline_to, sort, desc, limit (20), offset, full_description, include_closed. Same semantics as sih search. Descriptions are truncated to 240 characters unless full_description is true. The result has total, returned, results and, when closed statements are hidden, closed_hidden.

get_problem_statement

ps_number (SIH26265 or 26265). Returns the full record, or {"error": ...}.

list_facets

include_closed. Counts per organization, category and theme, plus closed_hidden.

refresh_problem_statements

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 it

AGENT is one of claude, codex, gemini, cursor, opencode, claude-desktop, hermes, or all.

Option

Description

--apply

Perform the registration instead of printing it.

--source local|git

local runs from this checkout (default when run from one); git runs from GitHub via uvx, no clone needed.

How each agent is handled:

Agent

What --apply does

claude

Runs claude mcp add sih -- ...

codex

Runs codex mcp add sih -- ...

gemini

Adds sih under mcpServers in ~/.gemini/settings.json

cursor

Adds sih under mcpServers in ~/.cursor/mcp.json

opencode

Adds sih under mcp in ~/.config/opencode/opencode.json

claude-desktop

Adds sih under mcpServers in ~/Library/Application Support/Claude/claude_desktop_config.json

hermes

Print-only (its config is YAML): prints a mcp_servers: block to paste into ~/.hermes/config.yaml

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-mcp

Configuration

Environment variable

Default

Purpose

SIH_URL

https://www.sih.gov.in/sih2026PS

Page to scrape.

SIH_CACHE_DIR

~/.cache/sih

Where problem_statements.json is cached (6 hour TTL).

Development

uv run pytest

Tests 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 tools
get_problem_statementB

Full details for one problem statement by PS number (e.g. 'SIH26265') or numeric id ('26265').

NameRequiredDescriptionDefault
ps_numberYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

NameRequiredDescriptionDefault
include_closedNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/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 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.

Purpose4/5

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.

Usage Guidelines3/5

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

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.
NameRequiredDescriptionDefault
descNo
sortNo
limitNo
queryNo
themeNo
offsetNo
categoryNo
max_ideasNo
min_ideasNo
open_onlyNo
departmentNo
deadline_toNo
organizationNo
deadline_fromNo
include_closedNo
full_descriptionNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/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 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.1.0
    • First observedget_problem_statement
    • First observedlist_facets
    • First observedrefresh_problem_statements
    • First observedsearch_problem_statements

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers