# Sell to State (remote · app.selltostate.com)

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

- Trust score: 83/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

- remote · `app.selltostate.com`: 83/100 (this document), [markdown](https://verifymcp.io/servers/com-selltostate-mcp/api-mcp.md), [page](https://verifymcp.io/servers/com-selltostate-mcp/api-mcp)

## Channel facts

- Endpoint: `https://app.selltostate.com/api/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `0.4.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-06.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 63/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2599 tokens (~96/item across 27 items; 27 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 53/100
  - Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 84/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 52% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 28 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Sell to State MCP server?

Sell to State is a hosted endpoint at https://app.selltostate.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-selltostate-mcp 'https://app.selltostate.com/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-selltostate-mcp": {
      "url": "https://app.selltostate.com/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-selltostate-mcp": {
      "type": "http",
      "url": "https://app.selltostate.com/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-selltostate-mcp]
url = "https://app.selltostate.com/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-selltostate-mcp": {
      "type": "remote",
      "url": "https://app.selltostate.com/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-selltostate-mcp --url 'https://app.selltostate.com/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-selltostate-mcp:
    url: "https://app.selltostate.com/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-selltostate-mcp": {
      "Transport": "http",
      "Url": "https://app.selltostate.com/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-selltostate-mcp -t streamable-http -u 'https://app.selltostate.com/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-selltostate-mcp": {
      "type": "http",
      "url": "https://app.selltostate.com/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-06 (score 83, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-11-05 (score 83, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional] Schema quality: fair → good
- [functional] New tool “plan_search”
- [cosmetic] “search” reworded the description of “q”

### 2026-11-03 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 81, +1)

- [cosmetic] “search” reworded the description of “q”
- [cosmetic] “search_awards” reworded the description of “q”

### 2026-10-30 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 78, +2)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “export” rewrote its description, which is the text the model reads
- [security] Tool “whoami” rewrote its description, which is the text the model reads
- [security] Tool “delete_list” is now declared destructive
- [security] Tool “delete_saved_search” is now declared destructive
- [security] Tool “remove_from_list” is now declared destructive
- [functional regression] Schema quality: 71 → 86
- [functional improvement] Tool coverage: 47% → 52%
- [functional] Destructive annotations: All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
- [cosmetic] “get_buyer” added an optional parameter “country”
- [cosmetic] “get_buyer_detail” added an optional parameter “country”
- [cosmetic] “get_sector” added an optional parameter “country”
- [cosmetic] “get_supplier_detail” added an optional parameter “country”
- [cosmetic] “get_tender” added an optional parameter “country”
- [cosmetic] “list_buyers” added an optional parameter “country”
- [cosmetic] “list_suppliers” added an optional parameter “country”
- [cosmetic] “search” added an optional parameter “added_after”
- [cosmetic] “search” reworded the description of “published_days”
- [cosmetic] “search” reworded the description of “sort”
- [cosmetic] Tool “add_to_list” changed its title: Add a tender to a list
- [cosmetic] Tool “create_list” changed its title: Create a list
- [cosmetic] Tool “delete_list” changed its title: Delete a list
- [cosmetic] Tool “delete_saved_search” changed its title: Delete a saved search
- [cosmetic] Tool “export” changed its title: Export awards as CSV
- [cosmetic] Tool “get_agency” changed its title: Awards of an agency
- [cosmetic] Tool “get_buyer” changed its title: Buyer profile
- [cosmetic] Tool “get_buyer_detail” changed its title: Buyer profile (alias)
- [cosmetic] Tool “get_list” changed its title: Open a saved list
- [cosmetic] Tool “get_lists” changed its title: My saved lists
- [cosmetic] Tool “get_saved_search” changed its title: Open a saved search
- [cosmetic] Tool “get_saved_searches” changed its title: My saved searches
- [cosmetic] Tool “get_sector” changed its title: Sector profile
- [cosmetic] Tool “get_supplier” changed its title: Awards of a supplier
- [cosmetic] Tool “get_supplier_detail” changed its title: Supplier profile
- [cosmetic] Tool “get_tender” changed its title: Tender detail
- [cosmetic] Tool “list_buyers” changed its title: Top buyers
- [cosmetic] Tool “list_sectors” changed its title: Sector list
- [cosmetic] Tool “list_suppliers” changed its title: Top suppliers
- [cosmetic] Tool “remove_from_list” changed its title: Remove a tender from a list
- [cosmetic] Tool “rename_list” changed its title: Rename a list
- [cosmetic] Tool “rename_saved_search” changed its title: Rename a saved search
- [cosmetic] Tool “save_search” changed its title: Save a search
- [cosmetic] Tool “search” changed its title: Search tenders, buyers and suppliers
- [cosmetic] Tool “search_awards” changed its title: Search awards in one country
- [cosmetic] Tool “whoami” changed its title: Check account and plan

### 2026-10-25 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (27)

### `whoami` (~63 tokens)

Check account and plan

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

### `search_awards` (~356 tokens)

Search awards in one country

Search 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}.

Input parameters:

- `agency` (string): Buyer slug, or text in the buyer name (substring).
- `agency_slug` (string): Buyer slug, exact match.
- `amount_max` (number): Maximum awarded amount.
- `amount_min` (number): Minimum awarded amount.
- `awarded_days` (integer): Awarded in the last N days (UTC days).
- `category` (string): Sector slug, for example it-software.
- `country` (string): Country slug. Omitted means singapore.
- `date_days` (integer): Published or awarded in the last N days (UTC days).
- `page` (integer): Page number, from 1.
- `page_size` (integer): Rows per page, from 1. Default 100; the plan cap and 1,000 apply.
- `published_days` (integer): Published in the last N days (UTC days).
- `q` (string): Text in the tender description (substring). A text with boolean syntax (OR, AND, NOT, "a phrase", parentheses, -word) matches whole words of the tender title, buyer and supplier instead, as the searc…
- `supplier` (string): Text in the supplier name (substring).
- `supplier_slug` (string): Supplier slug, exact match.
- `year` (integer): Award year (publication year when the award date is missing).

### `get_supplier` (~26 tokens)

Awards of a supplier

All awards for one supplier (by display-name match).

Input parameters:

- `supplier` (string, required)

### `get_agency` (~29 tokens)

Awards of an agency

All awards for one agency (by slug or display-name match).

Input parameters:

- `agency` (string, required)

### `export` (~113 tokens)

Export awards as CSV

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

Input parameters:

- `agency` (string)
- `amount_max` (integer)
- `amount_min` (integer)
- `category` (string)
- `country` (string)
- `q` (string)
- `supplier` (string)
- `year` (integer)

### `get_buyer` (~67 tokens)

Buyer profile

Buyer (agency) detail by slug: summary stats, yearly spend trend, sector breakdown, and top suppliers.

Input parameters:

- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `slug` (string, required)
- `sup_page` (integer)

### `get_buyer_detail` (~78 tokens)

Buyer profile (alias)

Alias of get_buyer (back-compat). Buyer (agency) detail by slug: summary stats, yearly spend trend, sector breakdown, and top suppliers.

Input parameters:

- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `slug` (string, required)
- `sup_page` (integer)

### `get_supplier_detail` (~64 tokens)

Supplier profile

Supplier detail by slug: summary stats, yearly awarded trend, sector breakdown, and top buyers.

Input parameters:

- `buyer_page` (integer)
- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `slug` (string, required)

### `get_tender` (~63 tokens)

Tender detail

Single tender (award) detail by numeric award_id OR public tender page id, with related awards (same tender / same buyer).

Input parameters:

- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `id` (string, required)

### `get_sector` (~72 tokens)

Sector profile

Sector detail by slug: summary stats, yearly trend, and active partners (kind=buyers|suppliers).

Input parameters:

- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `kind` (string)
- `page` (integer)
- `slug` (string, required)

### `search` (~626 tokens)

Search tenders, buyers and suppliers

Faceted 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}.

Input parameters:

- `accepts_bids` (boolean): true: only open tenders whose bid deadline is still ahead.
- `added_after` (integer): Unix seconds. Only tenders added to Sell to State after this time. With sort=added_desc, a polling trigger keeps the time of its last run and asks for the rows after it.
- `amount_max` (number): Maximum amount.
- `amount_min` (number): Minimum amount.
- `awarded_days` (integer): Awarded in the last N days (UTC days).
- `country` (string): Country slug, or comma-separated slugs (OR).
- `date_days` (integer): Published or awarded in the last N days (UTC days).
- `has_amount` (boolean): true: only rows with an amount. false: only rows without one.
- `lifecycle` (array): Tender lifecycle values (OR).
- `lifecycle_mode` (string): is (default) keeps the lifecycle values; is_not leaves them out.
- `match` (string): Text match mode for the suppliers and buyers scopes.
- `page` (integer): Page number, from 1.
- `per_page` (integer): Results per page, 1 to 50. Default 25.
- `published_days` (integer): Published in the last N days (UTC days). 1 is the last day, for polling.
- `q` (string): Free text, at most 3,000 characters. Boolean syntax: OR, AND, NOT (uppercase), "a phrase", parentheses, -word (= NOT word). Two words with no operator mean AND. At most 300 terms. A text whose syntax…
- `scope` (string): The collection to search. Default tenders.
- `sector` (array): Sector slugs (OR), for example it-software.
- `sort` (string): relevance (default), deadline (the nearest bid deadline first), published_desc (the newest publish date first) or added_desc (the newest rows in Sell to State first). Tenders scope only.
- `status` (string): Countries scope only: data (the country has data) or coming_soon.
- `type` (string): Procurement type, for example works, goods or services. Only some countries have it.
- `year_max` (integer): Latest year (award year, else publication year).
- `year_min` (integer): Earliest year (award year, else publication year).

### `plan_search` (~148 tokens)

Plan a search from words

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

Input parameters:

- `text` (string, required): What you sell, or what you want to find, in words.

### `list_buyers` (~47 tokens)

Top buyers

Top buyers (agencies) by total spend.

Input parameters:

- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `limit` (integer)

### `list_suppliers` (~43 tokens)

Top suppliers

Top suppliers by total awarded.

Input parameters:

- `country` (string): Country slug, for example united-kingdom. Omitted means singapore.
- `limit` (integer)

### `list_sectors` (~18 tokens)

Sector list

The curated sector taxonomy (slug + name).

### `get_lists` (~53 tokens)

My saved lists

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

### `create_list` (~34 tokens)

Create a list

Create a new saved award list (personal). Body: name. Requires a user API key.

Input parameters:

- `name` (string, required)

### `get_list` (~57 tokens)

Open a saved list

One saved list with paginated items joined to award data (description/buyer/supplier/amount/date). Requires a user API key.

Input parameters:

- `id` (string, required)
- `page` (integer)
- `page_size` (integer)

### `rename_list` (~44 tokens)

Rename a list

Rename a saved list. Body: id, name. Requires a user API key (creator or workspace owner).

Input parameters:

- `id` (string, required)
- `name` (string, required)

### `delete_list` (~39 tokens)

Delete a list

Delete a saved list (and its items). Body: id. Requires a user API key (creator or workspace owner).

Input parameters:

- `id` (string, required)

### `add_to_list` (~64 tokens)

Add a tender to a list

Add a tender to a saved list. Body: id (list id) + tender_no OR award_id. Idempotent. Requires a user API key.

Input parameters:

- `award_id` (string)
- `id` (string, required)
- `tender_no` (string)

### `remove_from_list` (~49 tokens)

Remove a tender from a list

Remove a tender from a saved list. Body: id (list id) + tender_no. Requires a user API key.

Input parameters:

- `id` (string, required)
- `tender_no` (string, required)

### `get_saved_searches` (~36 tokens)

My saved searches

List every saved search the caller (x-api-key owner) can see (personal + shared workspace). Requires a user API key.

### `save_search` (~66 tokens)

Save a search

Save a search under a name. Body: name, query (filter set), kind? ('atlas' → unified-search shape, else legacy Explorer filters). Requires a user API key.

Input parameters:

- `kind` (string)
- `name` (string)
- `query` (object, required)

### `get_saved_search` (~37 tokens)

Open a saved search

One saved search by id (visible to the caller, else not_found). Requires a user API key.

Input parameters:

- `id` (string, required)

### `rename_saved_search` (~45 tokens)

Rename a saved search

Rename a saved search. Body: id, name. Requires a user API key (creator or workspace owner).

Input parameters:

- `id` (string, required)
- `name` (string, required)

### `delete_saved_search` (~36 tokens)

Delete a saved search

Delete a saved search. Body: id. Requires a user API key (creator or workspace owner).

Input parameters:

- `id` (string, required)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-selltostate-mcp/api-mcp#diagnostics

## Score history

- 2026-11-06: 83
- 2026-11-05: 83
- 2026-11-04: 82
- 2026-11-03: 82
- 2026-11-02: 81
- 2026-11-01: 81
- 2026-10-31: 80
- 2026-10-30: 80
- 2026-10-29: 79
- 2026-10-28: 79
- 2026-10-27: 78
- 2026-10-26: 76
- 2026-10-25: 76
- 2026-10-24: 75
- 2026-10-23: 75
- 2026-10-22: 74
- 2026-10-21: 74

## Common questions

### What is the Sell to State MCP server?

Sell to State is an MCP server listed in the public MCP registry as com.selltostate/mcp. Government tenders, contract awards, buyers and suppliers from official sources in 60+ countries. This page covers its hosted endpoint (https://app.selltostate.com/api/mcp).

### Is the Sell to State MCP server safe to use?

Sell to State scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Sell to State MCP server expose?

Sell to State exposes 27 tools: whoami, search_awards, get_supplier, get_agency, export, and 22 more. Their descriptions and schemas cost roughly 2,373 tokens of context every time the server is loaded.

### Does the Sell to State MCP server require authentication?

Yes. Sell to State asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Sell to State MCP server still maintained?

Sell to State is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the Sell to State MCP server?

VerifyMCP ran 13 checks on Sell to State, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://app.selltostate.com/api/mcp
- Repository: https://github.com/getbeton/selltostate-mcp
- Website: https://www.selltostate.com/mcp/
- Changelog RSS feed: https://verifymcp.io/servers/com-selltostate-mcp/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-selltostate-mcp/api-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-selltostate-mcp/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-selltostate-mcp/api-mcp
