SpendQuery
Server Details
US federal spending, contracts, SAM.gov notices, FAR clauses and SBIR awards, in plain English.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 13 tools
Most tools have clear distinct purposes: catalog/help, generic query execution, FAR lookup, notices, recipients, local bids, SBIR awards, size standards and vehicles. The main overlap is among browse_codes, search_codes, naics_finder and size_standard, but their descriptions make the boundaries reasonably clear (spend browsing vs code resolution vs NAICS mapping vs SBA size standards).
Several tools follow a clear verb_noun pattern such as browse_codes, get_catalog, get_far_section, search_far and run_plan. However, the set mixes these with noun-based names like naics_finder, sbir_awards, size_standard and vehicle_match, so the convention is readable but not fully consistent.
Thirteen tools is well scoped for a broad government-spend research server. Each tool covers a recognizable capability area without excessive fragmentation.
The surface is quite complete: it includes a catalog, a generic QueryPlan engine, code lookup, recipients, FAR/DFARS search, SAM notices, SBIR/STTR awards, local bids, size standards and contract vehicles. Minor gaps may exist around direct detailed award/contract lookup or richer recipient drilldowns, but users can likely work around them with run_plan.
Available Tools
13 toolsbrowse_codesBrowse industry and product codesARead-onlyIdempotentInspect
Browse what the government buys, with contract spend. kind: psc (products and services) | naics (industries). No group and no query -> the groups (PSC: services by letter, e.g. D = IT services, R = professional support; products by 2 digits, e.g. 84 = clothing and individual equipment; NAICS: 2-digit sectors), largest first. group -> the codes in it. query -> codes whose name contains the words. Default year: last complete fiscal year. Use a code or its name in a plan's psc / naics filter.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | psc (products and services) or naics (industries). | psc |
| group | No | A group to list the codes in: a PSC letter or 2-character group (e.g. "D", "84") or a 2-digit NAICS sector (e.g. "54"). | |
| limit | No | Most rows to return, 1-200. | |
| query | No | Words in a code's name, e.g. "body armor", "janitorial". | |
| fiscal_year | No | Federal fiscal year (October-September), e.g. 2025; default the last complete one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so the description earns credit for adding behavioral detail beyond them: default fiscal year is the last complete one, results are ordered largest first, and the three modes behave differently. It doesn't mention pagination or what fields each row 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 and dense: the resource, the mode dispatch, and the default are covered in a few sentences with no filler. The telegraphic quasi-syntax ('kind: psc ... | naics') is compact but slightly cryptic on first read.
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 no output schema, the description still conveys what rows look like (groups, or codes with contract spend, sorted largest first) and what the default period is. An agent can call it correctly and interpret results without opening anything else; only row field details are missing.
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 100%, so every parameter is already documented, which sets the baseline at 3. The description adds genuine value on parameter interaction (group vs query precedence) and gives PSC group examples ('D = IT services', '84 = clothing'), but largely restates the schema's own enum and group semantics.
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 ('Browse what the government buys, with contract spend') and immediately scopes it to two code systems via kind. It's clear what the tool returns, though it never names siblings like search_codes or naics_finder to differentiate the browse-vs-search split.
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?
Explicitly maps input combinations to outcomes: no group and no query -> groups, group -> codes in it, query -> name matches. That's actionable routing logic. It lacks any negative guidance (when NOT to use this versus search_codes), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalogWhat SpendQuery can answerARead-onlyIdempotentInspect
What SpendQuery can answer: data coverage, metrics, dimensions (with examples and whether they apply to contracts or assistance), analyses, the QueryPlan JSON schema, planning rules and example question -> plan pairs. Call this first (no arguments): the federal catalog. section: "states" (state, county and city checkbooks in brief: each jurisdiction, their dimensions, rules and examples), "state:" (one jurisdiction in full, e.g. "state:MA"), "rules" (every planning rule), "examples" (every worked example) or "full" (everything).
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Omit for the federal catalog. "states" (state, county and city checkbooks in brief), "state:<CODE>" for one jurisdiction in full (e.g. "state:MA"), "rules", "examples" or "full". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the tool takes no arguments and is the entry point, and the section choices trade breadth ('states' in brief, 'full' as everything) against depth ('state:<CODE>' in full), which hints at payload size. It does not describe response format or potential truncation of 'full'.
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 contents enumeration is front-loaded, then the 'call this first' directive, then the section breakdown — a sensible order for an agent. It is somewhat dense and the section list duplicates the schema's parameter description almost verbatim, which is wasted space, but nothing is irrelevant.
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 no output schema, the description carries the burden of telling the agent what comes back, and it does: a catalog of coverage, metrics, dimensions, analyses, planning schema, rules and examples, with granularity controls. Missing are the response format and the practical size of 'full', but for a one-optional-parameter discovery tool this is nearly complete.
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 100% and the single parameter's schema already documents 'Omit for the federal catalog' plus every section value. The description restates this with the same examples ('state:MA'), adding a small amount of reinforcement but no meaning beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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 names both the verb (get) and the resource, then enumerates the concrete contents: data coverage, metrics, dimensions, analyses, the QueryPlan JSON schema, planning rules and worked examples. It also distinguishes itself from siblings by positioning itself as the entry point ('Call this first'), which is enough for an agent to tell it apart from run_plan, search_far, etc.
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?
'Call this first (no arguments)' is an explicit sequencing directive that tells the agent exactly when to reach for this tool. It also explains how to choose the section value ('states' in brief vs 'state:<CODE>' in full vs 'full'). It stops short of stating when not to call it (e.g. repeated calls, or that discovery should precede run_plan), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_far_sectionRead a FAR or DFARS sectionARead-onlyIdempotentInspect
One FAR or DFARS section's full text (paragraphs), its part and subpart, the sections it refers to and the ones referring to it, and Federal Register rules changing its part. Cite it as FAR (or DFARS) with the as-of date in source.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes | A FAR or DFARS section number, e.g. "52.204-21", "19.502-2" or "252.204-7012". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. In the absence of an output schema, the description carries the return-value burden and does so by listing the payload contents (paragraphs, part/subpart, inbound and outbound references, Federal Register rules). It does not say what happens when a section number is invalid or not found, which is the remaining gap.
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 dense sentence that front-loads the resource and then the payload, followed by a short citation directive. Nothing is wasted, though the opening fragment ('One FAR or DFARS section's full text') reads as a noun phrase rather than a verb-led statement of action.
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 no output schema, the description must describe returns, and it does so thoroughly for a read-one-entity tool, plus it supplies the citation format including the as-of date. Missing only error/not-found behavior and any note on size limits for very long sections.
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 100% and the single 'section' parameter already documents its format with three concrete examples, so the description adds nothing beyond the schema. Baseline 3 applies for a fully documented one-parameter tool.
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 names a specific resource — 'One FAR or DFARS section's full text' — and enumerates what comes with it (part, subpart, references, Federal Register rules), which clearly separates it from sibling search tools like search_far. It lacks an explicit contrast sentence naming those siblings, keeping it below 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?
Use is implied by 'One ... section' — that is, use this when you already know the section number, and use search_far otherwise — but the description never states this or names the alternative. The only explicit usage instruction is the citation convention ('Cite it as FAR <section> ... with the as-of date'), which is genuinely useful but about output handling rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noticeLook up a contract noticeARead-onlyIdempotentInspect
One SAM.gov contract notice as SpendQuery's brief sees it, no AI: the decision card (what the buyer needs, blockers, unknowns, a next step; each line labelled record / files / unknown), the timeline of the buy (planned buy, the contract it follows, earlier and newer notices, the award and the contract it became, each link confirmed / likely / possible) and what changed between versions of its public files. notice_id: from run_plan lists of contract_opportunities, or the id in a SAM.gov notice URL.
| Name | Required | Description | Default |
|---|---|---|---|
| notice_id | Yes | A SAM.gov notice id: the 32-character hex id in a SAM.gov notice URL (sam.gov/opp/<id>/view) or from run_plan's contract_opportunities rows, e.g. "0a1b2c3d4e5f60718293a4b5c6d7e8f9". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context by explaining that the result is a deterministic 'no AI' brief with labelled decision-card lines and confidence-labelled timeline links, though it does not mention auth or rate-limit behavior.
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 key point is front-loaded: it returns one SAM.gov contract notice. The sentence is dense and uses long parenthetical lists, but the detail is largely justified because there is no output schema and the return shape is non-trivial.
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 no output schema, the description must explain what comes back, and it does: decision card contents, timeline elements with confidence labels, and file-version diffs. Combined with the fully documented single parameter and annotations, this is complete enough for an agent to call it correctly.
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 100%, so the schema already documents notice_id format and sources, including the SAM.gov URL pattern and run_plan rows. The description repeats those sources but adds no additional syntax or semantic detail beyond the schema, making the baseline score appropriate.
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 clearly states it retrieves one SAM.gov contract notice and enumerates the brief contents: decision card, timeline, and file-version changes. It is specific about the resource and verb, but it does not explicitly distinguish itself from sibling search or planning tools such as run_plan.
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?
Usage is implied by 'One SAM.gov contract notice' and by saying notice_id comes from run_plan contract_opportunities rows or a SAM.gov notice URL. However, there is no explicit guidance on when to use this tool versus search tools or run_plan, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
naics_finderFind NAICS codes for a businessARead-onlyIdempotentInspect
Describe the work in plain words -> the NAICS codes buyers actually use for it (codes on SAM.gov notices whose titles have the words and on federal contracts described with them), each with its SBA size standard.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | The work in plain words, e.g. "commercial janitorial and floor care" or "drone mapping surveys". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world, so the bar is lower; the description still adds real value by disclosing the evidence basis (SAM.gov notice titles, federal contract descriptions) and that each code comes with its SBA size standard. It stops short of saying how many codes are returned or how they are ranked.
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 front-loaded sentence with an arrow structure that puts input before output; the parenthetical is dense but every clause carries information. Slightly long for what it says, but 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?
With no output schema, the description does the necessary work of explaining what comes back: codes plus size standards. Only the result count and ordering are left unspecified, which is a minor gap for a single-parameter lookup tool.
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 100% and the single parameter already documents the plain-language input with two concrete examples. The description's 'work in plain words' phrasing restates the schema without adding format, length, or granularity guidance.
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 transformation: plain-language work description -> NAICS codes, plus the SBA size standard. It implicitly separates itself from browse_codes/search_codes by grounding results in buyer usage, but never names those siblings explicitly, so 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 input pattern ('Describe the work in plain words') implies when to reach for this tool, but there is no explicit when-to-use/when-not guidance and no mention of when to prefer search_codes, browse_codes, or size_standard for adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_planRun a spending queryARead-onlyIdempotentInspect
Run a QueryPlan (see get_catalog.plan_schema). Returns status (ok | clarify | unsupported | error), a one-paragraph answer, columns, rows (max 100), the SQL that ran, caveats and how names were resolved to codes.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | A QueryPlan object in business terms, following get_catalog's plan_schema, e.g. {"intent": "aggregate", "metric": "obligations", "group_by": ["agency"], "fiscal_years": [2025], "filters": [{"dimension": "award_category", "values": ["contract"]}]}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering read-only and idempotent behavior, the description adds substantial return-value context: status values (ok, clarify, unsupported, error), a one-paragraph answer, columns, rows capped at 100, the executed SQL, caveats, and name-resolution details. This is especially valuable because there is no output schema.
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 two compact sentences, front-loads the action, and then efficiently enumerates the return contract. Every clause carries useful information.
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 nested QueryPlan with no output schema, the description covers the plan source and enumerates the return fields well. It could go further by explaining how to handle clarify or unsupported statuses, but it is sufficiently complete for invocation.
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 100% and the plan parameter already includes an example and a reference to get_catalog's plan_schema. The description repeats the same reference but adds no additional parameter syntax or constraints beyond the schema.
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 states a specific verb and resource: 'Run a QueryPlan' for a spending query. It also distinguishes the tool from get_catalog by pointing to get_catalog.plan_schema for the plan structure.
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 reference to get_catalog.plan_schema implies that a plan must come from the catalog, but the description does not explicitly say when to use run_plan instead of siblings such as get_catalog, search_far, or browse_codes. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sbir_awardsSearch SBIR and STTR awardsARead-onlyIdempotentInspect
SBIR and STTR awards since 1983 from SBA's SBIR.gov records, and who received them: totals, awards by year (Phase I / II), by agency, the companies with the most, and the latest awards (company, title, agency, phase, amount, year). Filters: agency (as SBIR.gov names it, e.g. "Department of Defense"), phase ("Phase I" or "Phase II"), program ("SBIR" or "STTR"), state (the winner's), q (words in the award title), company_uei, since (first award year). open_topics: also the SBIR/STTR solicitations open now (SAM.gov and Grants.gov). SBIR.gov counts awards by award year; USAspending (run_plan) counts money by fiscal year, so the two differ.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words in the award title, e.g. "hypersonic" or "battery". | |
| phase | No | The award phase: Phase I or Phase II. | |
| since | No | First award year to count, e.g. 2020. | |
| state | No | The winner's two-letter state code, e.g. "VA". | |
| agency | No | The awarding agency as SBIR.gov names it, e.g. "Department of Defense", "National Science Foundation". | |
| program | No | The program: SBIR or STTR. | |
| company_uei | No | A winner's 12-character UEI, e.g. "ZFN2JJXBLZT3". | |
| open_topics | No | Also list the SBIR/STTR solicitations open now (SAM.gov and Grants.gov). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description is not responsible for basic safety disclosure. It adds useful behavioral context beyond annotations: data provenance from SBA's SBIR.gov records, the award-year counting semantics, and the side effect of open_topics querying SAM.gov and Grants.gov. It does not discuss pagination, rate limits, or freshness beyond the source caveat, but the key operational semantics are present.
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 the resource and scope, and every major clause—returned dimensions, filter list, open_topics behavior, and the run_plan caveat—contributes useful information. It is a dense paragraph rather than a crisply structured list, and the filter enumeration partly duplicates the schema, which 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?
There is no output schema, so the description must explain return values; it does so comprehensively by naming totals, awards by year and phase, agency breakdowns, top companies, and the fields of latest awards. All eight parameters are accounted for, the open_topics behavior is described, and the counting caveat versus run_plan is included. An agent has enough information to call this tool correctly.
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 100%, so the input schema already documents all eight parameters thoroughly, including examples and enums. The description restates the filter list and examples but does not add syntax or meaning beyond what the schema provides, such as expected formats for combined filters or default behavior. The baseline of 3 is appropriate when the schema carries this much weight.
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 states a specific verb and resource: searching SBIR/STTR awards since 1983 and who received them. It enumerates the returned dimensions (totals, awards by year/agency, top companies, latest awards) so the agent knows exactly what this tool produces. It also distinguishes itself from the USAspending-based run_plan tool, making selection between them possible without opening schemas.
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 clearly explains the filters and adds the crucial caveat that SBIR.gov counts awards by award year while run_plan counts money by fiscal year, so the two differ. That gives strong context for when this tool is appropriate versus run_plan. It stops short of explicitly saying when not to use this tool, so it is not a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codesSearch agencies, industries and product codesARead-onlyIdempotentInspect
Look up codes and official names. kind: agency | bureau | state | county | naics | psc | program. Matches names (substring, case-insensitive) or code prefixes. Plans can use either the names or the codes.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | What to look up: agency, bureau (sub-agency), state, county, naics (industry), psc (product or service code) or program (Assistance Listing). | |
| limit | No | Most rows to return, 1-50. | |
| query | Yes | Words in the name, or the code itself, e.g. "veterans affairs", "541511", "D302". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: substring, case-insensitive name matching and code-prefix matching. It stops short of disclosing result ordering, whether partial matches are ranked, or what happens on zero matches.
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?
Four short lines, front-loaded with the purpose before the kind enumeration and matching rules. The kind list duplicates the enum from the schema, which is minor redundancy but aids at-a-glance scanning.
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 read-only lookup with full schema documentation and no output schema, the description covers purpose, entity kinds, and matching semantics well enough to call correctly. It omits what a returned row contains (code plus official name pairing) and any ordering, which is a small gap rather than a blocker.
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 100%, so the baseline is 3, but the description adds meaning beyond the schema by specifying prefix matching for codes and case-insensitive substring matching for names, which the schema only gestures at with 'Words in the name, or the code itself.' It adds nothing about limit, though that is fully documented in the schema.
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 and resource ('look up codes and official names') and enumerates the seven kinds of entities covered, so an agent knows exactly what domain this resolves. It does not distinguish itself from the sibling browse_codes or naics_finder, leaving ambiguity about which to pick for the same kind values.
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?
Usage is only implied: the matching rules ('names or code prefixes') and the note that 'plans can use either the names or the codes' hint at when this is needed as a resolution step. There is no explicit when-to-use versus browse_codes, and no stated exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_farSearch the FAR and DFARSARead-onlyIdempotentInspect
Search the FAR and the DFARS (48 CFR chapters 1 and 2, as codified in the eCFR): sections whose title or text has every word, or a section number (e.g. 52.219-14) straight to it. reg: FAR | DFARS to limit. Returns section numbers, titles and a snippet; read one with get_far_section. The codified text lags the Revolutionary FAR Overhaul's class deviations.
| Name | Required | Description | Default |
|---|---|---|---|
| reg | No | Limit to one regulation: FAR or DFARS; omit for both. | |
| query | Yes | Words that must all appear in the section's title or text (e.g. "limitations on subcontracting"), or a section number (e.g. "52.219-14"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior: what is returned (section numbers, titles, snippet) and the caveat that eCFR codified text lags the Revolutionary FAR Overhaul class deviations, which affects result trustworthiness.
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?
Dense and front-loaded with the core purpose and matching rule first, then scope and follow-up. The fragment 'straight to it' and the dangling 'reg: FAR | DFARS to limit' read as slightly compressed notes rather than clean prose, which costs a point.
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?
No output schema exists, but the description compensates by stating the return shape (section numbers, titles, snippet). With only two parameters, full schema coverage, and annotations covering safety, the only remaining gap is whether results are ranked or paginated.
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 100%, so the baseline is 3, and the description still adds meaning: the query is conjunctive (every word must match, in title or text) and may instead be a section number, and reg limits results to one regulation. This goes beyond the enum and field descriptions.
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 and resource ('Search the FAR and the DFARS') plus the exact matching semantics: all query words in title/text, or a section number. It also names get_far_section as the follow-up, so an agent can distinguish searching from reading without opening other schemas.
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 routes the agent explicitly: search here, then 'read one with get_far_section', and gives an example query ('52.219-14') that shows direct-lookup usage. It lacks explicit when-not-to-use guidance versus siblings like search_codes, but the search-vs-read split is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_local_bidsSearch state and local bids and contractsARead-onlyIdempotentInspect
State, county and city government bids and contracts (not federal awards), from the governments that publish them as open data: Los Angeles (the City, LA County, LADWP, LAUSD, airports, port, Metro), New York City, San Francisco, Washington DC, Chicago, Cook County, Austin, Detroit, Richmond, Sacramento, Baton Rouge, Montgomery County MD, Delaware, Texas DOT, California state departments (Cal eProcure), SUNY construction, E-Rate and others. kind: "open" (taking responses, soonest due first), "planned" (forecasts: TxDOT's planned lettings, Illinois CDB, San Diego County), "awarded" (contracts first awarded in the last year: who won, net amounts) or "current" (in force today, soonest ending first: the re-bids). q: words in the title or description; state: two-letter code (open and planned bids); source: one source key from the reply's sources. Coverage is partial: no tool has every state, county and city; say so when the place asked about isn't covered. Each row links to the government's own record (source_url).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words in the title or description, e.g. "roofing" or "janitorial". | |
| kind | No | open (taking responses, soonest due first), planned (forecasts), awarded (contracts first awarded in the last year) or current (in force today, soonest ending first). | open |
| limit | No | Most rows to return, 1-50. | |
| state | No | Two-letter state code, e.g. "TX" (open and planned bids). | |
| source | No | One source key from the reply's sources, e.g. "txdot", "nyc", "lacity". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so the description's job is lighter. It adds genuinely useful behavior context: coverage is partial and the agent should say so when a place isn't covered, ordering differs by kind, and each row links to the government's own record via source_url.
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 purpose, then the kind definitions, then per-parameter guidance, then the coverage caveat—a logical order. The long parenthetical roster of agencies (LADWP, LAUSD, airports, port, Metro, etc.) is somewhat bloated but does carry real coverage information, so it largely earns its place.
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?
Without an output schema, the description covers what matters: the result rows link to source_url, the reply contains source keys usable in the source filter, and partial coverage should be disclosed to the user. It does not describe limit defaults, but the schema handles that.
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 100%, so the baseline is 3, and the description exceeds it by clarifying that state applies only to open and planned bids, that source must be one of the keys returned in the reply, and by giving concrete examples of kind semantics and ordering. No syntax details for q beyond title/description matching, which is already in the schema.
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 and resource (search state/county/city bids and contracts) and immediately excludes federal awards, which is the key disambiguation. The enumerated source coverage makes the exact scope of the tool unmistakable and clearly separates it from siblings like sbir_awards or search_recipients.
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?
Explains what each kind value means and when it applies (open = taking responses, planned = forecasts, awarded = recent wins, current = in force), plus which filters are valid for which kinds (state applies to open and planned). It does not explicitly contrast this tool with named sibling tools beyond the federal-awards exclusion, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recipientsSearch companies and recipientsARead-onlyIdempotentInspect
Find award recipients (companies, universities, governments) by name or UEI. Returns each registration's UEI, parent, listed-company ticker (if matched) and its OWN obligations across loaded years, largest first. A parent's money sits on its units, so a parent UEI's own obligations can be small or negative: for a company's total use run_plan with a company filter (name or ticker). A UEI that is a parent also returns parent_rollup (its units).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most rows to return, 1-50. | |
| query | Yes | A company or recipient name, or a 12-character UEI, e.g. "booz allen" or "ZFN2JJXBLZT3". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/closed-world, so the bar is lower, yet the description adds substantial non-obvious behavior: result ordering ('largest first'), the data model caveat that a parent's money sits on its units, that a parent UEI's own obligations 'can be small or negative', and that parent_rollup is returned. These are semantics an agent cannot infer from structured fields and would otherwise misread.
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 core purpose and the run_plan alternative are front-loaded, and every sentence carries content. The middle sentence is heavily packed with parentheticals ('parent, listed-company ticker (if matched)... its OWN obligations'), which taxes readability slightly, but nothing is extraneous.
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 no output schema, the description must explain returns, and it does: UEI, parent, ticker when matched, own obligations, ordering, and parent_rollup. For a data-model-subtle tool, it supplies exactly the context needed to interpret results correctly.
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 100%, so the schema already documents both 'query' and 'limit' fully, including the UEI example. The description restates the name/UEI dual-mode lookup but adds no syntax or constraint beyond the schema, so baseline 3 applies. Notably, 'limit' is not mentioned in the description at all.
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 first sentence names a specific verb and resource ('Find award recipients') and enumerates entity types (companies, universities, governments) plus the lookup keys (name or UEI). This is clearly distinguishable from siblings like run_plan, search_codes, or naics_finder.
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?
It explicitly routes the agent: 'for a company's total use run_plan with a company filter (name or ticker).' That is a named alternative with the exact condition that selects it, which is exactly what usage guidance should do.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
size_standardCheck an SBA size standardARead-onlyIdempotentInspect
SBA small business size standards (13 CFR 121.201, the eCFR table): a NAICS code, a code prefix (5415) or industry words -> receipts ($ millions) or employees, exceptions and footnotes, and the programs that use them.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A 6-digit NAICS code (e.g. "541511"), a code prefix (e.g. "5415") or industry words (e.g. "custom software"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real value beyond that: it cites the authoritative source (13 CFR 121.201 eCFR table) and enumerates what comes back — thresholds in receipts or employees, exceptions, footnotes, and the programs that rely on them.
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 regulatory source, then a compact input-to-output mapping. The telegraphic arrow notation is efficient but slightly terse, reading more like a fragment than guidance.
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 a single parameter and no output schema, the description carries the return-value burden and does so — thresholds, exceptions, footnotes, programs. The only unaddressed case is ambiguity resolution (e.g., whether industry words can return multiple matches), which is a minor gap.
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 100% and the single `query` parameter already documents all three accepted forms with examples. The description restates the same input forms (NAICS code, prefix, industry words) and adds only the output units, so it does not meaningfully exceed the schema's own documentation.
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 names the specific resource (SBA small business size standards, 13 CFR 121.201) and states the exact outputs: a receipts ($ millions) or employee threshold plus exceptions, footnotes and the programs that use them. It does not, however, distinguish itself from close siblings like naics_finder or browse_codes, so an agent must infer the split from the domain framing alone.
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?
There is no explicit statement of when to call this versus naics_finder/search_codes, and no prerequisites or exclusions. The intended use (look up a size threshold for a code or industry) is only implied by the input formats listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vehicle_matchFind contract vehicles for an industryARead-onlyIdempotentInspect
For 6-digit NAICS codes (and an optional agency): the shared contract vehicles (GWACs, multiple-award IDIQs, GSA Schedule, BPAs) carrying last complete year's contract money in those codes, the share through each and who each is reserved for (read from its name).
| Name | Required | Description | Default |
|---|---|---|---|
| naics | Yes | One or more 6-digit NAICS codes, e.g. ["541511", "541512"]. | |
| agency | No | An agency to limit to, by name or code, e.g. "Department of Veterans Affairs" or "036". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: it constrains results to the last complete year's obligations, reports a share per vehicle, and explicitly notes that reservation/eligibility is inferred from the vehicle's name — an important caveat about how the data is derived.
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?
It is a single sentence with no filler, but the nested parentheticals ("(and an optional agency)", "(read from its name)") and a list of vehicle types make it hard to parse on first read. Content is front-loaded reasonably but the syntax is denser than necessary.
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 read-only, closed-world lookup with no output schema, the description covers the important things an agent needs: what entities come back (vehicles), what the numbers mean (share of last complete year's money), and how eligibility is determined. Nothing essential for correct invocation appears missing.
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 100%, with both parameters documented including the 6-digit NAICS format and the agency name-or-code convention. The description only restates that naics is 6-digit and agency is optional, adding essentially no semantics beyond the schema, so the baseline 3 is appropriate.
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 names a specific resource domain — shared contract vehicles (GWACs, multiple-award IDIQs, GSA Schedule, BPAs) scored against NAICS-coded contract money — which is clearly distinct from siblings like get_catalog, browse_codes, or search_recipients. It reads as a dense fragment rather than a verb+object sentence, but an agent can still tell what it returns.
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?
Usage is only implied through the input condition: you need 6-digit NAICS codes, optionally narrowed by agency. There is no statement of when to prefer this over get_catalog or browse_codes, and no exclusions or prerequisites (e.g. what happens with non-6-digit codes, or coverage limits of the underlying data).
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.
13 tool updates
- First observed
browse_codes - First observed
get_catalog - First observed
get_far_section - First observed
get_notice - First observed
naics_finder - First observed
run_plan - First observed
sbir_awards - First observed
search_codes - First observed
search_far - First observed
search_local_bids - First observed
search_recipients - First observed
size_standard - First observed
vehicle_match
Related MCP Connectors
SAM.gov, USAspending & state-portal bids, award history, expiring contracts, forecasts, protests
US federal contracts: solicitations, set-asides, deadlines, awards, contractor profiles. Free.
Federal contracts, SAM notices, congressional trades, PAC money, insider trades, bills, EOs, themes.
Government contract search and federal procurement data: SAM.gov opportunities + USASpending awards.
Related MCP Servers
- AlicenseAqualityBmaintenanceSearch and analyze U.S. federal government contracts and opportunities from SAM.gov. Tools for keyword search, contract details, competitive analysis, and capability statement drafting — built for AI agents via x402 USDC micropayments.32MIT
- FlicenseNot gradedqualityDmaintenanceFederal procurement intelligence toolkit that searches SAM.gov contract opportunities, analyzes agency spending patterns, tracks competitor wins, and monitors small business set-aside programs (8a, HUBZone, SDVOSB, WOSB). 4 tools using SAM.gov and USASpending.gov data.3-
- AlicenseNot gradedqualityBmaintenanceOpen & historical US government bid solicitations from city/county portals — updated daily.11 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search federal contracts, analyze agency spending, track competitor wins, and monitor small business set-aside opportunities using SAM.gov, USASpending.gov, and FPDS data.-
Glama MCP Gateway
Add one secure layer between your agents and this server.