Bosco Labs data
Server Details
Sanctions screening, company checks, EU tenders and law, SEC filings, insider trades
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Bosco-Labs/bosco-labs-data
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 31 tools
Most tools target clearly different data domains or resources, and the meta tools (describe/plan/run) have distinct roles. The main overlaps are company_accounts vs company_check and dod_contract_awards vs us_federal_awards, but each has a narrower source or use case that helps distinguish it.
All names use snake_case and are descriptive, mostly as dataset/resource names. The convention is not a strict verb_noun pattern throughout, and the three meta tools use verb-first naming, but the overall scheme is predictable.
At 31 tools, the server is well above the typical 3-15 range for easy agent selection. The breadth is justified by the many distinct data domains, but the surface is heavy and increases tool-selection burden.
Coverage is broad across company, financial, legal, trade, sanctions, product-safety and federal-award data, with planning and execution helpers. Some gaps remain, such as generic entity search and bulk export workflows, but core read-only data access is well covered.
Available Tools
31 toolsclinical_trialsClinicalTrials.gov API: trial search & NCT dossierARead-onlyIdempotentInspect
Answers "which trials?" and "where does this trial stand?" in one call: status, phase, sponsor, conditions, drugs, enrollment, start and primary completion dates, site countries, primary outcomes and whether results are posted, as one compact JSON row per trial with a link to its ClinicalTrials.gov record. Built for AI agents and people in pharma, biotech, health research and investing.
Price: $0.004 per trial.
| Name | Required | Description | Default |
|---|---|---|---|
| phase | No | Trial phases to include, any of EARLY_PHASE1, PHASE1, PHASE2, PHASE3, PHASE4, NA, e.g. ["PHASE3"] | |
| detail | No | "summary" (default): the compact dossier | summary |
| nctIds | No | ClinicalTrials.gov identifiers to look up, NCT + 8 digits, e.g. ["NCT05813925"] | |
| status | No | Overall recruitment status of the trial, e.g. ["RECRUITING", "NOT_YET_RECRUITING"] | |
| sponsor | No | Lead sponsor organisation, e.g. "Novo Nordisk" (matches "Novo Nordisk A/S") | |
| condition | No | Condition or disease to search for, e.g. "obesity" or "non-small cell lung cancer" | |
| hasResults | No | true = only trials with results posted on ClinicalTrials.gov; false = only trials without | |
| maxResults | No | Maximum number of trials (rows) to return in search mode, e.g. 20 | |
| startDateTo | No | Latest trial start date, YYYY-MM-DD, e.g. "2025-12-31" | |
| intervention | No | Drug, biologic, device or procedure name, e.g. "semaglutide" or "semaglutide OR tirzepatide" | |
| startDateFrom | No | Earliest trial start date (actual or planned), YYYY-MM-DD, YYYY-MM or YYYY, e.g. "2025-01-01" | |
| locationCountries | No | Trials with at least one site in any of these countries, e.g. ["Germany", "DK"] or ["Europe"] | |
| primaryCompletionTo | No | Latest primary completion date, YYYY-MM-DD, e.g. "2026-12-31" | |
| primaryCompletionFrom | No | Earliest primary completion date (actual or estimated: when the primary endpoint data are complete, the usual read-out catalyst), YYYY-MM-DD, e.g. "2026-01-01" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuine context beyond that: output is one compact JSON row per trial with a link to the source record, and there is a per-result price of $0.004 per trial, which matters for an agent deciding how to size maxResults. It does not disclose pagination or rate-limit behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences plus a one-line price note, with the capability and output shape front-loaded before the audience framing. The audience sentence ('Built for AI agents and people in pharma, biotech...') is the weakest part and borders on filler, but the whole thing stays short.
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 14-parameter, no-output-schema tool the description does the heavy lifting on return values — listing the dossier fields and the per-row link — and adds cost. The main gap is the `detail: full` mode, which the schema barely explains and the description never mentions, so an agent cannot judge what the richer payload contains.
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 every one of the 14 parameters is already documented with examples and formats, making 3 the baseline. The description's field list loosely echoes the filter set (phase, status, sponsor, conditions, drugs, dates, countries) but adds no syntax, matching behavior, or interaction rules beyond what the schema provides.
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 resource (ClinicalTrials.gov trials) and two capabilities — searching by criteria ('which trials?') and pulling a per-trial dossier by NCT ID ('where does this trial stand?') — and enumerates the returned fields (status, phase, sponsor, enrollment, dates, countries, outcomes, results-posted flag). It is clearly distinguishable from siblings like drug_safety or sec_filings_feed, though it never names an alternative to contrast with.
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 phrase 'which trials?' hints at filter-based search and 'where does this trial stand?' hints at single-trial lookup via nctIds, but the description never explicitly says when to use one mode versus the other, nor when this tool is preferred over a sibling such as drug_safety. The only explicit mode reference ('search mode') appears in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_accountsCompany Financials API: UK, Denmark & Norway accounts + LEIARead-onlyIdempotentInspect
Get normalized financials of UK, Danish and Norwegian companies, including private ones, straight from the official accounts they file with Companies House (UK), Erhvervsstyrelsen (Denmark) and the Brønnøysund Register of Company Accounts (Norway): revenue, gross profit, operating profit, net income, equity, net assets, current assets, cash, creditors and employees. Every number comes with the exact fact or field it was taken from, so you can audit any value. Each row also gets the company's LEI from GLEIF when it has one. Look up companies by company number, CVR or organisation number, or get the newest filings. For credit checks, KYB, M&A and lead research, and for AI agents.
Price: $0.04 per company-year.
| Name | Required | Description | Default |
|---|---|---|---|
| countries | No | Registers to read, as codes: GB (Companies House), DK (Erhvervsstyrelsen), NO (Brønnøysund Regnskapsregisteret), BE | |
| enrichLei | No | true (default) = look up each company's Legal Entity Identifier at GLEIF by its registration number and add `lei` and `lei_status` (null when the company has no LEI) | |
| cvrNumbers | No | Danish CVR numbers, 8 digits, e.g. ["24256790"] | |
| maxResults | No | Maximum company-years per country, newest filings first, e.g. 1 for a company's latest accounts | |
| orgNumbers | No | Norwegian organisation numbers, 9 digits, e.g. ["923609016"] | |
| companyNumbers | No | UK Companies House numbers, e.g. ["03117531", "SC123456"] (shorter numbers are zero-padded to 8) | |
| enterpriseNumbers | No | Belgian KBO/BCE enterprise numbers, 10 digits with or without dots, e.g. ["0403.170.701"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/open-world, so the description is free to add the details that matter: per-call pricing ($0.04 per company-year), that every figure carries its source fact for auditing, and that LEI is joined from GLEIF with a null when absent. It stops short of describing pagination, rate limits, or error behavior when a registration number is unknown.
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 verb and sources, then the returned fields, then the audit/LEI notes and pricing — a sensible order. It is slightly padded by the audience pitch ('for credit checks, KYB, M&A and lead research, and for AI agents'), which is marketing rather than operational 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 no output schema, the description usefully lists the financial fields returned and the accompanying LEI fields, and it explains the country-code defaults. For a 7-parameter, zero-required tool it covers what an agent needs, though it omits response shape details such as per-country grouping and behavior on unmatched identifiers.
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 every parameter, including defaults, digit patterns and the maxResults semantics. The description only echoes the identifier types and the 'newest filings' ordering, adding little syntax or meaning beyond the structured fields — baseline 3 applies.
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 ('Get normalized financials of UK, Danish and Norwegian companies') and enumerates the exact data points returned (revenue, gross profit, equity, employees, etc.). It also names the three official registers it reads from, which clearly separates it from the US-focused sibling sec_company_financials and from company_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 lookup modes ('by company number, CVR or organisation number, or get the newest filings') and target scenarios (credit checks, KYB, M&A, lead research). What is missing is explicit exclusion guidance — nothing tells the agent to use sec_company_financials for US companies or company_check for a lighter lookup, even though those siblings exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_checkCompany Check API: identity, financials & SEC filings in 1 callARead-onlyIdempotentInspect
One call answers "who is this company and what are its numbers?": legal name, LEI, registration number, status, legal form, registered address and (France, Finland, Estonia) industry and registration date, the key figures of its last fiscal years (revenue, operating profit, net income, equity, assets, cash, employees), the US listing and latest SEC filings, for UK companies the current directors and owners (persons with significant control), for Polish companies the board, proxies, shareholders and bankruptcy/restructuring entries from the National Court Register (KRS), and for US banks the FDIC record. Every value links to the official record it came from. Built for AI agents doing research, KYB or due diligence, and for people who want a quick, sourced company profile.
Price: $0.03 per company-report.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The company to check: a name (e.g. "Novo Nordisk") or an identifier: LEI | |
| country | No | ISO 3166 alpha-2 country code to disambiguate, e.g. "DK", "GB", "NO", "FR", "FI", "EE", "NL", "US" | |
| include | No | Which sections to fill: any of "identity", "financials", "us" (SEC filings of US issuers), "people" | |
| maxYears | No | How many fiscal years of key figures to return, newest first, e.g. 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: per-report pricing ($0.03 per company-report) and the guarantee that every value links back to its official source record. It omits what happens on an ambiguous or unmatched company, which is the main 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?
The core answer is front-loaded, which is good, but the body is a single very long run-on sentence with a dense parenthetical country inventory. Every clause is informative, yet the lack of structure makes it harder to scan than it needs to be.
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 lookup with full schema coverage and no output schema, the description covers return content, country-specific depth, sourcing guarantees and cost. The only missing pieces an agent would want are ambiguity/not-found behavior and any pagination or truncation rules for multi-year results.
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 schema already documents query, country, include and maxYears. The description adds some indirect meaning by mapping country coverage (France/Finland/Estonia industry data, UK directors, Polish KRS, US banks FDIC) and 'last fiscal years' to the relevant parameters. That is helpful framing but not syntax or format detail 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-plus-resource ('who is this company and what are its numbers') and enumerates concrete returned data: legal name, LEI, registration number, status, financials, SEC filings, directors/PSC, KRS entries, FDIC records. It is far more than a restatement of the name. It stops short of naming which sibling to prefer (sec_company_financials, company_accounts, identifier_resolver), so it does not fully differentiate itself.
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 gives an audience/context ('research, KYB or due diligence', 'quick, sourced company profile'), which implies when to reach for it. However, it never states when NOT to use it or which sibling covers a narrower need, leaving the agent to infer routing from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_hiring_signalsCompany Hiring Signals API: open roles, departments, locationsARead-onlyIdempotentInspect
Is a company hiring, for what, where and since when? Give company names, domains or job board URLs; get one summary per company (open roles by department, location and country, remote share, newest and oldest posting dates, top titles) plus the open jobs, each with a link to the posting. Built for AI agents doing sales prospecting, recruiting or market research, and for people who want hiring data without scraping LinkedIn or Indeed.
Price: $0.001 per unit (company-summary=5, job=1).
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | Only roles whose job title has a word starting with one of these, case-insensitive ("engineer" matches "Engineering", "ai" not "Retail"), e.g. ["engineer", "data scientist"] | |
| companies | Yes | Companies to check, 1-5 on the API: a name ("Notion"), a website domain ("stripe.com"), a job board URL | |
| locations | No | Only roles whose location text, other locations or country contains one of these as whole words, case-insensitive ("US" does not match "Australia"), e.g. ["London", "Germany", "remote"] | |
| departments | No | Only count and return roles whose department or team has a word starting with one of these, case-insensitive, e.g. ["engineering", "data"] | |
| postedSince | No | Only roles first published on or after this date: an ISO date ("2026-10-01") or a number of days back ("30d") | |
| summaryOnly | No | true = one summary row per company and no job rows (cheapest; answers "is X hiring and where?") | |
| maxJobsPerCompany | No | Most job rows to return per company, newest first, e.g. 20 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the description does not need to restate safety. It does add genuinely new behavior: a cost model ($0.001 per unit, summary=5 units vs job=1) and the shape of the payload (department/location/country breakdowns, remote share, date range, top titles, per-job links). Rate limits and failure behavior for unknown companies remain undisclosed.
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 question, then inputs, then outputs, then pricing — a sensible order with no redundancy. The clause "for people who want hiring data without scraping LinkedIn or Indeed" is mildly promotional but does convey the data source, so it earns its place marginally.
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 7-parameter tool with no output schema, the description does the heavy lifting of describing what comes back (summary row fields plus job rows with links) and how billing scales with the summary/job split. It does not say what happens when a company cannot be resolved or how complete the job coverage is, which are the remaining gaps for a prospecting agent.
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 every parameter is already documented with examples and matching semantics, making a baseline of 3 appropriate. The description's "Give company names, domains or job board URLs" merely restates the `companies` schema text and says nothing about `keywords`, `departments`, `locations`, `postedSince` or `maxJobsPerCompany` beyond what the schema provides.
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 concrete question the tool answers ("Is a company hiring, for what, where and since when?") and then states both the input form (names, domains, job board URLs) and the output form (per-company summary plus individual job rows with links). This clearly separates it from siblings like company_check or company_accounts, which cover identity/account data rather than open roles.
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 case is stated at audience level ("sales prospecting, recruiting or market research") and the price line implies a cost tradeoff, but there is no explicit when-to-use-this-vs-sibling guidance, e.g. no mention of when to prefer company_check or sec_company_screen instead. The `summaryOnly` note partially covers the internal cheapest-path decision, which keeps this above a 2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_official_records_toolDescribe an official-records toolARead-onlyIdempotentInspect
Free, no key needed. One Bosco Labs tool's input schema, example input, example rows, output fields, price per row, caps and sources. Takes the tool name (eu_tenders or eu-tenders); an unknown name returns the closest names.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tool name, e.g. eu_tenders. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds real behavioral context beyond them: the call is free with no API key, and an unknown tool name does not fail but returns the closest matching names — a fallback behavior an agent must know before interpreting a response.
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?
Three tight sentences with no filler, and the free/no-key note is front-loaded. The core content sentence is a bare noun list rather than a claim about what the tool does, which makes the opening read a little telegraphically, but nothing is wasted.
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 return-value burden and discharges it by enumerating the seven kinds of metadata returned. What is missing is positioning relative to the plan/run siblings, which matters for a discovery-style tool in this cluster.
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 is documented as a tool name. The description goes further by showing accepted spellings ('eu_tenders or eu-tenders'), telling the agent name normalization is tolerated, and stating the recovery path for an unknown name — meaning the schema alone does not provide.
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 enumerates exactly what the tool returns for one named tool: input schema, example input, example rows, output fields, price per row, caps and sources. That is specific and resource-scoped, though it is written as a sentence fragment without an explicit verb and never contrasts itself with the sibling plan_official_records_query, which an agent could easily confuse with a discovery step.
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 only implied: 'Free, no key needed' plus a metadata payload suggests calling this to inspect a tool before using it. There is no explicit when-to-use, no mention of when to prefer plan_official_records_query or run_official_records_plan, and no statement of the ordering in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dod_contract_awardsPentagon / DoD Contract Awards API: winners, amounts, tickersARead-onlyIdempotentInspect
Get every US Department of Defense contract award of $7.5M or more, the same evening it is announced, plus the full history since FY2008: who won, how much, which service (Army, Navy, Air Force, DLA, Missile Defense Agency, ...), and the winner's US stock ticker with its SEC-reported shares outstanding. History rows add the parent company and NAICS/PSC codes. Switch the history to any other federal agency, or all of them, with one input. For defense-sector investors, government sales teams and AI agents.
Price: $0.005 per award.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | No | Latest action (signing) date, YYYY-MM-DD, e.g. "2019-12-31" | |
| source | No | "both" (default) = the Pentagon's same-evening contract list | both |
| tickers | No | Only awards matched to these US-listed tickers (NYSE, Nasdaq, CBOE), e.g. ["LMT", "KTOS", "AVAV"] | |
| agencies | No | Top-tier awarding agency names as USAspending spells them, e.g. ["Department of Defense"], ["Department of Homeland Security"], ["National Aeronautics and Space Administration"] | |
| dateFrom | No | Earliest action (signing) date, or announcement date for same-evening list rows, YYYY-MM-DD, e.g. "2019-01-01" | |
| pscCodes | No | Product and Service Codes, e.g. ["1410"] (guided missiles), ["R425"] (engineering support) | |
| maxResults | No | Maximum award rows, newest signing dates first, then largest amounts, e.g. 20 | |
| naicsCodes | No | NAICS industry codes, 2 to 6 digits, e.g. ["336414"] (guided missiles and space vehicles) or ["3364"] | |
| recipients | No | Winning company search terms, matched by USAspending against recipient and parent names, e.g. ["kratos", "huntington ingalls"] | |
| matchTickers | No | true (default) = match the recipient or its parent company to a US-listed ticker by exact cleaned name (SEC company list) and add the SEC-reported shares outstanding | |
| minAmountUsd | No | Minimum summed obligations per award and day, in USD, e.g. 1000000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the description earns credit for adding beyond them: same-evening freshness for the daily list, full history since FY2008, extra fields on history rows (parent company, NAICS/PSC), ticker matching against the SEC company list, and an explicit price of $0.005 per award. It stops short of covering rate limits, auth, or pagination behavior beyond the maxResults cap.
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 scope and payload are front-loaded in the first sentence, with the agency-switching caveat and pricing following logically. The audience-targeting sentence and the price line are somewhat promotional but carry real selection information, so little is wasted.
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 an 11-parameter, no-output-schema tool, the description covers the returned entities well enough (winner, amount, service, ticker, shares outstanding, plus parent company and NAICS/PSC on history rows) that an agent knows what to expect. The remaining gap is the lack of explicit differentiation from the closely related us_federal_awards sibling.
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 all 11 parameters already document themselves, which sets the baseline at 3. The description adds only marginal meaning, notably that the default scope is the $7.5M floor implied by minAmountUsd and that agencies can be repointed outside DoD; it does not explain how source values 'dailyList' vs 'history' vs 'both' differ in practice.
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 gives a specific verb and resource ('Get every US Department of Defense contract award of $7.5M or more') plus the payload ('who won, how much, which service ... and the winner's US stock ticker'). It does not name the obvious overlapping sibling, us_federal_awards, so the agent gets no explicit signal for how to tell them apart despite the description hinting the same endpoint can span other agencies.
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 audience framing ('For defense-sector investors, government sales teams and AI agents') and the note that the history can be switched to any other federal agency 'with one input'. There is no explicit when-to-use versus us_federal_awards, no when-not, and no prerequisites for invoking it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drug_safetyDrug Safety API: FDA label, FAERS, recalls, EMA statusARead-onlyIdempotentInspect
Answers "is this drug safe, and where does it stand with regulators?" in one call: the FDA boxed warning and indications, the most reported FAERS adverse reactions (counts), US recalls and shortages, and EU authorisation, EPAR link and EU shortages, for one drug name, with a source link for every section. Built for AI agents and people in pharma, health tech, pharmacy, compliance and investing.
Price: $0.004 per drug-query.
| Name | Required | Description | Default |
|---|---|---|---|
| drug | Yes | One drug: generic name, active ingredient or brand, e.g. "semaglutide", "metformin" or "Ozempic" | |
| mode | No | "dossier" (default) fills all five sections in one call (one `dossier` event) | dossier |
| maxItems | No | Cap on each list in the row: top FAERS reactions, recalls (newest first), US shortage records, EU products and EU shortages, e.g. 10 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-structured context: a source link for every section, per-row list caps, and an explicit price of $0.004 per drug-query. It stops short of describing behavior for unknown or ambiguous drug names.
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 capability is front-loaded in the first sentence, with cost placed last where it belongs. The clause "Built for AI agents and people in pharma, health tech, pharmacy, compliance and investing" is marketing padding that does not help an agent decide or invoke.
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 enumerate what comes back, and it does: five named sections, each with a source link, plus counts for FAERS reactions and ordering/newest-first conventions for lists. Combined with full schema coverage and read-only annotations, an agent has enough to call this 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% and all three parameters are documented in-schema, so baseline is 3. The description reinforces the single-drug-name input and the section grouping that mode selects, but adds no semantics for the non-dossier mode values or for how maxItems interacts with per-section caps beyond what the schema states.
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 concrete capability with named sections: FDA boxed warning and indications, top FAERS adverse reactions with counts, US recalls and shortages, EU authorisation/EPAR and EU shortages, for a single drug name. That is far more specific than the title alone. It does not, however, distinguish itself from the sibling product_recalls, which plausibly overlaps on the recalls portion.
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 "in one call" and the default dossier mode filling all five sections, which suggests using this tool for a combined safety/regulatory snapshot. There is no explicit statement of when to prefer it over product_recalls or when a narrower single-section call is appropriate, and no stated prerequisites or failure conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutch_address_lookupDutch Address Lookup API: BAG postcode, geocode & building dataARead-onlyIdempotentInspect
Checks and geocodes Dutch addresses against the BAG, the official Dutch register of addresses and buildings (Kadaster, served by PDOK). Each address comes back normalised with its postcode, BAG ids, WGS84 and RD coordinates, and building details: construction year, use, floor area, status and number of units. Built for AI agents doing real estate, logistics, KYC/KYB, insurance or local-business tasks, and for people cleaning address lists.
Price: $0.002 per address.
| Name | Required | Description | Default |
|---|---|---|---|
| bagIds | No | 16-digit BAG identifiers: nummeraanduiding | |
| include | No | Which sections to fill: any of "address" (street, postcode, city, municipality, province), "building" (construction year, use purposes, floor area, status, units in the building), "coordinates" | |
| postcode | No | A Dutch postcode, 4 digits + 2 letters, e.g. "1012JS" or "1012 JS" | |
| addresses | No | Dutch addresses to check and geocode, one per line, as people write them: street + house number (+ letter or addition) + city, and/or postcode + house number | |
| houseNumber | No | House number within `postcode`, e.g. 1 | |
| houseNumberTo | No | Last house number of a range starting at houseNumber, inclusive, e.g. 20 for 1-20 | |
| houseNumberAddition | No | House letter and/or addition for a single houseNumber, e.g. "B" (5B), "1" (18-1), "H" (8-H), "A2" (1A-2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely non-derivable context: the upstream register and its operator, what normalization the response performs, and a per-address price of $0.002, which is important cost information before a 50-item batch call. It stops short of disclosing no-match handling or rate limits.
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 operation, then return shape, then audience, then price — a sensible order with no wasted sentences. The 'Built for AI agents doing real estate, logistics, KYC/KYB…' clause is slightly promotional, but it does carry use-case signal.
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 a fair job sketching the response, and with zero required parameters it should explain what happens when none are supplied and how the optional inputs combine. Those calling-mode and error-behavior gaps are the main missing pieces for a 7-parameter, multi-mode lookup.
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 all seven parameters are individually documented there, so the baseline is 3. The description corroborates the `include` sections by listing the same return facets (address, building, coordinates), but it adds nothing about the mutual exclusivity or precedence of `addresses` vs `postcode`/`houseNumber` vs `bagIds` — the one semantic point the schema leaves ambiguous.
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 uses a specific verb pair ('checks and geocodes') on a specific resource ('Dutch addresses against the BAG'), names the authoritative source (Kadaster/PDOK), and enumerates the return payload (postcode, BAG ids, WGS84/RD coordinates, building attributes). No sibling tool covers Dutch addresses, so the agent can identify this uniquely without consulting 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?
It gives audience/use-case context (real estate, logistics, KYC/KYB, insurance, address-list cleaning) but never frames this as a when-to-use against alternatives and never states how to choose between the three input modes (batch `addresses`, `postcode`+`houseNumber`(+range), or `bagIds`). Usage is implied rather than instructed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutch_case_lawDutch Case Law API (Rechtspraak): ECLI lookup, uitsprakenARead-onlyIdempotentInspect
Look up Dutch court decisions (uitspraken) by ECLI, or search them by court, legal area, date and keywords: court, decision and publication dates, case numbers, legal areas, procedure, the court's own summary (inhoudsindicatie), appeal / cassation / Advocate-General relations, referenced laws, and optionally the full text. Built for AI agents doing legal and compliance research, and for people who want Rechtspraak data as clean JSON.
Price: $0.005 per decision.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | No | One or more Dutch ECLIs, separated by commas or spaces, e.g. "ECLI:NL:HR:2024:123" or "ECLI:NL:HR:2024:123, ECLI:NL:RVS:2024:1000" (max 100) | |
| query | No | Words to find in the decision's title and summary (inhoudsindicatie), case-insensitive | |
| courts | No | Court codes as used in the ECLI | |
| dateTo | No | Latest decision date, inclusive, YYYY-MM-DD, e.g. "2024-12-31" | |
| dateFrom | No | Earliest decision date (uitspraakdatum), YYYY-MM-DD, e.g. "2024-01-01" | |
| legalAreas | No | Rechtsgebied names | |
| maxResults | No | Most decisions to return from a search, most recently published or updated first, e.g. 20 (default) | |
| includeText | No | true = add the full decision as plain text (section headings as '## ', numbered paragraphs kept), cut at maxTextChars | |
| documentType | No | "uitspraak" = court decisions only, "conclusie" = opinions of the Advocate-General at the Hoge Raad only | |
| maxTextChars | No | With includeText: cap on the text per decision in characters, e.g. 20000 (default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context the annotations cannot carry: a per-decision price ($0.005 per `decision`), which matters for how aggressively an agent sets maxResults, plus the fact that includeText truncates text rather than returning it whole. It does not cover error/empty-result behavior or whether search results include total counts.
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?
Two compact sentences plus a one-line price note; the primary capability is front-loaded and the audience note is clearly secondary. The long mid-sentence enumeration of retrievable fields is dense but each item is informative rather than 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 ten optional parameters and no output schema, the description usefully enumerates what a record contains (court, dates, case numbers, legal area, procedure, inhoudsindicatie, appeal/cassation/AG relations, referenced laws, optional full text), compensating for the absent output schema. What remains unaddressed is outcome behavior — empty result sets, pagination limits beyond the 25-result cap, and cost implications of includeText across many records.
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 every parameter in detail, including ECLI multiplicity, date formats, defaults and the includeText/maxTextChars interaction. The description adds little parameter-level meaning beyond restating the filter dimensions, although it does clarify that the keyword search targets title plus inhoudsindicatie. 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 opens with a specific verb+resource pair ("Look up Dutch court decisions (uitspraken) by ECLI") and immediately states the second mode ("search them by court, legal area, date and keywords"). The explicit Dutch/Rechtspraak jurisdiction and the ECLI identifier distinguish it from siblings like eu_law_lookup and national_law_lookup without needing to name them.
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 clearly establishes the two usage modes — direct ECLI lookup versus filtered search — and enumerates the searchable dimensions, so an agent knows which parameters select which path. It stops short of naming alternatives or stating when to prefer a sibling (e.g. eu_law_lookup for EU instruments, national_law_lookup for non-Dutch jurisdictions), which is the main gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esef_annual_reportsEU Annual Reports API (ESEF): XBRL financial statementsARead-onlyIdempotentInspect
Get normalized key financials from the official ESEF annual reports of European listed companies, by LEI, company name, country or fiscal year: revenue, EBIT, EBITDA, net income, EPS, dividends, balance sheet and cash flows, plus margins, return on equity and revenue growth versus the prior year. Every number comes with the exact XBRL fact it was taken from and a link to the annual report viewer, so you can audit any value in one click. For equity analysts, finance apps and AI agents that need comparable numbers for European listed companies.
Price: $0.05 per filing-processed.
| Name | Required | Description | Default |
|---|---|---|---|
| leis | No | Legal Entity Identifiers (20 letters/digits), e.g. ["724500Y6DUVHQD6OXN27"] for ASML: the most precise lookup, any country | |
| periodTo | No | Fiscal year ending on or before this date, YYYY-MM-DD, e.g. "2024-12-31" | |
| countries | No | Filing countries as ISO 3166 alpha-2 codes, e.g. ["NL", "BE", "FR"]; also SE, DK, FI, NO, IT, ES, GB and others | |
| maxFilings | No | Maximum annual reports, newest fiscal period first, e.g. 1 for a company's latest report | |
| periodFrom | No | Fiscal year ending on or after this date, YYYY-MM-DD, e.g. "2024-01-01" | |
| companyName | No | Case-insensitive part of the registered company name, e.g. "heineken" or "lvmh"; can match several companies, so check `company_name` in the output | |
| includeRawFacts | No | true = also output every tagged XBRL fact of each report as its own row (record_type = "fact"), charged per fact row |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-schema behavior: pricing at $0.05 per 'filing-processed', per-fact-row charging for includeRawFacts, and provenance (every number carries the exact XBRL fact plus a viewer link), which tells the agent results are auditable. It does not disclose result-size or truncation behavior beyond the maxFilings cap.
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 verb and resource, then metrics, then provenance, then pricing – a sensible priority order. Some filler is present ('so you can audit any value in one click', the audience sentence) that restates rather than informs, but nothing is seriously bloated.
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?
A read-only, all-optional-parameter query tool with full schema coverage and no output schema. The description compensates for the missing output schema by naming the returned metrics and the fact/record_type structure exposed via includeRawFacts, and it covers pricing. Only gap is fetch limits and result volume, which are partially handled by the maxFilings schema field.
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?
With 100% schema description coverage the baseline is 3, but the description adds cost semantics the schema lacks: includeRawFacts produces one row per tagged fact and is 'charged per fact row', which materially affects how an agent should set that flag. It also reinforces the LEI-first lookup strategy ('the most precise lookup, any country') that the schema only hints at.
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 ('Get normalized key financials from the official ESEF annual reports of European listed companies') and enumerates the lookup keys (LEI, company name, country, fiscal year) plus the metrics returned (revenue, EBIT, EBITDA, net income, EPS, margins, ROE, growth). The geographic scope ('European listed companies') implicitly separates it from the sibling sec_company_financials, so an agent can route without opening either 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?
Usage context is implied by the audience line ('equity analysts, finance apps and AI agents that need comparable numbers for European listed companies') and by the statement that LEI is 'the most precise lookup, any country', which is really schema text. There is no explicit when-not guidance and no named alternative such as sec_company_financials for US issuers or company_accounts for national filings, so the routing decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eu_law_lookupEU Law Lookup API (EUR-Lex): article text, in force, amendmentsARead-onlyIdempotentInspect
One call answers "what does Article 50 of the AI Act say today, is it in force, and what amended it?": the article as plain text from the current consolidated version (or the one in force on any date), the act's in-force status and dates, and the acts that amend, correct or repeal it. A second mode lists new acts in the Official Journal L series. Built for AI agents doing legal and compliance work, and for people who want a sourced answer without SPARQL.
Price: $0.005 per act-lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | YYYY-MM-DD, e.g. "2025-01-01": return the consolidated version that applied on that date | |
| query | No | The EU act to look up: a short name ("GDPR", "AI Act", "DSA", "NIS2", "DORA", "MiCA", "CSRD"...), a citation ("Regulation | |
| article | No | Article number, optionally with a paragraph: "5", "6(1)", "4a"; several separated by commas ("5, 6(1)", up to 10) | |
| include | No | Any of "metadata" (always on), "amendments" (amended_by, corrected_by, repealed_by, amends, repeals), "citing" (acts and judgments that cite this act, newest first) and "text" | |
| ojSince | No | Switches to Official Journal mode: list acts published in the OJ L series from this date (YYYY-MM-DD, e.g. "2026-11-03") until today, newest first, at most 31 days back | |
| keywords | No | OJ mode only: comma-separated words or phrases; an act is kept when its title (in the chosen language) contains any of them, case-insensitive, e.g. "artificial intelligence, data" | |
| language | No | EU language code of the text and titles: BG, CS, DA, DE, EL, EN, ES, ET, FI, FR, GA, HR, HU, IT, LT, LV, MT, NL, PL, PT, RO, SK, SL, SV | EN |
| maxCiting | No | With include "citing": how many citing acts to list, newest first, e.g. 20 (default) | |
| maxResults | No | OJ mode only: the most acts to return, newest first, e.g. 50 (default) | |
| maxTextChars | No | Cap on article_text and text, in characters, e.g. 30000 (default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds two pieces of real behavioral context beyond that: the answer is drawn from the consolidated version in force (or as of a given date), and the call costs $0.005 per act-lookup — cost is material for an agent deciding whether to call. It stops short of describing response shape, truncation behavior, or failure modes when an act cannot be resolved.
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 concrete question the tool answers, then the second mode, then audience and price — a sensible ordering with little waste. The 'built for AI agents doing legal and compliance work... without SPARQL' sentence is partly positioning filler, though it does signal the tool replaces raw SPARQL access.
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 10-parameter tool with no output schema, the description covers both modes, the consolidated-version behavior, and cost, while the schema fully documents every parameter. The main gap is that with no output schema, an agent gets no sense of the response structure (how article text, in-force dates and amendment lists are composed) or how maxTextChars truncation manifests.
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 every parameter already carries its own explanation and the baseline is 3. The description's contribution is framing rather than parameter detail — it ties article, asOf, amendments and the OJ mode into a single narrative, but adds no syntax, defaults, or edge-case meaning the schema does not already state.
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 verb-and-resource pair (retrieve article text, in-force status and amendments for an EU act from EUR-Lex) and spells out a second, distinct mode (Official Journal L series listing). It is unmistakably an EU-law tool, which implicitly separates it from national_law_lookup, but it never names or contrasts with that sibling explicitly.
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 two operating modes are described clearly enough that an agent can infer that supplying ojSince switches to OJ listing, and the framing question ('what does Article 50 of the AI Act say today...') gives a concrete use case. There is, however, no explicit when-not-to-use guidance and no routing advice versus national_law_lookup or us_federal_rules for cross-jurisdiction questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eu_rates_inflationECB Rates & Euro Inflation API: policy rates, FX, €STR, HICPARead-onlyIdempotentInspect
Ask for euro-area rates by plain name and get the latest value, when it last changed, the change and the recent history. ECB policy rates, euro reference exchange rates, €STR, euro-area and national government bond yields, and Eurostat HICP inflation for every EU country, with no SDMX series keys to work out. Built for AI agents and for anyone who needs a quick, sourced number.
Price: $0.002 per series.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | How many of the newest observations to return per series, e.g. 12 (the last 12 months of a monthly series) | |
| mode | No | "series" (default) fetches the series above | series |
| dateTo | No | Last date of the window, YYYY-MM-DD, e.g. "2026-03-15" | |
| series | No | Which series to fetch, by plain name (case-insensitive), up to 20 per run, e.g. ["ecb_deposit_rate", "eur_fx:USD", "hicp:EA"] | |
| dateFrom | No | First date of the window, YYYY-MM-DD, e.g. "2026-01-01" | |
| frequency | No | Only where the source has it: eur_fx daily (default), monthly or annual averages; policy rates daily (rate on every day) instead of the default one-row-per-change | |
| rawSeriesKey | No | Optional full ECB Data Portal series keys (dataflow + key, every dimension filled, no wildcards), e.g. ["EXR.M.CHF.EUR.SP00.E"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it returns latest value plus last-change date plus history, it normalizes plain names instead of SDMX keys, it caps at 20 series, and it states the price model ($0.002 per series). It does not mention rate limits, error behavior for unknown series names, or what an empty result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads what you get back, the second enumerates coverage, and the price line is short and actionable. The phrase about being built for AI agents and anyone needing a quick sourced number is mild marketing filler that does not help an agent decide anything, but the rest earns its space.
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 seven optional parameters and no output schema, the description does carry the burden of describing return values, and it does so concretely (latest value, when it last changed, the change, recent history). The notable gap is that `catalogue` mode is effectively undocumented in both schema and description, so an agent has no idea what discovery output it would get.
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 all seven parameters including date windows, `last`, `frequency`, and `rawSeriesKey` are already documented in the schema. The description reinforces the plain-name convention and the no-SDMX-keys benefit, and shows inline examples like `ecb_deposit_rate` and `eur_fx:USD`. It adds little beyond the schema and never explains the `catalogue` mode value, which the schema also leaves undocumented.
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 verb and resource: return the latest value, last-change date, change, and recent history for euro-area rates. It enumerates the covered domains (ECB policy rates, euro reference FX, 60STR, sovereign yields, Eurostat HICP) and states the key differentiator, no SDMX series keys required. No sibling tool covers interest rates or inflation, so an agent can place it accurately.
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 gives clear framing (ask by plain name, quick sourced number, 20 series per run, cost per series) but never states when to prefer it over alternatives or when not to call it. The schema exposes a `catalogue` mode and a `rawSeriesKey` fallback, yet the description says nothing about when an agent should use catalogue discovery or escape to raw keys, which are the real routing decisions for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eu_tendersEU Public Tenders & Contract Awards API (TED procurement)ARead-onlyIdempotentInspect
Get European public tenders and contract awards as clean, predictable JSON from TED, filtered by keyword, buyer country, CPV code, notice type, date and value: open calls for tenders with their deadline and estimated value, award notices with the winning companies and the awarded amount, and prior information notices about planned purchases. One row per notice, the same field names for every country and notice form. For bid teams, tender-alert services, market researchers and AI agents.
Price: $0.002 per notice.
| Name | Required | Description | Default |
|---|---|---|---|
| cpvCodes | No | Common Procurement Vocabulary (CPV) code prefixes as digit strings; a prefix matches every code below it | |
| keywords | No | Full-text search over the whole notice, in any language; a notice matches when it contains all words, e.g. "cloud hosting" | |
| countries | No | Buyer countries as ISO 3166 alpha-2 (DE, FR, NL, PL, ...) or alpha-3 (DEU) codes, e.g. ["DE", "NL"] | |
| maxResults | No | Maximum notices, newest first, e.g. 100 | |
| minValueEur | No | Minimum total notice value in EUR, e.g. 1000000 (estimated value for calls, awarded value for awards) | |
| noticeTypes | No | Kinds of notices: contract_notice (open call for tenders), contract_award (who won, for how much), prior_information, direct_award_preannouncement, contract_modification, market_consultation | |
| publishedTo | No | Latest publication date, YYYY-MM-DD | |
| publishedFrom | No | Earliest publication date, YYYY-MM-DD, e.g. "2026-10-01" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral facts: the output is one row per notice with stable field names across countries and notice forms, and pricing is $0.002 per notice — a cost signal unavailable elsewhere and relevant to result sizing.
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?
Three sentences plus a price line, front-loaded with what the tool returns. Some phrasing is promotional ('clean, predictable JSON', the audience list) and could be trimmed, but nothing misleads or buries the essential 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?
With eight optional parameters and no output schema, the description carries the burden of explaining return shape, and it does so for each notice type. Gaps remain minor: it does not say what happens when no filters are supplied or how results are ordered beyond the schema's 'newest first' on maxResults.
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 schema already documents all eight parameters, setting a baseline of 3. The description still adds interpretive value by tying each notice type to the fields it returns (calls carry deadlines and estimated value; awards carry winners and awarded amount), which helps an agent choose noticeTypes and understand what minValueEur compares against.
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 gives a concrete verb and resource ('Get European public tenders and contract awards ... from TED') and enumerates the three notice families with the key fields each carries (deadlines, estimated value, winning companies, awarded amount). The 'European'/'TED' framing implicitly separates it from US-focused siblings like us_federal_awards and dod_contract_awards, though no sibling is named.
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 when-to-use/when-not guidance and no mention of alternatives among the 27 sibling tools. The audience sentence ('For bid teams, tender-alert services, market researchers and AI agents') implies a context but tells an agent nothing about when to pick this tool over, say, us_federal_awards or company_check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
identifier_resolverISIN, LEI, CIK, FIGI & Ticker Resolver API (crosswalk)ARead-onlyIdempotentInspect
One identifier in, the whole crosswalk out: give an ISIN, LEI, SEC CIK, ticker, FIGI or company name and get the issuer's legal name, LEI, CIK, tickers per exchange, ISINs, FIGIs, CFI code and the EU trading venues, each value with its source URL. Built for AI agents and people who join datasets keyed by different identifiers (KYC, portfolio data, filings research).
Price: $0.002 per resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| idType | No | What the identifier is | auto |
| exchange | No | Only for a ticker outside the US: a Bloomberg exchange code ("LN" London, "GR" Germany, "NA" Amsterdam, "FP" Paris, "JT" Tokyo, "SW" Swiss) or a 4-letter MIC ("XLON", "XAMS") | |
| identifier | Yes | ONE identifier of a security or company: an ISIN ("US0378331005"), an LEI ("HWUPKR0MPOU8FGXBT394"), an SEC CIK ("320193"), a ticker |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new context: the shape of the returned records (each value with its source URL) and a per-call price of $0.002, which agents need for cost planning. It says nothing about behavior on ambiguous names or on identifiers that resolve to multiple issuers, which is the main failure mode for a crosswalk.
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 input/output contract is front-loaded in the first clause, followed by audience/use case and then pricing on its own line so cost is easy to find. Slightly dense in the middle (the long output enumeration), but no sentence is redundant.
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 describing returns and does so concretely, including source URLs per value. Combined with full schema coverage on inputs and annotations covering safety, an agent has enough to call it correctly; only the ambiguity/error path and 'auto' detection behavior are left open.
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 schema itself documents idType, exchange (with Bloomberg and MIC codes) and the identifier formats in detail, so the description only needs to reinforce. It does confirm that exactly one identifier is expected ("One identifier in") and enumerates the accepted identifier kinds, but it never explains the 'auto' default in idType or how detection works. Baseline 3 applies.
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 verb-and-resource pair: it takes one of six identifier types (ISIN, LEI, CIK, ticker, FIGI, name) and returns the full crosswalk (legal name, LEI, CIK, per-exchange tickers, ISINs, FIGIs, CFI, EU venues). That is clearly distinguishable from every sibling, which are domain tools (filings, sanctions, tenders), not identifier joins.
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 names concrete situations where the tool applies (KYC, portfolio data, filings research, joining datasets keyed differently) and implies it is the entry point before domain-specific siblings. It stops short of explicit routing, e.g. no instruction on when to prefer sec_company_screen to discover a CIK first, or what to do when a name is ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
national_law_lookupUK & Dutch Law Lookup API: article text by date, in forceARead-onlyIdempotentInspect
One call answers "what does section 172 of the Companies Act 2006 say?" or "wat zegt artikel 7:658 BW?": the section or article as plain text from the official consolidated version in force today (or on any date), whether it is in force, and what changed it. Built for AI agents doing legal and compliance work, and for people who want a sourced answer without XML.
Price: $0.005 per act-lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | YYYY-MM-DD, e.g. "2025-01-01": return the text as in force on that date (UK point-in-time version; NL consolidated version, newest correction) | |
| query | Yes | The act, optionally with the article | |
| article | No | Section, regulation or article number, optionally with a subsection or lid: "172", "172(1)", "7:658", "13 lid 2", "8:1"; several separated by commas (up to 5, e.g. "171, 172") | |
| language | No | Optional, "EN" or "NL" | |
| jurisdiction | No | "UK" or "NL" | |
| maxTextChars | No | Cap on article_text, in characters, e.g. 30000 (default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the description is not required to establish safety. It still adds real behavioral context beyond them: the text comes from the official consolidated version, reflects the version in force today or on any asOf date, and includes in-force status and amendment provenance. It also discloses a per-call price ($0.005 per act-lookup), which matters for an agent budgeting calls; only failure modes for unknown or ambiguous articles are left unstated.
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 opening clause is well front-loaded with two concrete example questions that immediately anchor the tool. The second sentence ("Built for AI agents doing legal and compliance work, and for people who want a sourced answer without XML") is promotional and largely redundant, though the pricing line that follows carries genuine decision value. Tightening would remove roughly a quarter of the text with no loss.
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 six parameters, no output schema, and only one required field, the definition covers the essentials: what is returned (article text), in what state (in force on a date, with amendment history), and at what cost. Because no output schema exists, the description's sketch of the response contents is genuinely load-bearing. Missing only edge-case behavior, such as what happens when an article reference is ambiguous or not found.
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 each of the six parameters already carries examples and patterns, so the schema does the heavy lifting. The description reinforces the asOf point-in-time semantics ("today (or on any date)") but adds no syntax, default, or constraint information beyond the schema. A 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 states a concrete verb and resource: return the section or article text from the official consolidated version in force on a given date, plus in-force status and amendment history. The worked examples ("section 172 of the Companies Act 2006", "artikel 7:658 BW") make the UK/NL statute scope unmistakable. It does not name the near siblings (eu_law_lookup, dutch_case_law), so the agent must infer the boundary itself.
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 conveyed only through example questions about statutes, which implies this is the tool for citing legislation text. There is no explicit when-to-use versus eu_law_lookup (EU instruments) or dutch_case_law (case law), and no stated exclusions or prerequisites. An agent can guess the routing, but the definition does not do the routing for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_vulnsPackage Vulnerability Check API: CVEs, CISA KEV, safe upgradeARead-onlyIdempotentInspect
Is this package version vulnerable, is any of it exploited in the wild, and which version is safe to upgrade to? One call answers it for npm, PyPI, Maven, Go, crates.io, NuGet, RubyGems and Packagist packages, or for one CVE/GHSA id, from OSV.dev and the CISA KEV catalog (a CVE lookup also shows NVD's record). Built for coding agents and for developers who want a sourced answer instead of a scanner setup.
Price: $0.005 per package-check.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Package name exactly as in its registry, e.g. "lodash", "requests", "org.apache.logging.log4j:log4j-core" (Maven = group:artifact) or "github.com/gin-gonic/gin" (Go module path) | |
| version | No | Exact version to check, e.g. "4.17.15" (Go: "v1.9.0") | |
| ecosystem | No | Package registry of `name`, e.g. "npm" | |
| vulnerabilityId | No | One vulnerability id instead of a package, e.g. "CVE-2021-44228" or "GHSA-jfh8-c2jp-5v3q" (PYSEC-, GO-, RUSTSEC-, MAL- and OSV- ids work too) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the bar is lower, yet the description adds real context: the upstream data sources, that CVE lookups also surface NVD's record, and the per-call price of $0.005. It does not cover latency, caching or how ambiguous package/version input is handled, which is the main 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?
The core question and scope are front-loaded in the first sentence, followed by sources and the pricing note. The sentence about being 'built for coding agents and for developers who want a sourced answer instead of a scanner setup' is somewhat promotional but still conveys positioning; overall little waste.
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 tells the agent what answers come back (vulnerability status, in-the-wild exploitation, recommended safe version) and which catalogs back them. Only error or no-match behavior is left unstated, which is minor for a read-only lookup.
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 already gives examples including Maven group:artifact and Go module paths, so the baseline is 3. The description goes beyond it by enumerating the accepted ecosystem names (npm, PyPI, Maven, Go, crates.io, NuGet, RubyGems, Packagist) and by framing name/version/ecosystem as mutually exclusive with vulnerabilityId.
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 concrete question set (is it vulnerable, is it exploited in the wild, what is the safe upgrade) and names the resource, the sources (OSV.dev, CISA KEV, NVD) and the supported ecosystems. It also distinguishes the two modes, package check vs single CVE/GHSA id, so an agent knows exactly what the call does 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?
The description makes the two invocation modes explicit ('One call answers it for npm, ... or for one CVE/GHSA id') and positions itself against the alternative of setting up a scanner. It stops short of explicit when-not guidance or stating prerequisites such as which ecosystems need a version supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_official_records_queryPlan an official-records queryARead-onlyIdempotentInspect
Free, no key needed. Turns a question in plain words into the exact typed Bosco Labs calls that answer it: tool, input, why, and the maximum price of each step, plus what is not covered. Pass the user's question verbatim AND the entities you extracted from it (company_names, tickers, identifiers, countries, dates, law references...): the planner trusts your entities over its own parsing and puts them in the right input fields. The plan echoes them in entities_used and lists in missing what to pass for a better plan. Deterministic (rules and examples, no LLM): the same question and entities on the same day give the same plan_id. Run it with run_official_records_plan (paid, max_usd) or call the listed tools directly. Low confidence returns the top 3 candidate tools instead.
| Name | Required | Description | Default |
|---|---|---|---|
| entities | No | What you (the calling agent) already extracted from the user's question. Extract these from the question yourself; the planner trusts them over its own parsing and puts them in the right input fields. The plan echoes them in `entities_used` and names what is still missing in `missing`, so you can re-call with more. | |
| question | Yes | The user's question, verbatim, e.g. "Is Rosneft on the EU sanctions list?" (English, Dutch, German or French). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations it discloses cost ('Free, no key needed'), determinism semantics ('same question and entities on the same day give the same plan_id'), the echo behaviour in `entities_used`, the `missing` feedback channel, and the degraded-mode behaviour of returning the top 3 candidate tools on low confidence — all behaviour an agent cannot infer from 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 cost/free signal and the core transformation, and every clause carries information. It is a single dense run-on paragraph, though, so the entity-extraction instruction and the execution guidance are harder to scan than a short structured layout would allow.
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 characterizes the return (plan_id, per-step tool/input/why/max price, entities_used, missing) and the low-confidence variant, and it covers cost and the handoff to execution. An agent can decide whether to call it, what to pass, and what it will get back.
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; the description still adds real semantics by stating the trust hierarchy (planner trusts supplied entities over its own parsing) and by insisting the question be passed verbatim. It does not add per-field examples beyond the schema, so it stops short of 5.
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 transformation ('turns a question in plain words into the exact typed Bosco Labs calls'), enumerates what each planned step contains (tool, input, why, max price, gaps), and clearly separates itself from the sibling run_official_records_plan and from calling the listed tools directly.
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 gives explicit guidance on the two ways to act on a plan ('run it with run_official_records_plan (paid, max_usd) or call the listed tools directly') and on the re-call loop via `missing`. What is missing is a stated when-not-to-use case (e.g. when a single known tool suffices and planning is overhead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_recallsProduct Recall Check API: CPSC, NHTSA, FDA & EU Safety GateARead-onlyIdempotentInspect
Answers "is this product recalled anywhere, and for what hazard?" for a product name, brand, model, UPC/EAN barcode or VIN: one row per query with recalled yes/no, each recall's date, hazard, remedy and official link, from US CPSC, NHTSA, FDA enforcement reports and the EU Safety Gate. Built for AI agents in e-commerce, resale, procurement and product compliance, and for people who want one sourced answer instead of four searches.
Price: $0.005 per product-check.
| Name | Required | Description | Default |
|---|---|---|---|
| euWeeks | No | How many of the latest weekly EU Safety Gate reports to search, e.g. 52 (default, about one year) | |
| queries | Yes | What to check, one per entry: a product name, brand or model ("Peloton Bike+"), a UPC/EAN barcode of 8-14 digits ("3418178586009"), a 17-character VIN | |
| sources | No | Which sources to check, any of "cpsc", "nhtsa", "fda_food", "fda_drug", "fda_device", "eu_safety_gate", e.g. ["cpsc", "eu_safety_gate"] | |
| maxMatches | No | How many recalls to list per query, newest first, e.g. 10 (default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely new behavior: which registries are queried, that results aggregate to one row per query, and the per-call cost ($0.005 per product-check) — cost disclosure is real value an agent cannot get from annotations. It omits rate limits and what happens when a source is unreachable.
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 user-facing question, then sources, then audience, then price — a sensible order with little redundancy. A few marketing phrases ("Built for AI agents... and for people who want...") do not earn their place but are brief enough not to obscure the content.
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, and the description compensates by stating the return shape: yes/no per query, recall date, hazard, remedy and official link. Combined with the source list and pricing, an agent has enough to call and interpret it; only failure/degradation behavior and result-ordering beyond maxMatches' "newest first" are absent.
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 explains euWeeks, queries, sources and maxMatches with examples. The description only restates the accepted identifier formats at a high level, adding nothing about formatting edge cases or how source selection affects results. 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 opens with the exact question the tool answers ("is this product recalled anywhere, and for what hazard?") and names the accepted identifier types (name, brand, model, UPC/EAN, VIN) plus the four source registries. No sibling tool covers recalls, and the response shape (one row per query) is stated, so an agent can identify the tool at a glance.
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 gives implied context through audience framing (e-commerce, resale, procurement, compliance) and the phrase "one sourced answer instead of four searches," which hints at consolidation versus separate lookups. However, it never states when NOT to use it or names an alternative (e.g. identifier_resolver for ambiguous barcodes), so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_official_records_planRun an official-records planARead-onlyInspect
Runs a plan from plan_official_records_query (its plan_id) or explicit steps, all steps in parallel, under a hard max_usd: if the worst case could exceed it, nothing runs. Each step is charged to the caller's key exactly like a direct tool call (failed steps are free). Returns one section per step (via_tool, via_input, rows with source_url), a receipt and the citations.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | Explicit steps instead of a plan_id: [{tool, input}], tool a name from GET /v1/tools (eu-tenders or eu_tenders), input that tool's input. | |
| max_usd | Yes | Hard cap in USD: refused, nothing run, if the steps' worst case could cost more. | |
| plan_id | No | The plan_id plan_official_records_query returned (or pass steps). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: parallel execution, hard max_usd refusal semantics ('nothing runs'), per-key billing identical to a direct call, failed steps being free, and the shape of the returned sections/receipt/citations. This is exactly the pricing and failure behavior an agent needs before committing.
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?
Two dense sentences that are front-loaded with the core action and pack the billing, cap, and return details without filler. The clause stacking in the first sentence makes it slightly harder to parse than it needs to be, but nothing is wasted.
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, and the description compensates by naming what comes back (per-step sections with via_tool, via_input, rows with source_url, plus a receipt and citations). For a paid multi-step executor, the cost, failure, and output picture is 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 coverage is 100%, so the baseline is 3, but the description adds real meaning: plan_id's origin in plan_official_records_query, the all-or-nothing nature of max_usd, and the fact that each step is billed like a direct call. It adds value over the schema's own field descriptions rather than restating them.
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?
Names a specific verb+resource ('Runs a plan') and explicitly ties the input to the sibling planner ('a plan from plan_official_records_query (its plan_id) or explicit steps'), so the agent can distinguish this executor from the planning tool without opening either 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?
Gives two clear entry paths (plan_id from the planner, or explicit steps) and an operating constraint (all steps in parallel under a hard cap), which tells the agent when this tool is the right call. It stops short of saying when to prefer one path over the other or what to do when the cap refuses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sanctions_screeningSanctions Screening API: OFAC, UK, EU & US export listsARead-onlyIdempotentInspect
Answers "is this company, vessel or person sanctioned?" for one or many names, against the official OFAC SDN and non-SDN lists, the US Consolidated Screening List (Commerce Entity List, Denied Persons, State lists), the UK Sanctions List and the EU financial sanctions list. Every answer says which lists were checked and how current they were, and every match links to its official source. Built for AI agents doing KYB, compliance or procurement checks, and for people who need a quick, sourced screen. It also checks crypto wallet addresses exactly against the addresses OFAC lists (XBT, ETH, USDT, TRX and more), e.g. before an agent pays.
Price: $0.01 per name-screened.
| Name | Required | Description | Default |
|---|---|---|---|
| lists | No | Which lists to check, any of "ofac_sdn", "ofac_consolidated", "us_csl", "uk", "eu", e.g. ["ofac_sdn", "uk"] | |
| names | No | Company, vessel or person names to check, one per entry, as plain text, e.g. ["Sovcomflot", "Novo Nordisk A/S"] | |
| country | No | Country of the party you are screening, as an ISO 3166 alpha-2 code or English name, e.g. "RU" or "Russia" | |
| minScore | No | Lowest similarity score (0-100) that counts as a match, e.g. 85 (default) | |
| addresses | No | Crypto wallet addresses to check, one per entry, e.g. ["0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9"] | |
| entityType | No | Only return listings of this type, e.g. "organization" | any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (read-only, idempotent, non-destructive, open-world), and the description adds genuinely new behavior: every response discloses which lists were consulted and their recency, every match links to its official source, and pricing is $0.01 per name screened. It does not state rate limits, batch behavior for the 50-item caps, or what an empty result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core question, then sources, then return-value behavior, then the wallet capability and price — a sensible order with no true filler. The "Built for AI agents doing KYB..." sentence is the softest part but still earns its place by naming target use cases.
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 correctly compensates by describing the return contract: lists checked, data currency, and source links per match. For a six-parameter screening tool with annotations already covering safety, the remaining gap (no mention of rate limits, empty-result semantics, or how minScore interacts with entityType) is modest.
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 all six parameters; the description adds only the nuance that wallet addresses are matched exactly (implying minScore similarity applies to names, not addresses). It says nothing extra about list selection, country scoping, or entityType beyond what the schema states, so the baseline 3 applies.
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 concrete question the tool answers ("is this company, vessel or person sanctioned?") and enumerates the exact sources checked: OFAC SDN/non-SDN, the US CSL (Commerce Entity List, Denied Persons, State), the UK Sanctions List and the EU financial sanctions list. It also names a second distinct capability (crypto wallet screening) so an agent can tell it apart from siblings like company_check or sec_company_screen.
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 clear usage contexts: KYB, compliance and procurement checks for agents, plus a specific pre-payment wallet check. What is missing is any explicit exclusion or routing advice relative to sibling tools (e.g. when to use company_check instead), so the agent must infer that sanctions screening is a distinct check rather than the starting point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_company_financialsSEC Company Financials API: income, balance sheet, cash flowARead-onlyIdempotentInspect
Get clean financial statements of any US-listed company from the SEC's own XBRL data: revenue, profit, EPS, balance sheet, cash flow, free cash flow and margins, per fiscal year or per quarter, by ticker or CIK. For analysts, finance apps and AI agents that need a company's numbers over 5-20 years without parsing filings. Every value cites the XBRL tag and the SEC filing it came from.
Price: $0.005 per company-period.
| Name | Required | Description | Default |
|---|---|---|---|
| ciks | No | SEC Central Index Keys as digits, leading zeros optional, e.g. ["320193"] for Apple | |
| years | No | How many of the latest fiscal years to return per company, e.g. 5 (5 rows annual, up to 20 rows quarterly; 2 with quarterly = the last 8 quarters) | |
| period | No | "annual" = one row per fiscal year (FY) | annual |
| metrics | No | Only these output fields, e.g. ["revenue", "net_income", "free_cash_flow", "operating_margin"] | |
| tickers | No | US tickers as listed by the SEC, e.g. ["AAPL", "MSFT"]; share classes with a dash or dot, e.g. "BRK-B" | |
| includeSources | No | true = each row has `sources` (per value: the XBRL tag and the SEC accession number it came from, plus how it was derived) and `filings` (form, filing date and URL of each filing cited) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds valuable context beyond annotations: pricing per company-period, per-value XBRL source citation, and filing provenance, which materially informs an agent's 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 description is front-loaded and efficient, with the core capability stated first and the pricing note isolated at the end. It avoids unnecessary repetition of schema details, though it could be slightly tighter.
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 data-retrieval tool with six optional parameters and no output schema, the description covers data source, coverage, metrics, periodicity, identifiers, pricing, and provenance. It is largely complete, though it does not describe pagination or exact row shape beyond the sources fields.
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 input schema has 100% description coverage, so the baseline is 3. The description reinforces key parameter concepts (ticker or CIK, annual or quarterly, 5-20 years) but does not add syntax or constraints beyond what the schema already documents.
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: 'Get clean financial statements of any US-listed company from the SEC's own XBRL data.' It enumerates the covered statement types and distinguishes the tool from parsing filings, making its purpose immediately clear.
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 gives a use case ('For analysts, finance apps and AI agents that need a company's numbers over 5-20 years without parsing filings') but does not explicitly name alternatives or exclusions versus siblings like sec_filings_feed or esef_annual_reports. Usage is implied rather than fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_company_screenSEC Company Screener API: filter all US filers by financialsARead-onlyIdempotentInspect
Screen every US company that files with the SEC by revenue, profit, margins, cash flow and balance sheet for one calendar year or quarter: "revenue over $10B and net margin above 20% in 2025", "top 20 by operating cash flow". For analysts, finance apps and AI agents. Every value cites the XBRL tag and the SEC filing it came from.
Price: $0.002 per screen-row.
| Name | Required | Description | Default |
|---|---|---|---|
| period | Yes | Calendar period in SEC frames format: "CY2025" = annual figures, "CY2025Q3" = 3-month quarter figures | |
| sortBy | No | Metric to rank by, e.g. "operating_cash_flow" | |
| filters | No | Conditions every company must meet, as a list of {metric, min, max} (either bound optional, both inclusive) | |
| metrics | No | More fields to show per company besides the sortBy and filter metrics, e.g. ["operating_cash_flow", "total_assets"] | |
| sortOrder | No | "desc" = largest first (top N), "asc" = smallest first (e.g. the lowest net margin) | desc |
| maxResults | No | Most companies to return (and charge for), e.g. 20 for a top 20 | |
| tickersOnly | No | true = skip companies without a ticker in the SEC's company_tickers.json (delisted companies, private issuers of public debt, subsidiaries) | |
| includeSources | No | true = each row has `sources`: per value the XBRL tag, the SEC accession number and the filing URL (or the formula for derived values) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and open-world. The description adds genuinely new behavior: per-row XBRL tag and SEC accession/URL citations, and a stated price of $0.002 per screen-row, which matters because maxResults is billed. It does not describe pagination or result ordering limits beyond the argument docs.
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?
Three short paragraphs: capability plus examples, audience, then provenance and price. Front-loaded with the screening verb, and no sentence is 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 eight parameters, no output schema and a per-row charge, the description does the right extra work by disclosing citation behavior and pricing. Only gaps are return cardinality/pagination and any note that results are limited to filers with XBRL data for the given period.
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?
Even though schema coverage is 100% (baseline 3), the description adds concrete meaning on top: it maps natural-language screening intent onto the filter/sortBy/metrics triple ('revenue over $10B and net margin above 20%', 'top 20'). It also frames the crop of metric names as revenue, profit, margins, cash flow and balance sheet, so the agent understands the enum's scope without scanning all 36 values.
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 ('Screen every US company that files with the SEC') scoped to financial metrics, with two concrete query examples. It implies bulk screening versus the single-company sibling sec_company_financials but never names or contrasts that sibling explicitly.
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 example queries ('revenue over $10B and net margin above 20% in 2025', 'top 20 by operating cash flow') and the audience line ('analysts, finance apps and AI agents') imply when the tool fits. There is no explicit when-not guidance or pointer to alternatives such as sec_company_financials for one company or sec_filings_feed for filings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_filings_feedSEC EDGAR Filings API: 8-K, 10-K, 10-Q feed since 1994ARead-onlyIdempotentInspect
Get SEC EDGAR filings as clean JSON: 8-K current reports, 10-K annual reports, 10-Q, S-1, 13D, 13G, Form 4, DEF 14A, 20-F and every other form, for one company, a watchlist or the whole market, from filings accepted minutes ago back to 1994. Each row has the company, CIK, ticker, form, filing date and exact acceptance time, the 8-K item codes (2.02 earnings, 5.02 officer changes, 1.01 material agreements, ...) and direct links to the filing and its main document. For investors, news and alert services, compliance teams and AI agents.
Price: $0.001 per filing.
| Name | Required | Description | Default |
|---|---|---|---|
| ciks | No | SEC Central Index Keys as digits, leading zeros optional, e.g. ["320193"] for Apple | |
| dateTo | No | Latest filing date, YYYY-MM-DD | |
| tickers | No | Company tickers, e.g. ["AAPL", "MSFT"] | |
| dateFrom | No | Earliest filing date, YYYY-MM-DD, e.g. "2020-01-01" | |
| formTypes | No | EDGAR form types, exact match, e.g. ["8-K", "10-K", "10-Q"]; also S-1, 13D, 13G, 4, DEF 14A, 20-F, 6-K and any other form | |
| itemCodes | No | Only 8-Ks reporting at least one of these items, as strings, e.g. ["5.02"] (director/officer change), "1.01" (material agreement), "2.01" (acquisition), "1.05" (cybersecurity incident) | |
| maxResults | No | Maximum filings, newest first, e.g. 10 for a company's latest 10 filings | |
| lookbackDays | No | Used only when `dateFrom` is empty: read filings from this many days back until today, e.g. 365 | |
| earningsReleasesOnly | No | true = only 8-Ks with Item 2.02 (Results of Operations and Financial Condition): the dates and exact times companies released earnings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely new context: real-time latency ('filings accepted minutes ago'), full history to 1994, the exact fields returned per row, and a per-filing price of $0.001, which is important cost information an agent cannot get from the 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?
Front-loaded with the action and resource, then scope, then row contents, ending with pricing. It is a single dense sentence carrying a lot of enumeration, which is borderline verbose, but nearly every clause adds usable information; the audience list is the weakest part.
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 9 optional parameters, no output schema, and no required inputs, the description does the necessary work by explaining what a returned row contains (company, CIK, ticker, form, filing date, acceptance time, item codes, links) and how far back data goes. Missing pieces are minor, mainly default sort/pagination behavior and whether empty filters return the whole market.
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 parameter semantics are already fully documented in the structured schema. The description mostly restates those filters in prose, adding only light interpretive value via 8-K item code examples (2.02 earnings, 5.02 officer changes, 1.01 material agreements) that the schema also lists. 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?
States a specific verb (Get) and resource (SEC EDGAR filings as clean JSON), enumerates the form families covered, and gives the scope (one company, watchlist, whole market) and historical depth (back to 1994). It does not, however, distinguish itself from close siblings such as sec_company_financials, sec_insider_trades or esef_annual_reports, so an agent still has to infer the boundary.
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 through the scoping options ('for one company, a watchlist or the whole market') and the audience list (investors, news/alert services, compliance teams, AI agents), which hints at freshness-sensitive alerting use cases. There is no explicit when-to-use versus when-not guidance and no named alternative among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_insider_tradesSEC Insider Trading API (Form 4): stock transactions since 2006ARead-onlyIdempotentInspect
Get every insider purchase and sale reported to the SEC on Form 4, from today's filings back to 2006, as clean JSON rows: who traded (director, CEO, 10% owner), what, when, how many shares, at what price, and how many they hold afterwards. Plus cluster-buy and cluster-sell signals: the moment two or more directors or officers of the same company buy, or sell, their own stock within a few weeks. Filter by ticker, CIK, transaction code, insider role, value and date. For investors, fintech apps and AI agents.
Price: $0.0002 per unit (transaction=9, cluster-signal=100).
| Name | Required | Description | Default |
|---|---|---|---|
| ciks | No | Issuer SEC Central Index Keys as digits, leading zeros optional, e.g. ["320193"] for Apple | |
| dateTo | No | Latest filing date, YYYY-MM-DD, e.g. "2024-12-31" | |
| tickers | No | Optional: issuer stock tickers, e.g. ["AAPL", "TSLA"] | |
| dateFrom | No | Earliest filing date, YYYY-MM-DD, e.g. "2024-01-01" | |
| maxResults | No | Maximum transaction rows, newest first, e.g. 200 | |
| minValueUsd | No | Minimum transaction value in USD (shares x price), e.g. 100000 | |
| insiderRoles | No | Only insiders with one of these roles: director, officer, ten_percent_owner, other, e.g. ["director", "officer"] | |
| lookbackDays | No | Used only when `dateFrom` is empty: read filings from this many days back until today, e.g. 30 | |
| clusterBuysOnly | No | true = only open-market purchases that are part of a cluster: at least 2 different directors or officers of the same company buying, filed within `clusterWindowDays`, together worth at least $100,000 | |
| clusterSellsOnly | No | true = only open-market sales that are part of a cluster (same rule as cluster buys, for sales) | |
| transactionCodes | No | Form 4 transaction codes to return, e.g. ["P"] for open-market purchases only | |
| clusterWindowDays | No | How many days of filings count as one cluster of insider buying or selling, e.g. 14 | |
| includeClusterSignals | No | true = also output one row per cluster signal (record_type "cluster"): the day several insiders of a company bought or sold together |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds genuine context beyond that: the 2006 coverage horizon, the definition of a cluster (2+ directors/officers, same company, within a window, at least $100,000 combined), and explicit pricing per unit (transaction=9, cluster-signal=100). The only weak spot is that the priced 'unit' concept is never tied to maxResults or includeClusterSignals, leaving a cost-model ambiguity.
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 opening sentence is front-loaded and information-dense, but the description then stacks a cluster-signal sentence, a filter sentence, an audience sentence ('For investors, fintech apps and AI agents'), and a pricing line. The audience sentence earns nothing, and the malformed pricing markdown adds noise rather than clarity.
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 13-parameter, zero-required, read-only query tool with no output schema, the description does a solid job: it enumerates the returned fields so the agent knows the row shape, and explains the cluster record type. What is missing is how the pagination cap (maxResults 200) relates to 'every' transaction and how billing units accrue, which matter for a paid 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 description coverage is 100%, so every one of the 13 parameters is already documented with examples and constraints, which sets the baseline at 3. The description does highlight the main filter axes but adds no syntax, precedence, or interaction rules beyond what the schema states (for example, it does not explain dateFrom vs lookbackDays precedence in its own words). It neither compensates for nor undermines 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: retrieve every insider purchase and sale reported on SEC Form 4 back to 2006, with the exact fields returned spelled out (who, what, when, shares, price, post-holding). It also names a distinctive secondary capability, cluster buy/sell signals, which separates it from generic filing feeds. It never names a sibling like sec_ownership or sec_filings_feed, so the boundary with those tools is left for the agent to infer.
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 filter list (ticker, CIK, code, role, value, date) and the cluster-signal feature. There is no explicit statement of when to reach for this tool rather than sec_ownership or sec_filings_feed, and no mention of prerequisites or what to do when a query returns nothing. Adequate but with clear gaps for an agent choosing among 27 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_ownershipSEC Ownership API: 13F, N-PORT Fund Holdings, 13D/13G, Form 144ARead-onlyIdempotentInspect
Who owns a stock and who is about to sell it, from official SEC filings: what a fund such as Berkshire Hathaway holds (13F, with changes vs the previous quarter), what a mutual fund or ETF such as VOO or ARKK holds (N-PORT), which managers and funds hold a ticker, who filed a 5%+ stake (13D activist, 13G passive), and which insiders filed to sell (Form 144). For investors, analysts and AI agents.
Price: $0.0018 per ownership-row.
| Name | Required | Description | Default |
|---|---|---|---|
| fund | No | holdingsNport only: the fund's ticker (any share class) | |
| mode | No | holdings13f = Form 13F: pass `filer` for a fund manager's holdings (with changes vs the previous quarter), or `ticker`/`cusip` for the managers holding a stock | holdings13f |
| cusip | No | holdings13f/holdingsNport only: the 9-character CUSIP of one share class, e.g. "037833100" (Apple common stock) | |
| filer | No | holdings13f only: the fund manager's name or SEC CIK, e.g. "Berkshire Hathaway" or "1067983" | |
| dateTo | No | stakes13dg / planned144: latest filing date, YYYY-MM-DD, e.g. "2026-10-31" | |
| ticker | No | The company the shares are in, as a current US ticker, e.g. "AAPL" | |
| quarter | No | holdings13f/holdingsNport only: the quarter of the holdings, as "2026Q2" or the quarter end "2026-06-30" | |
| dateFrom | No | stakes13dg / planned144: earliest filing date, YYYY-MM-DD, e.g. "2026-10-01" | |
| issuerCik | No | Instead of `ticker`: the company's SEC CIK as digits, e.g. "320193" for Apple | |
| maxResults | No | Maximum rows (one charged event each), e.g. 200 | |
| stakeForms | No | stakes13dg only: which forms, e.g. ["13D"] for new activist stakes only | |
| minValueUsd | No | Minimum value in US dollars, e.g. 1000000 | |
| lookbackDays | No | stakes13dg / planned144, used when `dateFrom` is empty: filings from this many days back until today, e.g. 30 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds billing semantics that exist nowhere else — $0.0018 per ownership-row, and each returned row counts as one charged event (reinforced on maxResults). It does not mention rate limits, latency, coverage gaps (e.g. 13F lag), or pagination, so it is helpful but not complete.
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 capability is front-loaded in the opening clause and the four filing types are packed into one well-structured sentence, followed by a separate one-line pricing statement. It is dense rather than bloated, though the audience sentence ('For investors, analysts and AI agents') is pure filler and could be dropped.
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 13-parameter, all-optional, multi-mode tool with no output schema, the description does the important work: it tells the agent which filing family answers which question and warns that returned rows are billed. Left implicit are the shape of an ownership-row and the behavior of the default mode when no fund, filer, ticker, or cusip is provided.
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 most parameters already carry per-mode applicability notes, so the baseline of 3 applies. The description adds a little beyond the schema by explaining what 13D vs 13G and Form 144 mean in substantive terms, but it adds nothing about parameter interplay — e.g. that filer vs ticker/cusip are alternative lookup paths within holdings13f, or what happens when mode is left at its default with no subject supplied.
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 precise verb and resource — who owns a stock and who is about to sell it, sourced from official SEC filings — and enumerates the four filing families (13F, N-PORT, 13D/13G, Form 144) with concrete examples (Berkshire Hathaway, VOO, ARKK). It does not, however, differentiate itself from the sibling sec_insider_trades, even though planned144 (insiders filing to sell) clearly overlaps with that tool's territory.
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 routed through real scenarios: fund-manager holdings with quarter-over-quarter changes, mutual fund/ETF holdings, holders of a ticker, 5%+ stake filers split into activist vs passive, and insider sell intent. That gives an agent clear conditions for choosing a mode. It stops short of exclusions — nothing says when to prefer sec_insider_trades, sec_filings_feed, or sec_company_financials instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tariff_lookupTariff Code & Duty Lookup API: US HTS and UK TariffARead-onlyIdempotentInspect
Send a US HTS code and get the official description hierarchy, the general (MFN) duty rate, preferential rates, linked Chapter 99 references and units, with a source link. No code yet? Send a plain product description and get up to 5 candidate codes from the official USITC search. Built for AI agents, customs brokers and e-commerce teams who need a sourced duty rate, not a guess. UK Trade Tariff too: send a UK 10-digit commodity code (or a description) with "market": "UK" for the UK duty, preferential rates, VAT and trade remedies, read live from HMRC.
Price: $0.005 per code-lookup or code-search.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | A US HTS code (8 or 10 digits, e.g. "8712.00.15" or "8712001510") or a UK commodity code (10 digits, e.g. "8712003010") | |
| query | No | Plain product description, 2-200 characters, e.g. "bicycle" or "cotton t-shirt" | |
| market | No | Which tariff to read: "US" (Harmonized Tariff Schedule, USITC) or "UK" (UK Global Tariff, HMRC; "GB" is the same) | US |
| originCountry | No | ISO 3166 alpha-2 code of the country the goods come from, e.g. "CN" or "DE" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's added value is sourcing and cost: data is read 'live from HMRC' / official USITC search, results include a source link, and search returns at most 5 candidates. It also discloses the per-call price ($0.005), which is useful for agent budgeting and is not in any structured field. Minor gap: no mention of behavior on invalid or unmatched codes.
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 primary action and the fallback mode, then market coverage; the core content is dense and useful. Some promotional filler ('Built for AI agents, customs brokers and e-commerce teams who need a sourced duty rate, not a guess') and the price note could be trimmed without loss.
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, and the description does compensate by enumerating return fields for both markets (hierarchy, MFN rate, preferential rates, Chapter 99 refs, units, source link; UK adds VAT and trade remedies). It falls short only on edge cases — no behavior stated for when neither `code` nor `query` is passed, or for unmatched codes.
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 baseline is 3, but the description adds real meaning: it explains the `code` vs `query` trade-off (lookup vs. candidate discovery), what each returns, and how `market` selects the US vs. UK tariff source. `originCountry`, which is relevant to preferential rates, is only explained by 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?
Leads with a concrete verb+resource ('Send a US HTS code and get the official description hierarchy, the general (MFN) duty rate...') and immediately covers both operating modes (code lookup vs. description search) and both markets (US HTS vs. UK Trade Tariff). No sibling tool in the list overlaps, and the tool's scope is unmistakable after the first sentence.
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 routes between the two input modes with 'No code yet? Send a plain product description and get up to 5 candidate codes' and states the switch for the other market via `"market": "UK"`. There are no sibling alternatives to exclude, but it never states what happens if neither `code` nor `query` is supplied, which matters since both are optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uk_new_companiesUK New Companies API: daily Companies House incorporationsARead-onlyIdempotentInspect
Get every new UK company incorporated yesterday (or on any date range) as clean JSON, filtered by SIC code, location and company type, for sales teams, lead-gen agents and B2B providers (accountants, banks, insurers, web agencies). $0.002 per company, no start fee.
Price: $0.002 per company.
| Name | Required | Description | Default |
|---|---|---|---|
| location | No | Registered office location as free text, passed to Companies House's location filter: a town, county or postcode (area), e.g. "London", "Manchester" or "EC1" | |
| sicCodes | No | UK SIC 2007 code prefixes (Companies House condensed list); a prefix matches every code below it | |
| maxResults | No | Maximum companies to return, e.g. 200 | |
| companyTypes | No | Companies House company types, e.g. ["ltd"] (private limited), "plc", "llp", "private-limited-guarant-nsc" (company limited by guarantee), "limited-partnership" | |
| incorporatedTo | No | Latest incorporation date (inclusive), YYYY-MM-DD, e.g. "2026-11-04" | |
| incorporatedFrom | No | Earliest incorporation date, YYYY-MM-DD, e.g. "2026-11-01" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context that annotations cannot carry: per-company pricing ($0.002) with no start fee, which matters for call-volume decisions, and that results come back as 'clean JSON'. It does not mention rate limits, upstream Companies House freshness/latency, or pagination 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 core capability and scope are front-loaded in the first clause, and the text is short. The price is stated twice ('$0.002 per company, no start fee' and then 'Price: $0.002 per `company`.') and the audience list is longer than needed, which is minor waste.
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, fully-schema-documented, six-parameter list tool with no output schema, the definition covers scope, filters, default date window, output format and cost. Nothing critical to invoking it correctly is missing; a field-level return description would be nice but is not required for correct selection.
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 schema carries the parameter documentation and a baseline of 3 applies. The description adds one thing the schema does not: that omitting dates yields yesterday's incorporations, which defines the default behavior of incorporatedFrom/incorporatedTo that have no schema default. It restates the filter dimensions only at a high level.
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 ('Get every new UK company incorporated') plus the default scope ('yesterday (or on any date range)'), the output shape ('clean JSON'), and the filter dimensions (SIC code, location, company type). An agent can tell this apart from siblings like company_check or sec_company_screen 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?
The audience list (sales teams, lead-gen agents, accountants, banks, insurers, web agencies) implies when the tool is useful, and 'yesterday (or any date range)' signals the default call pattern. However, there is no explicit when-not guidance and no named alternative among the siblings for adjacent needs such as company_check or company_accounts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
us_federal_awardsUS Federal Awards API: contracts & grants, all agenciesARead-onlyIdempotentInspect
Get US federal contracts, grants and loans from every agency (USAspending.gov): who won, which agency paid, how much, when, for what (NAICS, PSC, assistance listing), where, plus the winner's parent company and US stock ticker. For sales intelligence, investors measuring government revenue exposure, and procurement or policy research.
Price: $0.004 per award.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | No | Latest action date, YYYY-MM-DD, e.g. "2026-09-30" | |
| sortBy | No | "amount" (default) = awards ordered by their largest action (obligation) in the date window, largest first; that action is the one shown | amount |
| tickers | No | Only awards whose recipient or its parent company matches these US-listed tickers (NYSE, Nasdaq, CBOE; exact cleaned SEC company name), e.g. ["PLTR"] or ["LMT", "BAH"] | |
| agencies | No | Awarding agencies by abbreviation, name or toptier code, e.g. ["NASA"], ["Department of Energy"], ["097"] (DoD) | |
| dateFrom | No | Earliest action date (signing date of the award or of a modification), YYYY-MM-DD, e.g. "2026-07-01" | |
| keywords | No | Full-text search over award descriptions and other text fields, e.g. ["artificial intelligence"] or ["cybersecurity"] | |
| pscCodes | No | Product and Service Codes, e.g. ["DA01"] (IT software development) or ["AR"] (space R&D) | |
| minAmount | No | Only awards whose total obligated amount (all actions since signing) is at least this many US dollars, e.g. 1000000 | |
| awardTypes | No | Which awards: "contracts" (USAspending codes A-D: BPA calls, purchase orders, delivery orders, definitive contracts), "grants" (02-05: block, formula, project grants, cooperative agreements), "loans" | |
| maxResults | No | Maximum award rows, one per award, e.g. 20 | |
| naicsCodes | No | NAICS industry codes, 2 to 6 digits, e.g. ["541512"] (computer systems design) or ["3364"] | |
| recipients | No | Winning organisations, as name text or 12-character SAM UEI, e.g. ["palantir"], ["university of texas"] or ["FSY4LVSBGWB7"] | |
| cfdaNumbers | No | Assistance listing (CFDA) numbers as NN.NNN, e.g. ["47.070"] (NSF computer and information science) or ["93.855"] (NIH allergy and infectious diseases) | |
| placeOfPerformanceStates | No | Two-letter US state or territory codes where the work is done, e.g. ["TX"] or ["VA", "MD", "DC"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety bar is covered. The description adds genuinely useful context beyond them: the upstream source (USAspending.gov) and a concrete price of $0.004 per award, which an agent needs for cost-aware invocation. It stops short of disclosing pagination/row-limit behavior or result-ordering caveats beyond what the sortBy schema field already says.
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 action and dataset, then a single dense clause covering returned attributes and use cases, with pricing isolated on its own line. Every clause carries information and nothing is repeated from the schema or title.
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 14-parameter tool with no output schema, the description does the heavy lifting by enumerating exactly what comes back per award, so the agent knows the response shape. Remaining gaps are minor: it does not flag that awardTypes defaults to contracts only (so grants/loans are excluded unless requested) nor discuss result caps, both of which live only in the schema.
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?
With 100% schema description coverage across all 14 parameters, the schema already carries the semantics and the baseline of 3 applies. The description mentions the same facets the parameters expose (NAICS, PSC, assistance listing, place of performance, tickers/parent company) but adds no extra syntax, matching rules or interaction details beyond the schema text.
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 and resource ("Get US federal contracts, grants and loans") and enumerates the returned attributes — winner, agency, amount, date, NAICS/PSC/assistance listing, place of performance, parent company and ticker. "from every agency (USAspending.gov)" implicitly separates it from the DoD-only sibling dod_contract_awards, but the sibling is never named outright, so differentiation is left partly to inference.
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 intended audiences ("sales intelligence, investors measuring government revenue exposure, and procurement or policy research"), which implies when the tool is a fit. It never states when NOT to use it, nor routes the agent to alternatives such as dod_contract_awards for DoD-specific work or eu_tenders for non-US procurement, so the selection logic stays implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
us_federal_rulesUS Federal Rules API: CFR text as of a date + Federal RegisterARead-onlyIdempotentInspect
One call answers "what does 21 CFR 101.9 say today, when did it last change, and which Federal Register rule changed it?": the section as plain text from the eCFR (as in force today or on any date since 2017), its amendment history, and the final rules behind each change. It also lists what changed in a CFR part since a date ("15 CFR 744 this week") and returns Federal Register documents by number or search. Built for AI agents doing regulatory, compliance and export-control work, and for people who want a sourced answer without learning two APIs.
Price: $0.001 per unit (section=5, document=2).
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | YYYY-MM-DD, e.g. "2024-01-01": the CFR text in force on that date (eCFR history begins around January 2017) | |
| since | No | YYYY-MM-DD, e.g. "2026-11-01" | |
| agency | No | Federal Register search by issuing agency: an acronym ("BIS", "FDA", "EPA", "SEC", "OFAC"), a name ("Bureau of Industry and Security") or a FederalRegister.gov slug ("industry-and-security-bureau") | |
| search | No | Full-text search of Federal Register documents since 1994, newest first, e.g. "entity list" | |
| citation | No | A CFR section, part or appendix: "21 CFR 101.9", "17 CFR 240.10b-5", "48 CFR 52.212-4", "15 CFR 744 Supplement No. 4", or an eCFR link ("https://www.ecfr.gov/current/title-21/section-101.9") | |
| maxResults | No | Most rows to return: for a part citation the most recently changed units (max 25 per run, each with its text), for a search the newest documents (max 50 on the API) | |
| documentType | No | Federal Register search by type: RULE (final rules), PRORULE (proposed rules), NOTICE or PRESDOCU (presidential documents) | |
| maxTextChars | No | Cap on each section's text in characters, e.g. 20000 (default) | |
| documentNumber | No | One Federal Register document by its number, e.g. "2026-17231" (corrections look like "C1-2026-16628") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is free. The description adds genuinely new behavior: per-unit cost ($0.001; section=5, document=2), temporal coverage bounds (eCFR history from ~2017, FR search back to 1994), and that each part unit carries its own text. It does not discuss rate limits, failure modes, or what happens when a citation resolves to nothing.
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 capability is front-loaded in the first sentence, and the pricing line is short and useful. The opening nested-quote framing ('One call answers "..."') is slightly marketing-flavored, and the multi-mode enumeration runs long, but no sentence is pure 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?
For a nine-parameter, zero-required, multi-mode read tool with no output schema, the description does the heavy lifting: it sketches what comes back (section plain text, amendment history, underlying final rules) and bounds the cost and history windows. The gap is that with no output schema an agent still cannot anticipate the exact response shape or how an empty result reads, and mode-selection logic remains implicit.
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 schema already explains asOf, citation, since, and maxResults thoroughly. The description adds only a little semantic linkage — notably that 'since' is used with a part citation to list what changed — but does not clarify the priority or interaction rules among the nine optional parameters, which is the main ambiguity the schema cannot resolve.
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 concrete verbs and resources: it returns a CFR section's text as of a date, its amendment history, the Federal Register final rules behind each change, part-level change lists, and FR documents by number or search. Concrete examples ('21 CFR 101.9', '15 CFR 744 this week') make the scope unmistakable and clearly separate it from siblings like eu_law_lookup or national_law_lookup. It stops short of a 5 because the tool bundles four query modes and the description does not crisply frame them as distinct entry points.
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?
Example queries imply which mode to use ('what does 21 CFR 101.9 say today', '15 CFR 744 this week'), and the stated audience of regulatory/compliance agents sets context. However, it never says when to choose this over a sibling such as eu_law_lookup, nor does it explain whether parameters combine (e.g., citation + since + search) or are mutually exclusive; that has to be inferred from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
us_house_tradesCongress Stock Trades API: US House STOCK Act since 2014ARead-onlyIdempotentInspect
Get congress stock trades: every stock, option, fund and bond trade that members of the US House of Representatives disclose in their Periodic Transaction Reports (PTRs) under the STOCK Act, one clean row per transaction: member, state/district, filing date, trade date, days to disclose, owner (self, spouse, joint, child), ticker, asset type, purchase/sale/exchange and the amount range as numbers. Straight from the official filings of the Clerk of the House, with a link to the PTR PDF on every row. For investors, journalists and AI agents tracking congressional trading. Pricing: $1.80 per 1,000 trades ($0.0018 per trade), no start fee. You only pay for trades delivered, and the Actor stops at your max charge limit.
Price: $0.0018 per trade.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Whole filing years to load, as strings, e.g. ["2024", "2025"] (one Clerk index per year; online PTRs start in 2014) | |
| filedTo | No | Latest filing date, YYYY-MM-DD, e.g. "2025-12-31" | |
| members | No | Case-insensitive part of the member's name as listed by the Clerk, e.g. ["Pelosi"] or ["Josh Gottheimer"] | |
| tickers | No | Only trades whose filing names one of these tickers, e.g. ["NVDA", "MSFT", "BRK.B"] | |
| filedFrom | No | Earliest filing date (when the trade became public), YYYY-MM-DD, e.g. "2025-01-01" | |
| maxResults | No | Maximum trades, newest filings first, e.g. 200 | |
| minAmountUsd | No | Only trades whose reported range starts at or above this USD amount, e.g. 15001 leaves out the smallest $1,001 - $15,000 range, 1000001 keeps trades over $1 million | |
| transactionTypes | No | Any of purchase, sale (full or partial), exchange, e.g. ["purchase"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open world), so the description's added value is the cost model: $1.80 per 1,000 trades, no start fee, charged only for trades delivered, stopping at the max charge limit. It also discloses provenance (official Clerk of the House filings, PTR PDF per row) and result ordering (newest filings first). Minor gap: no mention of pagination or how partial-year coverage behaves when years are omitted.
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: the data scope leads, followed by the field list, then audience, then pricing. One waste point exists — pricing is stated twice, once as 'Pricing: $1.80 per 1,000 trades ($0.0018 per trade)' and again as 'Price: $0.0018 per `trade`.' — which is redundant rather than harmful.
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 8 optional parameters, no output schema, and annotations carrying the safety profile, the description supplies what an agent actually needs: data source, time coverage since 2014, per-row fields, sort order, and billing behavior. Pagination and behavior when filters are omitted are the only notable omissions.
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 every parameter (years, filedFrom/filedTo, members, tickers, maxResults, minAmountUsd, transactionTypes) is already documented with examples and constraints. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.
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 ('Get congress stock trades') and immediately narrows scope to trades disclosed by US House members in Periodic Transaction Reports under the STOCK Act. The enumerated output fields (member, state/district, filing date, trade date, days to disclose, owner, ticker, asset type, transaction type, amount range, PTR PDF link) make the result shape unambiguous and separate it from securities siblings like sec_insider_trades.
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 names an audience ('for investors, journalists and AI agents tracking congressional trading'), which implies when the tool fits, but never states when to prefer it over a sibling such as sec_insider_trades or when it is the wrong choice. No prerequisites, no exclusions, no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vat_iban_checkVAT Number & IBAN Check API: EU VIES + IBAN validationARead-onlyIdempotentInspect
Answers "is this EU VAT number registered, to whom, and is this IBAN real?" One row per VAT number, checked live against the European Commission's VIES service (valid, registered name and address, a name match against the company you expect), and one row per IBAN, checked against ISO 13616 (check digits, length and layout per country, bank code, country match). Built for AI agents doing supplier onboarding, invoice checks and KYB, and for finance teams who want one sourced answer per number.
Price: $0.002 per check.
| Name | Required | Description | Default |
|---|---|---|---|
| ibans | No | IBANs to validate (check digits, length and layout per country, bank code), in electronic or print format, e.g. ["NL91ABNA0417164300", "DE89 3704 0044 0532 0130 00"] | |
| vatNumbers | No | EU VAT numbers to check live against VIES, each with its country prefix, e.g. ["IE6388047V", "NL004495445B01"] | |
| expectedName | No | The company name you expect behind the VAT numbers, e.g. "Google Ireland Ltd" | |
| expectedCountry | No | ISO 3166 alpha-2 code of the country you expect, e.g. "NL" | |
| requesterVatNumber | No | Your own EU VAT number, e.g. "NL123456789B01" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavior beyond annotations: it states the checks are live against VIES, describes the per-row result structure, and discloses pricing per check.
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 core question it answers and avoids unnecessary repetition. The audience sentence and pricing note are useful, though the middle sentence is long and could be tightened.
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 five-parameter, all-optional validation tool with no output schema, the description gives enough context: it explains the live data source, what each row contains, and the two validation standards. It does not cover edge cases such as partial failures or empty arrays, but the core invocation context is 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%, so all five parameters are already documented. The description adds some meaning by explaining that expectedName is matched against the company behind the VAT numbers, but overall it does not add much beyond the schema's own parameter 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?
The description uses specific verbs and resources: checking EU VAT numbers live against VIES and validating IBANs against ISO 13616. It clearly explains what is validated and what is returned per row, though it does not explicitly distinguish itself from sibling tools such as company_check or identifier_resolver.
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 names intended use cases like supplier onboarding, invoice checks, and KYB, which implies when to use the tool. However, it gives no explicit when-not guidance and does not compare itself with sibling tools that might also be relevant.
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.
4 tool updates
- Changed
company_check1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Which sections to fill: any of \"identity\", \"financials\", \"us\" (SEC filings of US issuers), \"people\" (UK officers and owners from Companies House), e.g. [\"identity\", \"people\"]"New value: +"Which sections to fill: any of \"identity\", \"financials\", \"us\" (SEC filings of US issuers), \"people\""
- Changed
plan_official_records_query1 field changed- changed
Input schema / properties / entities / properties / identifiers / descriptionPrevious value: -"Identifiers by kind, each a list of strings: lei, isin, cik, figi, company_number, kvk, cvr, org_number, nct, cve, ecli, celex, cfr, hs_code, naics, postcode, bag_id. company_number may carry its country as a prefix: \"GB:00445790\"."New value: +"Identifiers by kind, each a list of strings: lei, isin, cik, figi, company_number, kvk, cvr, org_number, nct, cve, ecli, celex, cfr, hs_code, naics, postcode, bag_id, vat, iban, wallet, krs, nip, regon. company_number may carry its country as a prefix: \"GB:00445790\"."
- Changed
sanctions_screening3 fields changed- added
Input schema / properties / addressesAdded value: +{ + "description": "Crypto wallet addresses to check, one per entry, e.g. [\"0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9\"]", + "items": { + "pattern": "^\\s*\\S{1,128}\\s*$", + "type": "string" + }, + "maxItems": 50, + "type": "array" +} - removed
Input schema / properties / names / minItemsRemoved value: -1 - changed
Input schema / requiredPrevious value: -[ - "names" -]New value: +[]
- Added
vat_iban_check
1 tool update
- Changed
plan_official_records_query3 fields changed- changed
Input schema / properties / entities / descriptionPrevious value: -"Optional, what you already know: names, tickers, countries (ISO-2), lei, company_numbers (lists), keywords (text)."New value: +"What you (the calling agent) already extracted from the user's question. Extract these from the question yourself; the planner trusts them over its own parsing and puts them in the right input fields. The plan echoes them in `entities_used` and names what is still missing in `missing`, so you can re-call with more." - added
Input schema / properties / entities / propertiesAdded value: +{ + "addresses": { + "description": "Dutch addresses as written, e.g. [\"Damrak 1 Amsterdam\"].", + "items": { + "type": "string" + }, + "type": "array" + }, + "amount_min": { + "description": "A minimum amount in USD or EUR, e.g. 1000000 for \"over $1M\".", + "type": "number" + }, + "company_names": { + "description": "Companies, with legal form if given, e.g. [\"Novo Nordisk A/S\"]; also fund managers and hiring companies.", + "items": { + "type": "string" + }, + "type": "array" + }, + "countries": { + "description": "ISO 3166 alpha-2 codes (or English names), e.g. [\"DE\", \"NL\"]: the registry country, buyer country, origin of goods or trial location.", + "items": { + "type": "string" + }, + "type": "array" + }, + "date_from": { + "description": "YYYY-MM-DD, start of the asked period (resolve relative dates).", + "type": "string" + }, + "date_to": { + "description": "YYYY-MM-DD, end of the asked period.", + "type": "string" + }, + "identifiers": { + "description": "Identifiers by kind, each a list of strings: lei, isin, cik, figi, company_number, kvk, cvr, org_number, nct, cve, ecli, celex, cfr, hs_code, naics, postcode, bag_id. company_number may carry its country as a prefix: \"GB:00445790\".", + "type": "object" + }, + "keywords": { + "description": "The topic or search phrase in the user's words, e.g. \"cloud hosting\", \"huurrecht\", \"non-small cell lung cancer\".", + "type": "string" + }, + "law": { + "description": "A law reference: {\"act\": \"GDPR\", \"article\": \"6\"} or {\"act\": \"Companies Act 2006\", \"article\": \"172\", \"jurisdiction\": \"UK\"}; jurisdiction EU, UK or NL.", + "type": "object" + }, + "package": { + "description": "A software package: {\"ecosystem\": \"npm\", \"name\": \"lodash\", \"version\": \"4.17.15\"}.", + "type": "object" + }, + "person_names": { + "description": "People, e.g. [\"Nancy Pelosi\"] (House members, sanctions targets).", + "items": { + "type": "string" + }, + "type": "array" + }, + "products": { + "description": "Drugs, consumer products or goods, e.g. [\"Ozempic\"], [\"2019 Honda Accord\"], [\"cotton t-shirt\"].", + "items": { + "type": "string" + }, + "type": "array" + }, + "tickers": { + "description": "US stock tickers, e.g. [\"NVDA\", \"BRK-B\"].", + "items": { + "type": "string" + }, + "type": "array" + } +} - changed
Input schema / properties / question / descriptionPrevious value: -"The question, e.g. \"Is Rosneft on the EU sanctions list?\""New value: +"The user's question, verbatim, e.g. \"Is Rosneft on the EU sanctions list?\" (English, Dutch, German or French)."
3 tool updates
- Added
describe_official_records_tool - Added
plan_official_records_query - Added
run_official_records_plan
27 tool updates
- First observed
clinical_trials - First observed
company_accounts - First observed
company_check - First observed
company_hiring_signals - First observed
dod_contract_awards - First observed
drug_safety - First observed
dutch_address_lookup - First observed
dutch_case_law - First observed
esef_annual_reports - First observed
eu_law_lookup - First observed
eu_rates_inflation - First observed
eu_tenders - First observed
identifier_resolver - First observed
national_law_lookup - First observed
package_vulns - First observed
product_recalls - First observed
sanctions_screening - First observed
sec_company_financials - First observed
sec_company_screen - First observed
sec_filings_feed - First observed
sec_insider_trades - First observed
sec_ownership - First observed
tariff_lookup - First observed
uk_new_companies - First observed
us_federal_awards - First observed
us_federal_rules - First observed
us_house_trades
Related MCP Connectors
Screen people, companies and ships against UK, US OFAC, EU and UN sanctions lists, daily
UBO, sanctions & ownership graph. 23 tools, 130.7M entities, 31 registries.
Due diligence & KYC: PEP, national and international sanctions (OFAC, UN, EU, UK, FBI, INTERPOL, FIN
Company data and KYB API for 35 countries: monitoring, financial statements, insolvency, sanctions
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables screening companies or people against OFAC, UN, EU and UK sanctions lists, looking up SEC EDGAR records, checking domain age and email records, and compiling due-diligence reports with source links and a clear, review, or hold verdict.-

Clearparty MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceEnables agents to check companies before payments, invoices, or contracts by resolving legal entities in GLEIF, walking parent chains, screening against OFAC, EU, UN, and UK sanctions lists, and validating EU VAT numbers in VIES.MIT- FlicenseNot gradedqualityDmaintenanceScreens names and companies against OFAC, EU, UK, and UN sanctions lists with fuzzy-match scores, supporting bulk lookups for AML/KYC checks. Data is sourced directly from official government lists and cached for fast repeat checks.-
- AlicenseAqualityBmaintenanceLimitguard MCP server: lead validation for AI agents. Checks the company behind a lead in the Dutch (KVK) and Belgian (KBO) registers, EU VAT (VIES) and sanctions lists. Pay per call with x402 or an API key.101MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.