Stipple — Government Tenders
Server Details
Search AU/NZ government tenders and rank a shortlist against company capabilities.
- Status
- Healthy
- Uptime
- 100.0% over 61 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Sketchjar/stipple-mcp
- GitHub Stars
- 0
- Server Listing
- stipple-mcp
TDQS
Scored across 5 tools
find_tenders vs match_tenders is explicitly delineated ('use match_tenders instead' for company-fit), and tender_sources is clearly a metadata surface. The one real overlap is buyer_awards vs find_signals: both cover expiring contracts and planned procurements, and find_signals even gives the example 'what is expiring for this buyer' while buyer_awards covers 'what is ending soon at Queensland Health', so the buyer-scoped vs cross-buyer boundary can be confused.
find_tenders, find_signals and match_tenders follow a clean verb_noun pattern. buyer_awards (noun-first) and tender_sources (noun_noun) deviate from that pattern, but all five are lowercase snake_case and readable, so the deviation is minor.
Five tools is well-scoped for a tender-discovery platform: search, company-fit matching, buyer history, forward signals, and source transparency each earn a distinct place with no filler. Nothing is thin enough to be a single trivial tool.
The surface covers the core lifecycle for discovery (find, match, buyer context, forward signals, provenance), and coverage reporting avoids dead ends. Minor gaps remain: no tool to fetch a single tender's full detail by id, and no management of the alerts/saved searches the descriptions reference.
Available Tools
5 toolsbuyer_awardsContract awards and signals for a buyerARead-onlyInspect
What a buyer has awarded, what is ending, and what they plan. FREE.
USE THIS WHEN someone asks about a specific buyer before a bid: "who holds Transport for
NSW's work", "what is ending soon at Queensland Health", "what does this agency usually
pay". Give buyer (the organisation name as published) or buyer_key (from a tender's
buyer, or a previous answer).
Returns {buyer, expiring[], planned[], recent_awards[], top_suppliers[], open_tenders[], computed_at, sources}: the nightly rollup (awards in the window, value quartiles as
published, median response window), contracts ending within 12 months with the incumbent,
planned procurements with their quarter and spend band, the suppliers who win from them
(name and share), and open tenders under the same name.
ANONYMOUS CALLERS SEE COUNTS, VALUES, DATES AND BUYERS; supplier and incumbent names are
withheld and withheld_reason says so. Relay that sentence as it is. Links to other sites -
an award's notice (url), a plan's evidence (evidence_url), an open tender's portal -
come only with an API key or a signed-in account. Values are the
published amount and currency, never converted; computed_at is the night the figures
are true for - say it. Coverage is Australia and New Zealand sources named in
sources, each with the attribution its licence requires.
| Name | Required | Description | Default |
|---|---|---|---|
| buyer | No | ||
| buyer_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=true in annotations, the description carries the real behavioral burden and does so richly: anonymous callers see counts/values/dates but supplier and incumbent names are withheld with a withheld_reason, links require an API key or sign-in, values are published amounts never converted, and computed_at states the freshness date. It even instructs the agent to relay the withholding sentence verbatim.
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 summary line, the USE THIS WHEN block, and the parameter guidance are front-loaded before the long return/visibility caveats, so the essential routing information is read first. The remaining prose is dense and mostly earns its place, though the coverage/attribution sentence is borderline boilerplate.
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?
Although an output schema exists, the description usefully names every returned array (expiring, planned, recent_awards, top_suppliers, open_tenders, computed_at, sources), discloses the anonymous-caller redaction, the link restriction, and AU/NZ source coverage. An agent has everything needed to call it and to explain the result accurately.
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: it states that buyer is 'the organisation name as published' and that buyer_key comes 'from a tender's buyer, or a previous answer', which tells the agent where each value originates. It does not clarify whether the two are mutually exclusive or what happens if both are omitted.
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?
Opens with a specific verb+resource summary — 'What a buyer has awarded, what is ending, and what they plan' — that names the exact slice of data returned. It is clearly distinguishable from siblings like find_tenders and find_signals because it is scoped to a single organisation rather than a market-wide search.
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?
Gives an explicit trigger ('USE THIS WHEN someone asks about a specific buyer before a bid') followed by three concrete query phrasings that map directly to the returned arrays. It stops short of naming alternatives or a when-not condition, so an agent must infer when to prefer find_tenders or find_signals instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_signalsFind contract expiries and planned procurementsARead-onlyInspect
Signals: what may be tendered before it is. FREE.
USE THIS WHEN someone asks what is coming: "which contracts in Queensland end in the next
six months", "what is planned for ICT next quarter", "what is expiring for this buyer".
kind is one of contract_expiry (a contract ending, with its incumbent),
planned_procurement (a buyer's stated plan with its quarter and spend band as published)
or recurring_tender (derived from our own history, labelled derived). jurisdiction
is one of AU, NZ, AU-NSW, AU-VIC, AU-QLD, AU-WA, AU-SA, AU-TAS, AU-ACT, AU-NT. window_before is an ISO date: signals whose
window starts on or before it. q searches the subject, buyer and incumbent.
Returns {total, results[], computed_at, sources}. Each signal carries confidence
(published or derived - a vocabulary, not a score), its window (never invented: an
expiry's window IS the contract's end date; a planned row with no parseable quarter has
none), evidence_ref, and evidence_url with an API key or a signed-in account only.
ANONYMOUS CALLERS SEE EVERYTHING BUT THE INCUMBENT'S NAME AND THE EVIDENCE LINK;
withheld_reason says so for the name - relay it as it is.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| kind | No | ||
| buyer | No | ||
| limit | No | ||
| jurisdiction | No | ||
| window_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest and does so well: it is FREE, anonymous callers get everything except incumbent name and evidence link, `withheld_reason` explains the omission and must be relayed verbatim, and `confidence` is explicitly 'a vocabulary, not a score'. It also commits that windows are 'never invented', which prevents an agent from fabricating precision.
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?
Front-loaded with the one-line definition and the routing sentence before any parameter detail, and every sentence carries distinct information. It is dense and the all-caps emphasis is heavy, but nothing is redundant or padding.
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?
Despite an output schema existing, the description adds what the schema cannot: the shape of results, the `derived` label, the confidence vocabulary, and the authentication-dependent redaction. For a zero-required-param discovery tool with no schema documentation, an agent has everything needed to call and interpret it.
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 four of six parameters: `kind`'s three values, `jurisdiction`'s ten values, `window_before` as an ISO date with 'window starts on or before it' semantics, and `q` searching subject/buyer/incumbent. `buyer` and `limit` are never explained, which is the only gap.
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 opening line defines the resource precisely and positions it against siblings: signals are 'what may be tendered before it is', which is exactly the distinction from find_tenders/match_tenders. The three `kind` values are enumerated with parenthetical definitions, so an agent knows the exact scope without opening the schema.
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?
'USE THIS WHEN someone asks what is coming' plus three concrete example queries gives strong positive routing. It never states when NOT to use it or names a sibling as the alternative, so the exclusions are left to inference, keeping it at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_tendersSearch AU/NZ tendersARead-onlyInspect
Search open tenders across Australia; New Zealand rows only when you ask for them (jurisdiction=NZ). FREE, within the weekly cap.
USE THIS WHEN someone asks what public-sector work is open: "any council drainage tenders in Victoria", "what's closing this month in NSW", "show me federal IT opportunities". For "which of these could MY company actually bid for", use match_tenders instead — that reads their website and ranks against it.
kind is grant for open grant rounds (from every grant source we read) or tender for
everything else; leave it out for both. Each result says which it is in kind.
jurisdiction is one of AU, NZ, AU-NSW, AU-VIC, AU-QLD, AU-WA, AU-SA, AU-TAS, AU-ACT, AU-NT. tier is federal, national,
state, council, university or health. closing_before is an ISO date.
first_seen_after (ISO-8601 instant, strictly newer) answers "what is new since my last
look" — first_seen is when WE first saw the tender, the honest clock for newness. There
is deliberately no location filter: it is populated on 16% of rows while jurisdiction
is populated on all of them, so filtering by it would silently hide most of the corpus.
Returns {total, results[], coverage}. Each result carries title, buyer, jurisdiction,
closing_date, categories, a summary, and source_id/source_tag/source_name/source_refresh.
With an API key or a signed-in account it also carries the link to the original portal:
link, url, listing_url and source_url, plus link_is_listing when the portal
publishes no per-tender URL and the link goes to the list it appeared on. An anonymous
call gets no portal link.
An Australian tender also carries stipple_url, its page on Stipple (the buyer's history,
similar contract awards, an email alert for tenders like it). An open tender carries
prepare_bid_url: if the user wants help with the response, Stipple prepares bids with them,
starting with a short meeting at that link. Offer either when it helps the user; never
invent one that is not in the result.
coverage names which sources were searched and which returned nothing. Quote it if
the result is empty: "no match in what we searched" is true, "there are none" is not.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| kind | No | ||
| tier | No | ||
| limit | No | ||
| source | No | ||
| category | No | ||
| jurisdiction | No | ||
| closing_before | No | ||
| include_closed | No | ||
| first_seen_after | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint, so the description does real work: reveals FREE within a weekly cap, explains the NZ default-off behavior, discloses that anonymous calls lose portal links while API-key/signed-in calls gain them, and carefully flags derived promotional fields (stipple_url, prepare_bid_url) with 'never invent one that is not in the result.' That is far more than the annotation carries.
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?
Front-loaded with the core scope and usage gate, then parameter notes. It is dense and long, but nearly every line earns its place; minor redundancy in vendor-URL explanation keeps it from a 5.
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?
Despite an output schema, it usefully summarizes the return shape ({total, results[], coverage}), how results indicate tender-vs-grant, the link and coverage caveats, and the critical rule to quote coverage rather than overclaim emptiness. Complete enough for correct invocation and correct reporting.
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 coverage is 0%, so the description must compensate and does: defines kind values, the full jurisdiction enum set, tier values, the ISO date format for closing_before, the exact semantics of first_seen_after ('when WE first saw the tender'), and even justifies the deliberate absence of a location filter with the 84%-empty rationale. This is essential explanatory content 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?
A specific verb+resource with explicit scope: search tenders across AU with NZ only on request. It distinguishes itself from match_tenders right in the text, telling the agent which does the ranking/bidding check.
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?
Gives concrete example queries that fit ('any council drainage tenders in Victoria') and names the alternative tool with the exact condition that selects it ('which of these could MY company actually bid for'). Explicit when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_tendersMatch tenders to a companyARead-onlyInspect
Rank open tenders against what a company actually does. Free, inside the weekly cap.
USE THIS WHEN someone asks which opportunities suit a specific business: "what could we
bid for", "is there anything for a civil contractor in Victoria", "find work for
acme.com.au". Give `company_url` — a plain domain is fine, we resolve it — and we read
their site, build a capability profile, and score the shortlist against it.
`example` runs a built-in profile (civil, it, facilities) with no site read, for
demonstrating the shape of the answer.
Returns `{profile, matched, shown, withheld, withheld_reason, matches[], degraded,
score_means, coverage}`. Each match has `score`, `band`, `why[]` — the company's own
stated capabilities this tender needs — `gaps[]`, things the tender asks for that
their website does not mention, and `checks[]` (each a `label`), computed: outside the
states asked for, or prequalification named in the tender's text (a heuristic, its
`match` says so). `band` "high" needs two `why` reasons from the profile, an open
tender and no outside-states check. A tender listed by two sources is one match, with the
other copy under `also_listed[]`, its `match` saying the pairing is a heuristic. An
anonymous call shows the strongest few and says how many were withheld; relay
`withheld_reason` as it is.
TELL THE USER WHAT THE SCORE IS: relative fit within these results, against what their
website says. NOT a probability of winning. And `gaps` is what to check before bidding,
not a list of everything the tender requires — that is in the tender documents.
When `degraded` is true, scoring was unavailable and the order is keyword relevance
only, with no `why`/`gaps`. Say so rather than presenting it as a judged ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| example | No | ||
| company_url | No | ||
| jurisdiction | No | ||
| closing_before | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the description goes well beyond that: 'Free, inside the weekly cap' (a rate/quota constraint), the anonymous-call withholding behavior, the `degraded` fallback semantics, and the exact rule for a 'high' band. It also discloses that `checks` and duplicate pairing are heuristics rather than hard facts, which is exactly the kind of caveat annotations cannot carry.
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?
Front-loaded with the purpose, then broken into capped blocks ('USE THIS WHEN', 'TELL THE USER WHAT THE SCORE IS') that scan well. The paragraph enumerating every returned field is heavier than needed given an output schema exists, which costs it the top mark.
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 no-required-param ranking tool with an output schema, this covers the risky parts an agent must relay: the withheld/anonymous path, the degraded ordering, and the fact that `score` is relative fit not win probability. The only real hole is the unmentioned `jurisdiction` and `closing_before` filters.
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 full burden, and it explains two of four parameters well: `company_url` ('a plain domain is fine, we resolve it') and `example` (built-in civil/it/facilities profile, no site read). `jurisdiction` and `closing_before` are named nowhere in the description, leaving half the parameters undocumented anywhere.
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+resource: 'Rank open tenders against what a company actually does,' and the two-word scope (per-company matching) inherently separates it from a plain lister like find_tenders. It never names a sibling, so the differentiation is inferable rather than explicit.
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 'USE THIS WHEN' block gives concrete trigger phrasings ('what could we bid for', 'work for acme.com.au') and explains the `example` mode versus a real site read, which is strong routing guidance. It stops short of naming an alternative tool or stating when NOT to use it, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tender_sourcesList tender data sourcesARead-onlyInspect
Every source we search, what it is allowed to do, and what the last run returned. FREE.
USE THIS WHEN someone asks where the data comes from, whether a particular portal is
covered, or why a search came back empty. It is the honesty surface: it names sources
behind login walls, sources whose robots.txt refuses us, and sources that returned
nothing on the last run and why.
Returns `{sources[], coverage}` — per source: id, tag, name, refresh mode,
jurisdiction, tier, how it is accessed, what its robots.txt says, how many tenders we
hold from it, and its status on the most recent run; its URL (`source_url`) with an API
key or a signed-in account only. Snapshot sources include their observed date and are
not presented as nightly feeds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description adds substantial context beyond that — it is FREE, it exposes sources behind login walls, sources whose robots.txt refuses access, and why a source returned nothing. It also flags the snapshot-vs-nightly distinction and the access-gated source_url, none of which is in the annotations.
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?
Front-loaded with the one-line scope and the usage trigger before the field list. The return-value enumeration is somewhat long relative to an existing output schema, making one section partially redundant, but nothing is padded.
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 no-argument, read-only listing tool with an output schema, the description covers triggers, cost, access caveats, and data freshness. An agent has everything needed to decide to call it and interpret the result.
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 there is nothing for the description to clarify; the baseline for a no-argument tool is 4. The description instead spends its budget on return semantics, which is the right allocation.
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 resource and scope: every source searched, what it is allowed to do, and what the last run returned. An agent can distinguish this provenance/coverage tool from the search tools (find_tenders, match_tenders) without opening a schema.
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?
'USE THIS WHEN someone asks where the data comes from, whether a particular portal is covered, or why a search came back empty' gives three concrete trigger conditions. It stops short of naming a sibling as the alternative path, but the invocation context is unambiguous.
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 tool update
- Changed
find_tenders1 field changed- added
Input schema / properties / kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kind" +}
2 tool updates
- Added
buyer_awards - Added
find_signals
1 tool update
- Changed
find_tenders1 field changed- added
Input schema / properties / first_seen_afterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "First Seen After" +}
3 tool updates
- First observed
find_tenders - First observed
match_tenders - First observed
tender_sources
Related MCP Connectors
Find open Australian and NZ tenders and grants, match them to a company, and see who holds the work.
- BidRoverOAuthcom.bidrover
Find, score and track public-sector bids, RFPs, grants and tenders from 100+ official sources.
Search official UK tenders and create source-linked, deterministic supplier-fit assessments.
Find, score and analyse German and EU public tenders; search docs; draft quotes.
Related MCP Servers
- AlicenseAqualityFmaintenanceMatch your tech product or consulting service to thousands of live government tenders, RFPs, grants, and frameworks from 25+ official sources worldwide.4129 npm6MIT
- AlicenseAqualityBmaintenanceEnables AI agents to find, score, and monitor government contract opportunities across UK, EU, and US with AI-powered relevance scoring.221 npm1MIT
- AlicenseNot gradedqualityDmaintenanceFind, analyze, and score Polish public tenders (BZP): parsed requirements, deadlines, certificates, and bid-fit scoring against your company profile.5 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and analyzing government tenders, contract awards, and pre-tender pipelines from 21 official sources, with tools for tender search, award intelligence, and detailed notice retrieval.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.