protogrid

Search / com.selltostate/mcp

Sell to State

R0· no sign-in

Government tenders, contract awards, buyers and suppliers from official sources in 60+ countries.

v0.4.1 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality80good
Trust95of 100
Uptime, 30 days94%
Latency p50329 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "selltostate": {
      "type": "http",
      "url": "https://app.selltostate.com/api/mcp"
    }
  }
}
claude mcp add --transport http selltostate https://app.selltostate.com/api/mcp
[mcp_servers.selltostate]
url = "https://app.selltostate.com/api/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "selltostate": {
      "type": "remote",
      "url": "https://app.selltostate.com/api/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "selltostate": {
      "type": "http",
      "url": "https://app.selltostate.com/api/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=selltostate&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBwLnNlbGx0b3N0YXRlLmNvbS9hcGkvbWNwIn0%3D"
}
{
  "servers": {
    "selltostate": {
      "type": "http",
      "url": "https://app.selltostate.com/api/mcp"
    }
  }
}
{
  "mcpServers": {
    "selltostate": {
      "httpUrl": "https://app.selltostate.com/api/mcp"
    }
  }
}
extensions:
  "selltostate":
    enabled: true
    name: "selltostate"
    type: streamable_http
    uri: "https://app.selltostate.com/api/mcp"
    timeout: 300

Quality 80 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations27 of 27 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list_sectors (idempotentHint); get_supplier_detail (idempotentHint); get_tender (idempotentHint); …
  • pass
    tools.token_costabout 3,642 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes30 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

27 tools, about 3,642 tokens to load them all · tool set 41de40cd7b68 · tools last changed 2026-11-05 · checked 2026-11-07 11:21 UTC

Tool changes

  • plan_searchadded

    Turn a request in words into a Sell to State search: terms in the languages of the countries, and filters (scope, country, lifecycle, date window, amounts). Example text: 'body-worn cameras for police in Kenya and South Africa, open tenders'. Returns {summary, scope, q, filters, url, count, notes}; call `search` with scope, q and the filters to get the rows. When the text names nothing to search, returns {answer} only. Uses the daily AI search limit (3 a day for free accounts, 100 with a plan).

  • searchchangedinput schema
  • searchchangedinput schema
  • search_awardschangedinput schema
  • delete_saved_searchchangedtitle, annotations
  • rename_saved_searchchangedtitle, annotations
  • get_saved_searchchangedtitle, annotations
  • save_searchchangedtitle, annotations
  • get_saved_searcheschangedtitle, annotations
  • remove_from_listchangedtitle, annotations

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 95 / 100

provenance85
liveness98
freshness100
hygiene100

+repository +dns-namespace +website +reachable +uptime-94% +updated-17d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://app.selltostate.com/api/mcp streamable-httpnoneyes94%329 ms2025-11-252026-11-07

Tools (27)

add_to_listAdd a tender to a saved list. Body: id (list id) + tender_no OR award_id. Idempotent. Requires a user API key.
create_listCreate a new saved award list (personal). Body: name. Requires a user API key.
delete_listdestructiveDelete a saved list (and its items). Body: id. Requires a user API key (creator or workspace owner).
delete_saved_searchdestructiveDelete a saved search. Body: id. Requires a user API key (creator or workspace owner).
exportread-onlyExport a filtered award set as CSV, at most 500 rows per call (use the REST /api/v1/awards.csv for larger files). country omitted means singapore. A bad country is an error, not a Singapore file.
get_agencyread-onlyAll awards for one agency (by slug or display-name match).
get_buyerread-onlyBuyer (agency) detail by slug: summary stats, yearly spend trend, sector breakdown, and top suppliers.
get_buyer_detailread-onlyAlias of get_buyer (back-compat). Buyer (agency) detail by slug: summary stats, yearly spend trend, sector breakdown, and top suppliers.
get_listread-onlyOne saved list with paginated items joined to award data (description/buyer/supplier/amount/date). Requires a user API key.
get_listsread-onlyList every saved award list the caller (x-api-key owner) can see. Each list has itemCount (tender items only), buyerCount, supplierCount and totalCount (all items). Requires a user API key.
get_saved_searchread-onlyOne saved search by id (visible to the caller, else not_found). Requires a user API key.
get_saved_searchesread-onlyList every saved search the caller (x-api-key owner) can see (personal + shared workspace). Requires a user API key.
get_sectorread-onlySector detail by slug: summary stats, yearly trend, and active partners (kind=buyers|suppliers).
get_supplierread-onlyAll awards for one supplier (by display-name match).
get_supplier_detailread-onlySupplier detail by slug: summary stats, yearly awarded trend, sector breakdown, and top buyers.
get_tenderread-onlySingle tender (award) detail by numeric award_id OR public tender page id, with related awards (same tender / same buyer).
list_buyersread-onlyTop buyers (agencies) by total spend.
list_sectorsread-onlyThe curated sector taxonomy (slug + name).
list_suppliersread-onlyTop suppliers by total awarded.
plan_searchread-onlyTurn a request in words into a Sell to State search: terms in the languages of the countries, and filters (scope, country, lifecycle, date window, amounts). Example text: 'body-worn cameras for police in Kenya and South Africa, open tenders'. Returns {summary, scope, q, filters, url, count, notes}; call `search` with scope, q and the filters to get the rows. When the text names nothing to search, returns {answer} only. Uses the daily AI search limit (3 a day for free accounts, 100 with a plan).
remove_from_listdestructiveRemove a tender from a saved list. Body: id (list id) + tender_no. Requires a user API key.
rename_listRename a saved list. Body: id, name. Requires a user API key (creator or workspace owner).
rename_saved_searchRename a saved search. Body: id, name. Requires a user API key (creator or workspace owner).
save_searchSave a search under a name. Body: name, query (filter set), kind? ('atlas' → unified-search shape, else legacy Explorer filters). Requires a user API key.
searchread-onlyFaceted full-text search over one collection (scope). Every filter is a property of this schema, the same params as REST GET /api/v1/search; values of a fixed list are matched in any case. A bad value or an unknown argument is an invalid-params error whose data lists every problem (errors[]). Tender hits carry lifecycle, deadline_at, accepts_bids and source_url when the source gives them. Returns {hits, found, page, per_page, facets}.
search_awardsread-onlySearch awarded tenders in one country (Postgres), largest amount first, stable paging. Every filter is a property of this schema; country omitted means singapore. A bad value or an unknown argument is an invalid-params error whose data lists every problem (errors[]). Returns {rows, total, page, pageSize}.
whoamiread-onlySelf-introspection: resolve the caller's identity + entitlement + granted scopes. Returns {subject, type, active, plan, scopes, export_cap}. Works when the account has no active plan (active:false), so an agent can check access before it calls a data tool.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.selltostate/mcp",
  "icons": [
    {
      "src": "https://raw.githubusercontent.com/getbeton/selltostate-skills/main/assets/icon.png",
      "sizes": [
        "512x512"
      ],
      "mimeType": "image/png"
    }
  ],
  "title": "Sell to State",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://app.selltostate.com/api/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.4.1",
  "repository": {
    "url": "https://github.com/getbeton/selltostate-mcp",
    "source": "github"
  },
  "websiteUrl": "https://www.selltostate.com/mcp/",
  "description": "Government tenders, contract awards, buyers and suppliers from official sources in 60+ countries."
}