@oneshot-agent/mcp-server 0.46.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -143,7 +143,7 @@ wallet. The server signs it for you. A read with no proof and no valid token is
143
143
 
144
144
  ## Tool discovery
145
145
 
146
- The MCP catalog contains 173 tools. `oneshot_discover_tools` is a free, read-only
146
+ The MCP catalog contains 185 tools. `oneshot_discover_tools` is a free, read-only
147
147
  search over the tools your token can call. Call it with no arguments for category
148
148
  counts, `{ "query": "send a printed letter" }` to search, or `{ "category": "email" }`
149
149
  to browse. Results contain public tool names, purposes and required inputs.
package/dist/index.js CHANGED
@@ -50,7 +50,7 @@ async function main() {
50
50
  const agent = await initAgent();
51
51
  const server = new Server({
52
52
  name: "oneshot-mcp",
53
- version: "0.46.0", // keep in sync with package.json; guarded by version.test.ts
53
+ version: "0.48.0", // keep in sync with package.json; guarded by version.test.ts
54
54
  }, {
55
55
  capabilities: {
56
56
  tools: {},
@@ -30,5 +30,7 @@ export interface RouteManifestEntry {
30
30
  required: string[];
31
31
  };
32
32
  example: Record<string, unknown>;
33
+ /** `false` for a route whose 202 envelope is the answer (a verification_url to hand on): the handler returns it and never waits for the job. */
34
+ wait?: false;
33
35
  }
34
36
  export declare const ROUTE_MANIFEST: readonly RouteManifestEntry[];
@@ -6,7 +6,7 @@ export const LOOKUP_MANIFEST = [
6
6
  "name": "company_bank_profile",
7
7
  "path": "lookup/company-bank-profile",
8
8
  "title": "Bank Profile",
9
- "description": "Given a bank's name or its FDIC certificate number, return the matching institutions insured by the US Federal Deposit Insurance Corporation. Each has its name, certificate number, whether it is currently open and insured, city and state, primary federal regulator, charter class code, the date it was established, its website, and its total assets and total deposits in US dollars as of the reporting date. Use it to check that a bank is real, insured and still open. Give exactly one of `name` and `fdic_certificate`. A name is a text match, so similarly named banks come back too, best match first: tell them apart by the certificate number on each row, and prefer the certificate number when you have it, since it is an exact match. Closed institutions are included, with `active` false. `total` is the number of institutions that matched, which may be more than `limit`. No match is a completed result with `total` 0 and an empty list. Credit unions are not included.",
9
+ "description": "Returns the banks insured by the US Federal Deposit Insurance Corporation that match a name or FDIC certificate number: whether each is open and insured, location, regulator, charter class, date established, website, total assets and total deposits. Use it to check that a bank is real, insured and still open. Credit unions are not included. Give exactly one of `name` and `fdic_certificate`. Each institution has its name, certificate number, whether it is currently open and insured, city and state, primary federal regulator, charter class code, the date it was established, its website, and its total assets and total deposits in US dollars as of the reporting date. A name is a text match, so similarly named banks come back too, best match first: tell them apart by the certificate number on each row, and prefer the certificate number when you have it, since it is an exact match. Closed institutions are included, with `active` false. `total` is the number of institutions that matched, which may be more than `limit`. No match is a completed result with `total` 0 and an empty list.",
10
10
  "inputSchema": {
11
11
  "type": "object",
12
12
  "properties": {
@@ -33,7 +33,7 @@ export const LOOKUP_MANIFEST = [
33
33
  "name": "record_clinical_trials_find",
34
34
  "path": "find/record-clinical-trials",
35
35
  "title": "Clinical Trials",
36
- "description": "Search the clinical studies registered with the US National Library of Medicine, in any country, for a condition, a treatment or other search words, most recently updated first. Each study gives its registry number, title, status, phases, study type, conditions, interventions, lead sponsor, enrollment, start and primary completion dates, the date it was last updated, the countries of its sites and a link to the study. Give `condition`, `query` or both, and optionally narrow by `status` (recruiting, not_yet_recruiting, active_not_recruiting, completed, terminated, withdrawn or suspended). Use it to see what research is registered on a disease or a drug, who sponsors it and how far along it is. A study record is what the sponsor registered, not a finding about a treatment. Contact and investigator details are not returned. `total` is how many studies matched, including any beyond `limit`, and is 0 when none did.",
36
+ "description": "Searches the clinical studies registered with the US National Library of Medicine, in any country, for a condition, a treatment or other words, most recently updated first: registry number, title, status, phases, conditions, interventions, sponsor, enrollment, dates, site countries and link. A study record is what the sponsor registered, not a finding about a treatment. Give `condition`, `query` or both, and optionally narrow by `status` (recruiting, not_yet_recruiting, active_not_recruiting, completed, terminated, withdrawn or suspended). Each study also gives its study type, start and primary completion dates and the date it was last updated. Use it to see what research is registered on a disease or a drug, who sponsors it and how far along it is. Contact and investigator details are not returned. `total` is how many studies matched, including any beyond `limit`, and is 0 when none did.",
37
37
  "inputSchema": {
38
38
  "type": "object",
39
39
  "properties": {
@@ -76,7 +76,7 @@ export const LOOKUP_MANIFEST = [
76
76
  "name": "company_filings",
77
77
  "path": "lookup/company-filings",
78
78
  "title": "Company Filings",
79
- "description": "Look up a US public company by its Central Index Key (CIK), the identifier the US Securities and Exchange Commission assigns to every filer. Returns the registry record: legal name, entity type, industry, tickers, exchanges, state of incorporation, fiscal year end, website, phone, former names and business address; and the most recent filings, newest first, each with form type, filing date, reporting period and a link to the document. Narrow the filings with `form` (exact form type, for example 10-K), `filed_after` and `filed_before`. Looks up by identifier only: it does not search by company name or ticker, and it does not return officers. Filters apply to the most recent filings the register lists inline (about 1,000), not the full history. `found` is false when the identifier is not in the register.",
79
+ "description": "Returns a US public company's registry record and most recent filings from the US Securities and Exchange Commission, by its Central Index Key (CIK): name, entity type, industry, tickers and addresses, then each filing's form, dates and document link, newest first. It looks up by identifier only, not by company name or ticker, and does not return officers. The CIK is the identifier the US Securities and Exchange Commission assigns to every filer. The registry record gives the legal name, entity type, industry, tickers, exchanges, state of incorporation, fiscal year end, website, phone, former names and business address. Each filing gives its form type, filing date, reporting period and a link to the document. Narrow the filings with `form` (exact form type, for example 10-K), `filed_after` and `filed_before`. Filters apply to the most recent filings the register lists inline (about 1,000), not the full history. `found` is false when the identifier is not in the register.",
80
80
  "inputSchema": {
81
81
  "type": "object",
82
82
  "properties": {
@@ -115,7 +115,7 @@ export const LOOKUP_MANIFEST = [
115
115
  "name": "compound_hazards",
116
116
  "path": "lookup/compound-hazards",
117
117
  "title": "Compound Hazards",
118
- "description": "Give the GHS hazard classification of a chemical compound by its compound identifier (CID) or by a name: a common, trade or systematic name, or a CAS registry number such as 50-00-0. Returns one classification per classifying source, in the source order: the GHS pictograms with their codes (GHS05), the signal word, the hazard statements with their codes (H314) and the precautionary statement codes. Only two classifying sources are returned: the EU harmonised classification (Regulation (EC) No 1272/2008) and the Hazardous Substances Data Bank of the US National Library of Medicine; every other source is left out, so a compound classified only by others returns an empty list. `classified` is true when a returned classification has a hazard statement. A name matching several compounds uses the first and lists them all in `matched_cids`. `compound` is null when the name or CID matches nothing, or the source has no classification for the compound. Give exactly one of `cid` and `name`. Toxicity values, exposure limits, the full safety data sheet, and any synthesis or preparation data are not returned.",
118
+ "description": "Returns the GHS hazard classification of a compound, by PubChem CID, name or CAS number, from the US National Center for Biotechnology Information: pictograms, signal word, hazard statements and precautionary codes, one classification per classifying source. Classifications come from the EU harmonised classification and the Hazardous Substances Data Bank of the US National Library of Medicine; others are left out. A name is a common, trade or systematic name, or a CAS registry number such as 50-00-0. Give exactly one of `cid` and `name`. Classifications come in source order: the GHS pictograms with their codes (GHS05), the signal word, the hazard statements with their codes (H314) and the precautionary statement codes. The EU harmonised classification is Regulation (EC) No 1272/2008. A compound classified only by other sources returns an empty list. `classified` is true when a returned classification has a hazard statement. A name matching several compounds uses the first and lists them all in `matched_cids`. `compound` is null when the name or CID matches nothing, or the source has no classification for the compound. Toxicity values, exposure limits, the full safety data sheet, and any synthesis or preparation data are not returned.",
119
119
  "inputSchema": {
120
120
  "type": "object",
121
121
  "properties": {
@@ -138,7 +138,7 @@ export const LOOKUP_MANIFEST = [
138
138
  "name": "compound_properties",
139
139
  "path": "lookup/compound-properties",
140
140
  "title": "Compound Properties",
141
- "description": "Give the computed molecular descriptors of a chemical compound by its compound identifier (CID) or its InChIKey: the IUPAC name, molecular formula, InChIKey, molecular weight in g/mol, exact mass in Da, XLogP, topological polar surface area in square angstroms, the counts of hydrogen bond donors and acceptors, rotatable bonds and heavy atoms, the formal charge and the complexity score, with a link to the compound page. These are values the source computes from the structure, not measurements. Use it to characterise a compound in a literature review, a screening library or a regulatory file. Give exactly one of `cid` and `inchikey`. `compound` is null when the source knows no compound with that identifier. Synonyms, depositor records, and any synthesis or preparation data are not returned.",
141
+ "description": "Returns the computed molecular descriptors of a compound, by PubChem CID or InChIKey, from the US National Center for Biotechnology Information: IUPAC name, formula, InChIKey, molecular weight, exact mass, XLogP, polar surface area, hydrogen bond donor and acceptor counts, rotatable bonds, heavy atoms, formal charge and complexity. These are values the source computes from the structure, not measurements. Molecular weight is in g/mol, exact mass in Da and topological polar surface area in square angstroms. A link to the compound page is included. Use it to characterise a compound in a literature review, a screening library or a regulatory file. Give exactly one of `cid` and `inchikey`. `compound` is null when the source knows no compound with that identifier. Synonyms, depositor records, and any synthesis or preparation data are not returned.",
142
142
  "inputSchema": {
143
143
  "type": "object",
144
144
  "properties": {
@@ -161,7 +161,7 @@ export const LOOKUP_MANIFEST = [
161
161
  "name": "compound_resolve",
162
162
  "path": "resolve/compound",
163
163
  "title": "Compound Resolve",
164
- "description": "Give exactly one of name (a common, trade or systematic name, or a CAS registry number), inchikey or smiles. Returns compound identifiers, computed names, molecular formulas, InChIKeys, connectivity SMILES and compound page links. Matches retain the source order, up to limit. Ambiguous is true whenever the source matched more than one CID, even if limit returns only one. An unknown compound returns an empty matches list. SMILES containing / or \\ are refused because the source path form cannot carry them. Identity only: no synonym lists, depositor records, synthesis routes, preparation methods or precursor lists.",
164
+ "description": "Resolves a compound name, CAS registry number, InChIKey or SMILES to PubChem compounds of the US National Center for Biotechnology Information: identifiers, computed names, molecular formulas, InChIKeys, connectivity SMILES and compound page links. Identity only: no synonym lists, depositor records, synthesis routes, preparation methods or precursor lists. Give exactly one of name (a common, trade or systematic name, or a CAS registry number), inchikey or smiles. Matches retain the source order, up to limit. Ambiguous is true whenever the source matched more than one CID, even if limit returns only one. An unknown compound returns an empty matches list. SMILES containing / or \\ are refused because the source path form cannot carry them.",
165
165
  "inputSchema": {
166
166
  "type": "object",
167
167
  "properties": {
@@ -188,11 +188,34 @@ export const LOOKUP_MANIFEST = [
188
188
  "name": "aspirin"
189
189
  }
190
190
  },
191
+ {
192
+ "name": "compound_targets",
193
+ "path": "lookup/compound-targets",
194
+ "title": "Compound Targets",
195
+ "description": "Reports what the Open Targets Platform public database says about a drug or clinical candidate's protein targets and mechanisms of action, with gene symbols and references, by ChEMBL id or name. For research; not medical advice. Indications, adverse events, warnings, measured bioactivity and synthesis or preparation data are not returned. Give exactly one of chembl_id or name. A PubChem CID is not accepted: pass the compound’s name, which Compound Resolve and Compound Properties return. A name search selects the first hit and lists up to three candidates so you can retry by ChEMBL id. An unknown compound returns matched: false.",
196
+ "inputSchema": {
197
+ "type": "object",
198
+ "properties": {
199
+ "chembl_id": {
200
+ "type": "string",
201
+ "description": "ChEMBL molecule identifier; lowercase is accepted. CHEMBL followed by 1 to 9 digits, without a leading zero."
202
+ },
203
+ "name": {
204
+ "type": "string",
205
+ "description": "Drug or compound name; the first search hit is used. 2 to 100 characters."
206
+ }
207
+ },
208
+ "required": []
209
+ },
210
+ "example": {
211
+ "chembl_id": "CHEMBL1201580"
212
+ }
213
+ },
191
214
  {
192
215
  "name": "company_consumer_complaints",
193
216
  "path": "lookup/company-consumer-complaints",
194
217
  "title": "Consumer Finance Complaints",
195
- "description": "Given a financial company's name, return how many complaints consumers have filed about it with the US Consumer Financial Protection Bureau, the five largest groups by product and by how the company answered, and the newest complaints. Use it to check a bank, lender, card issuer or credit bureau before dealing with it. Complaints are consumers' reports, not findings. The source matches the name as text, so similarly named companies can appear: `companies` lists the five most matched names with their counts and every complaint carries the company name the source holds. `since` (YYYY-MM-DD) counts only complaints received on or after that date and `limit` sets how many complaints are returned (1 to 25, default 10). A name with no complaint is a completed result with a total of 0 and empty lists.",
218
+ "description": "Given a financial company's name, returns how many complaints consumers have filed about it with the US Consumer Financial Protection Bureau, the five largest groups by product and by how the company answered, and the newest complaints. Complaints are consumers' reports, not findings. The name is matched as text, so similarly named companies can appear. Use it to check a bank, lender, card issuer or credit bureau before dealing with it. `companies` lists the five most matched names with their counts and every complaint carries the company name the source holds. `since` (YYYY-MM-DD) counts only complaints received on or after that date and `limit` sets how many complaints are returned (1 to 25, default 10). A name with no complaint is a completed result with a total of 0 and empty lists.",
196
219
  "inputSchema": {
197
220
  "type": "object",
198
221
  "properties": {
@@ -218,11 +241,52 @@ export const LOOKUP_MANIFEST = [
218
241
  "limit": 1
219
242
  }
220
243
  },
244
+ {
245
+ "name": "company_contractor_license",
246
+ "path": "lookup/company-contractor-license",
247
+ "title": "Contractor License",
248
+ "description": "Returns construction contractor licenses from the register of the Washington State Department of Labor & Industries, refreshed daily, by license number, state business identifier (UBI) or name: type, status, dates, specialties, business type, principal and address. An empty list means no license was found under that input, not that the contractor never held one. `state` is required and must be WA. Give exactly one of `license_number`, `ubi` and `name`. Names are matched ignoring case as a substring of the business name, so a short distinctive fragment works best. Returns at most `limit` licenses, newest effective date first, each with its type, status, whether it is active, effective, expiration and suspension dates, specialties, business type, principal and address. The phone number is not returned, and the street line is null for an individual (a sole proprietor), whose street may be a home. Missing values are null; dates are YYYY-MM-DD.",
249
+ "inputSchema": {
250
+ "type": "object",
251
+ "properties": {
252
+ "state": {
253
+ "type": "string",
254
+ "enum": [
255
+ "WA"
256
+ ],
257
+ "description": "State whose contractor register is searched"
258
+ },
259
+ "license_number": {
260
+ "type": "string",
261
+ "description": "The state contractor licence number, including any asterisks. 1 to 20 characters."
262
+ },
263
+ "ubi": {
264
+ "type": "string",
265
+ "description": "The state business identifier (UBI)"
266
+ },
267
+ "name": {
268
+ "type": "string",
269
+ "description": "A fragment of the business name, matched ignoring case. 2 to 100 characters."
270
+ },
271
+ "limit": {
272
+ "type": "integer",
273
+ "description": "Most licences to return. From 1 to 20. Defaults to `5`."
274
+ }
275
+ },
276
+ "required": [
277
+ "state"
278
+ ]
279
+ },
280
+ "example": {
281
+ "state": "WA",
282
+ "license_number": "ABSHEC*345PS"
283
+ }
284
+ },
221
285
  {
222
286
  "name": "record_court_cases_find",
223
287
  "path": "find/record-court-cases",
224
288
  "title": "Court Cases",
225
- "description": "Search a public archive of published US federal and state court opinions, or choose kind=dockets to search federal cases and their filings. Returns case names, courts, filing dates, citations when available, docket numbers, short excerpts and links, ordered by relevance. For opinions, the filing date is the decision date; for dockets, it is when the case was filed. Coverage varies by court and does not include every case or filing. Only the first page is read, with at most limit matches returned. Docket totals above 2,000 are approximate, with up to 6% error. An excerpt is the start of an opinion or a matching filing, at most 500 characters; it is not a case summary. Open the URL for the source record. The source's terms prohibit using this data for credit, insurance, employment, housing or other eligibility decisions covered by the Fair Credit Reporting Act.",
289
+ "description": "Searches a public archive of published US federal and state court opinions, or federal dockets and their filings with kind=dockets, by relevance: case names, courts, filing dates, citations, docket numbers, excerpts and links. The source's terms prohibit using this data for credit, insurance, employment, housing or other eligibility decisions covered by the Fair Credit Reporting Act. For opinions, the filing date is the decision date; for dockets, it is when the case was filed. Citations come when available. Coverage varies by court and does not include every case or filing. Only the first page is read, with at most limit matches returned. Docket totals above 2,000 are approximate, with up to 6% error. An excerpt is the start of an opinion or a matching filing, at most 500 characters; it is not a case summary. Open the URL for the source record.",
226
290
  "inputSchema": {
227
291
  "type": "object",
228
292
  "properties": {
@@ -281,7 +345,7 @@ export const LOOKUP_MANIFEST = [
281
345
  "name": "vehicle_crash_ratings",
282
346
  "path": "lookup/vehicle-crash-ratings",
283
347
  "title": "Crash Ratings",
284
- "description": "Give the federal crash test star ratings of a vehicle by make, model and model year: the overall rating, the frontal and side crash ratings for the driver and the passenger, the side pole rating, the rollover rating with the rollover risk, and whether electronic stability control, forward collision warning and lane departure warning are standard or optional. The result also lists every rated variant of the model year, with the identifier the source gives each, so a second call with `variant` can rate another one. Use it to compare the safety of vehicles before a purchase, a fleet decision or an insurance review. Covers US passenger vehicles rated in the federal New Car Assessment Program. `rated` is false when the model year has no rated variant or none matches `variant`; a rating is null when the source says the test was not run. To start from a vehicle identification number, decode it first with Vehicle Identification. Recalls and owner complaints have their own tools.",
348
+ "description": "Returns the federal crash test star ratings of a make, model and model year from the New Car Assessment Program of the US National Highway Traffic Safety Administration: overall, frontal, side, side pole and rollover ratings, the rollover risk, and which safety features are standard or optional. A rating is null when the source says the test was not run. The safety features are electronic stability control, forward collision warning and lane departure warning. The result also lists every rated variant of the model year, with the identifier the source gives each, so a second call with `variant` can rate another one. Use it to compare the safety of vehicles before a purchase, a fleet decision or an insurance review. Covers US passenger vehicles rated in the federal New Car Assessment Program. `rated` is false when the model year has no rated variant or none matches `variant`. To start from a vehicle identification number, decode it first with Vehicle Identification. Recalls and owner complaints have their own tools.",
285
349
  "inputSchema": {
286
350
  "type": "object",
287
351
  "properties": {
@@ -319,7 +383,7 @@ export const LOOKUP_MANIFEST = [
319
383
  "name": "product_device_clearances",
320
384
  "path": "lookup/product-device-clearances",
321
385
  "title": "Device Clearances",
322
- "description": "Look up medical devices cleared by the US Food and Drug Administration through premarket notification (510(k)). Supply at least one clearance number, applicant, device name or product code. Names are matched as word phrases; multiple filters must all match. Returns the total matches and clearance records, newest decision first, with device classifications and decision and received dates. Contact names and street addresses are excluded. No match returns an empty list. The source refreshes weekly.",
386
+ "description": "Returns the medical devices the US Food and Drug Administration cleared through premarket notification (510(k)), by clearance number, applicant, device name or product code, newest decision first: the clearance records, device classifications, decision and received dates, and the total matches. Contact names and street addresses are excluded. Supply at least one clearance number, applicant, device name or product code. Names are matched as word phrases; multiple filters must all match. No match returns an empty list. The source refreshes weekly.",
323
387
  "inputSchema": {
324
388
  "type": "object",
325
389
  "properties": {
@@ -355,7 +419,7 @@ export const LOOKUP_MANIFEST = [
355
419
  "name": "place_disasters",
356
420
  "path": "lookup/place-disasters",
357
421
  "title": "Disaster Declarations",
358
- "description": "List the federal disaster declarations (floods, hurricanes, fires, storms, earthquakes and more) that covered a US county, newest first. Use it to check the hazard history of a property, a policy or a claim location. Both `state` and `county` are required. Declarations that cover a whole state are included for every county in it and marked `statewide`. `total` is the number of matching declarations, which can exceed the page returned when `limit` is lower. Narrow with `incident_type` (for example Flood, Hurricane, Fire) and a declaration date range. A county with no declarations is a completed result with `total` 0.",
422
+ "description": "Lists the federal disaster declarations (floods, hurricanes, fires, storms, earthquakes and more) that covered a US county, newest first, from the US Federal Emergency Management Agency. Declarations that cover a whole state are included for every county in it and marked `statewide`. `total` counts every match and can exceed the page returned. Use it to check the hazard history of a property, a policy or a claim location. Both `state` and `county` are required. Narrow with `incident_type` (for example Flood, Hurricane, Fire) and a declaration date range. A county with no declarations is a completed result with `total` 0.",
359
423
  "inputSchema": {
360
424
  "type": "object",
361
425
  "properties": {
@@ -402,7 +466,7 @@ export const LOOKUP_MANIFEST = [
402
466
  "name": "market_drug_acquisition_cost",
403
467
  "path": "lookup/market-drug-acquisition-cost",
404
468
  "title": "Drug Acquisition Cost",
405
- "description": "Look up the NADAC survey by an 11-digit NDC (dashes are removed) or an exact drug description converted to uppercase. At least one is required; NDC takes precedence when both are supplied. Reads up to 100 source rows, newest weekly as-of date first, then newest effective date, keeps the first row per NDC and returns up to limit prices. The survey refreshes weekly and publishes its own effective and as-of dates. These are pharmacy acquisition rates per unit, not retail patient prices. No match returns an empty prices list.",
469
+ "description": "Returns drug prices per unit from the weekly national drug acquisition survey (NADAC) of the US Centers for Medicare & Medicaid Services, by 11-digit NDC or exact drug description, with the survey's effective and as-of dates. These are pharmacy acquisition rates per unit, not retail patient prices. At least one of the NDC (dashes are removed) and the description (converted to uppercase) is required; NDC takes precedence when both are supplied. Reads up to 100 source rows, newest weekly as-of date first, then newest effective date, keeps the first row per NDC and returns up to limit prices. No match returns an empty prices list.",
406
470
  "inputSchema": {
407
471
  "type": "object",
408
472
  "properties": {
@@ -429,7 +493,7 @@ export const LOOKUP_MANIFEST = [
429
493
  "name": "product_drug_adverse_events",
430
494
  "path": "lookup/product-drug-adverse-events",
431
495
  "title": "Drug Adverse Events",
432
- "description": "List the reactions most often named in the adverse event reports sent to the US Food and Drug Administration for a drug, from a drug name matched against the product name on the reports. A name of several words is matched as a phrase. Each reaction is the source's term with the number of reports that name it, most reported first. A drug with no reports gives an empty list. The total number of reports is not given. A report does not show that the drug caused the reaction, the reports are unverified, and the source says its data must not be relied on for decisions about medical care.",
496
+ "description": "Lists the reactions most often named in adverse event reports sent to the US Food and Drug Administration for a drug, with the number of reports naming each. A report does not show that the drug caused the reaction, the reports are unverified, and the source says its data must not be relied on for decisions about medical care. The drug name is matched against the product name on the reports. A name of several words is matched as a phrase. Each reaction is the source's term, most reported first. A drug with no reports gives an empty list. The total number of reports is not given.",
433
497
  "inputSchema": {
434
498
  "type": "object",
435
499
  "properties": {
@@ -455,7 +519,7 @@ export const LOOKUP_MANIFEST = [
455
519
  "name": "product_drug_shortages",
456
520
  "path": "lookup/product-drug-shortages",
457
521
  "title": "Drug Shortages",
458
- "description": "Say whether the US Food and Drug Administration lists a drug as in shortage, from a drug name matched against the generic name and the brand name. A name of several words is matched as a phrase. `status` narrows the list to `current` shortages, drugs `to_be_discontinued` or shortages that are `resolved`. Each listed presentation gives the generic name, the brand names, the company, the status, whether it is available, the dosage form, the presentation and its package NDC, the therapeutic categories, the reason it is short, any related information and the dates it was first posted and last updated. Most recently updated first. `total` is how many presentations matched, including any beyond `limit`, and is 0 when the drug is not on the list. A drug that is not listed is not in shortage on this list, which says nothing about a particular pharmacy's stock. The source says its data must not be relied on for decisions about medical care.",
522
+ "description": "Says whether the US Food and Drug Administration lists a drug as in shortage, matched by generic or brand name: each presentation's status, availability, company, dosage form, package NDC, reason and dates. A drug that is not listed is not in shortage on this list, which says nothing about a particular pharmacy's stock. A name of several words is matched as a phrase. `status` narrows the list to `current` shortages, drugs `to_be_discontinued` or shortages that are `resolved`. Each listed presentation gives the generic name, the brand names, the company, the status, whether it is available, the dosage form, the presentation and its package NDC, the therapeutic categories, the reason it is short, any related information and the dates it was first posted and last updated. Most recently updated first. `total` is how many presentations matched, including any beyond `limit`, and is 0 when the drug is not on the list. The source says its data must not be relied on for decisions about medical care.",
459
523
  "inputSchema": {
460
524
  "type": "object",
461
525
  "properties": {
@@ -491,7 +555,7 @@ export const LOOKUP_MANIFEST = [
491
555
  "name": "product_duty_rate",
492
556
  "path": "lookup/product-duty-rate",
493
557
  "title": "Duty Rate",
494
- "description": "Look up lines of the US Harmonized Tariff Schedule with their scheduled rate: the general, special and column 2 (other) rates for a heading such as `7408.11`, or candidate lines for a keyword such as `copper wire`. Lines come in schedule order and keep their `indent`: for a heading lookup every line beneath it is returned, so a line sits under the nearest earlier line with a lower indent; a keyword search returns only the matching lines, without their ancestors, so there `indent` is depth only and says nothing about which heading a line belongs to. A heading has no rate of its own, its rates are on the indented lines below. This is the scheduled rate only: it does not add duties imposed by trade-remedy or emergency actions; footnotes are returned as the schedule gives them, each with the rate column(s) it qualifies, and additional-duties notes as given. It is a lookup, not a classification: it does not choose a code for a product, so a keyword search returns candidates for the caller to choose from. A keyword of several words matches lines containing any of them (`copper wire` returns copper ores as well as wire); wrap the words in double quotes to match the exact phrase (`\"copper wire\"`). Covers goods imported into the US. `total` is how many lines the schedule search matched, as the source counts them; `lines` is cut to `limit`. No match is a completed result with `total` 0.",
558
+ "description": "Returns lines of the US Harmonized Tariff Schedule from the US International Trade Commission, with their general, special and column 2 (other) rates, for a heading such as `7408.11` or a keyword such as `copper wire`. This is the scheduled rate only: it does not add duties imposed by trade-remedy or emergency actions, and it does not classify a product. Lines come in schedule order and keep their `indent`: for a heading lookup every line beneath it is returned, so a line sits under the nearest earlier line with a lower indent; a keyword search returns only the matching lines, without their ancestors, so there `indent` is depth only and says nothing about which heading a line belongs to. A heading has no rate of its own, its rates are on the indented lines below. Footnotes are returned as the schedule gives them, each with the rate column(s) it qualifies, and additional-duties notes as given. It is a lookup, not a classification: it does not choose a code for a product, so a keyword search returns candidates for the caller to choose from. A keyword of several words matches lines containing any of them (`copper wire` returns copper ores as well as wire); wrap the words in double quotes to match the exact phrase (`\"copper wire\"`). Covers goods imported into the US. `total` is how many lines the schedule search matched, as the source counts them; `lines` is cut to `limit`. No match is a completed result with `total` 0.",
495
559
  "inputSchema": {
496
560
  "type": "object",
497
561
  "properties": {
@@ -517,7 +581,7 @@ export const LOOKUP_MANIFEST = [
517
581
  "name": "place_earthquakes",
518
582
  "path": "lookup/place-earthquakes",
519
583
  "title": "Earthquakes",
520
- "description": "List the earthquakes recorded within a distance of a point, given its latitude and longitude. Use it to check the seismic history around a property, a facility or a route stop. Earthquakes are returned newest first, each with its magnitude, depth in kilometres, how many people reported feeling it (`felt_reports`, null when nobody was asked or none reported) and whether a tsunami was flagged. By default it looks back 30 days within 100 km for magnitude 2.5 and above; `since` and `until` (YYYY-MM-DD, UTC) set the dates, `radius_km` the distance (1 to 500), `min_magnitude` the floor and `limit` the most returned (1 to 50). Events the source records as something other than an earthquake, such as quarry blasts, are left out. A point with no earthquake in range is a completed result with an empty list.",
584
+ "description": "Lists the earthquakes the US Geological Survey recorded within a distance of a latitude and longitude, newest first: magnitude, depth in kilometres, felt reports and whether a tsunami was flagged. By default it looks back 30 days within 100 km for magnitude 2.5 and above. Quarry blasts and other events that are not earthquakes are left out. Use it to check the seismic history around a property, a facility or a route stop. `felt_reports` is how many people reported feeling it, null when nobody was asked or none reported. `since` and `until` (YYYY-MM-DD, UTC) set the dates, `radius_km` the distance (1 to 500), `min_magnitude` the floor and `limit` the most returned (1 to 50). A point with no earthquake in range is a completed result with an empty list.",
521
585
  "inputSchema": {
522
586
  "type": "object",
523
587
  "properties": {
@@ -568,7 +632,7 @@ export const LOOKUP_MANIFEST = [
568
632
  "name": "company_environmental_compliance",
569
633
  "path": "lookup/company-environmental-compliance",
570
634
  "title": "Environmental Compliance",
571
- "description": "Give the federal environmental compliance record of the facilities regulated under a company or facility name, optionally within one US state: for each facility its address and registry id, its overall compliance status, whether it is currently a significant violator, how many of the last twelve quarters it was in violation, its inspections, formal enforcement actions and penalties over the last five years, and when it was last inspected and last penalised. The result also gives how many facilities matched in all and their penalties summed. Use it to check a supplier, a site or a counterparty against federal air, water, hazardous waste and drinking water programs. Covers US facilities regulated under federal environmental programs. The source matches every whole word of the name, in any order, against the current and alternate names a facility carries across its programs: a part of a word matches nothing, a search for Tesla also returns a facility on Tesla Road, and a facility matched under an alternate name may show a name without one of the words. The totals count every facility the search matched, not facilities verified to belong to the named company: tell facilities apart by address and registry id, and give `state` to narrow the search. `total_facilities` is 0 and `facilities` is empty when no facility name carries every word. A count or date is null when the source does not record it.",
635
+ "description": "Returns the federal environmental compliance record, from the US Environmental Protection Agency, of the facilities matching a company or facility name: compliance status, significant violations, quarters in violation, inspections, enforcement actions and penalties over five years. A match is by the words of the name, not verified ownership: tell facilities apart by address and registry id. Optionally narrow to one US state with `state`. For each facility: its address and registry id, its overall compliance status, whether it is currently a significant violator, how many of the last twelve quarters it was in violation, its inspections, formal enforcement actions and penalties over the last five years, and when it was last inspected and last penalised. The result also gives how many facilities matched in all and their penalties summed. Use it to check a supplier, a site or a counterparty against federal air, water, hazardous waste and drinking water programs. Covers US facilities regulated under federal environmental programs. The source matches every whole word of the name, in any order, against the current and alternate names a facility carries across its programs: a part of a word matches nothing, a search for Tesla also returns a facility on Tesla Road, and a facility matched under an alternate name may show a name without one of the words. The totals count every facility the search matched, not facilities verified to belong to the named company. `total_facilities` is 0 and `facilities` is empty when no facility name carries every word. A count or date is null when the source does not record it.",
572
636
  "inputSchema": {
573
637
  "type": "object",
574
638
  "properties": {
@@ -595,11 +659,46 @@ export const LOOKUP_MANIFEST = [
595
659
  "limit": 3
596
660
  }
597
661
  },
662
+ {
663
+ "name": "company_fda_registration",
664
+ "path": "lookup/company-fda-registration",
665
+ "title": "FDA Establishment Registration",
666
+ "description": "Returns medical device establishments registered with the US Food and Drug Administration, worldwide, by registration number, FEI number or firm name, with the products they list. Up to 100 source listings are grouped into establishments; when `truncated` is true, product lists may be incomplete and name searches may omit entire establishments. Named contacts are excluded. Supply exactly one registration number, FEI number or firm name. A name search may match many establishments of one group; country narrows name searches only. registration_year is the year the registration runs to. Establishments come in first-seen order. Products are unique by product code, at most 25 per establishment, newest created date first; duplicate codes use the newest listing’s details. No match returns an empty list. The source refreshes weekly; the evidence date identifies its snapshot.",
667
+ "inputSchema": {
668
+ "type": "object",
669
+ "properties": {
670
+ "registration_number": {
671
+ "type": "string",
672
+ "description": "The establishment’s FDA registration number"
673
+ },
674
+ "fei_number": {
675
+ "type": "string",
676
+ "description": "The FDA establishment identifier"
677
+ },
678
+ "firm_name": {
679
+ "type": "string",
680
+ "description": "Firm name phrase; only letters, digits, spaces, ampersands, hyphens, periods and commas are kept. 2 to 100 characters."
681
+ },
682
+ "country": {
683
+ "type": "string",
684
+ "description": "Two-letter ISO country code; narrows firm name searches only"
685
+ },
686
+ "limit": {
687
+ "type": "integer",
688
+ "description": "The most establishments to return. From 1 to 10. Defaults to `3`."
689
+ }
690
+ },
691
+ "required": []
692
+ },
693
+ "example": {
694
+ "registration_number": "1030489"
695
+ }
696
+ },
598
697
  {
599
698
  "name": "company_federal_awards",
600
699
  "path": "lookup/company-federal-awards",
601
700
  "title": "Federal Awards",
602
- "description": "Look up the US federal contracts or grants held by a recipient, found by its name or its Unique Entity Identifier (UEI), largest first. Give exactly one of `recipient` and `uei`, and `kind` (`contracts` or `grants`): contracts and grants are separate groups and cannot be mixed in one call. Each award has its identifier, recipient name and UEI, total value in US dollars, start and end dates, awarding agency and sub-agency, description and a link to the award record; contracts also carry the industry (NAICS) and product or service (PSC) codes. Searches by date: returns the awards the source lists for the period from `active_after` to `active_before` (default: the last three years up to today; nothing before 2007-10-01). That is not the same as awards running in the period: the source does not limit rows to awards that overlap it, so an award may have ended before the period or start after it. Read each row's start and end dates to judge whether it is current. A name is a text match, so similarly named recipients come back too: tell them apart by the recipient name and UEI on each row, and prefer the UEI when you have it. `has_more` is true when more awards exist than `limit`. No awards is a completed result with an empty list. Covers US federal awards only.",
701
+ "description": "Returns the US federal contracts or grants held by a recipient, found by name or Unique Entity Identifier (UEI), largest first, from the award records of the US Department of the Treasury: value, dates, awarding agency, description and link. The date filter is not an overlap filter: an award may have ended before the period or start after it. Give exactly one of `recipient` and `uei`, and `kind` (`contracts` or `grants`): contracts and grants are separate groups and cannot be mixed in one call. Each award has its identifier, recipient name and UEI, total value in US dollars, start and end dates, awarding agency and sub-agency, description and a link to the award record; contracts also carry the industry (NAICS) and product or service (PSC) codes. Searches by date: returns the awards the source lists for the period from `active_after` to `active_before` (default: the last three years up to today; nothing before 2007-10-01). That is not the same as awards running in the period: the source does not limit rows to awards that overlap it. Read each row's start and end dates to judge whether it is current. A name is a text match, so similarly named recipients come back too: tell them apart by the recipient name and UEI on each row, and prefer the UEI when you have it. `has_more` is true when more awards exist than `limit`. No awards is a completed result with an empty list. Covers US federal awards only.",
603
702
  "inputSchema": {
604
703
  "type": "object",
605
704
  "properties": {
@@ -646,7 +745,7 @@ export const LOOKUP_MANIFEST = [
646
745
  "name": "market_federal_labor_rates",
647
746
  "path": "lookup/market-federal-labor-rates",
648
747
  "title": "Federal Labor Rates",
649
- "description": "Look up the ceiling hourly rates that contractors on US federal supply schedule contracts have agreed, matching your words against the labor category, contractor name and contract number (a keyword search, so a match is not always a job title), with the low, middle (median), average and high across every match, and the matching rates with the contractor, contract number, business size, education, years of experience, clearance and worksite. Use it to check whether a quoted hourly rate is in line with what the government pays. These are ceilings, the most the contract allows per hour, not what was paid. Rates are listed lowest first. Covers ceiling hourly rates on US federal supply schedule contracts. `total` is 0 and `summary` is null when nothing matches.",
748
+ "description": "Returns the ceiling hourly rates contractors have agreed on US federal supply schedule contracts, from the US General Services Administration, with the low, middle (median), average and high across every match. These are ceilings, the most the contract allows per hour, not what was paid. The match is a keyword search, so a match is not always a job title. Your words are matched against the labor category, contractor name and contract number. Each matching rate has the contractor, contract number, business size, education, years of experience, clearance and worksite. Rates are listed lowest first. Use it to check whether a quoted hourly rate is in line with what the government pays. Covers ceiling hourly rates on US federal supply schedule contracts. `total` is 0 and `summary` is null when nothing matches.",
650
749
  "inputSchema": {
651
750
  "type": "object",
652
751
  "properties": {
@@ -687,7 +786,7 @@ export const LOOKUP_MANIFEST = [
687
786
  "name": "record_federal_register_find",
688
787
  "path": "find/record-federal-register",
689
788
  "title": "Federal Register Documents",
690
- "description": "Search the US Federal Register, the government's daily journal of rules, proposed rules, notices and presidential documents, for documents that match search words, newest first. Each document gives its document number, title, type, abstract, the date it was published, the agencies that issued it, and links to the document and its PDF. Optionally narrow by `type` (rule, proposed_rule, notice or presidential), by `agency` (the agency's Federal Register slug, for example federal-aviation-administration), and by publication date with `published_after` and `published_before` (YYYY-MM-DD). Use it to find what the government has said or proposed about a subject, a regulation or a company. It covers documents published since 1994 and returns the abstract, not the full text: open the link for that. `total` is how many documents matched, including any beyond `limit`, and is 0 when none did.",
789
+ "description": "Searches the US Federal Register, the government's daily journal of rules, proposed rules, notices and presidential documents, from the US Office of the Federal Register, newest first: document number, title, type, abstract, publication date, issuing agencies and links. It covers documents published since 1994 and returns the abstract, not the full text. Optionally narrow by `type` (rule, proposed_rule, notice or presidential), by `agency` (the agency's Federal Register slug, for example federal-aviation-administration), and by publication date with `published_after` and `published_before` (YYYY-MM-DD). Use it to find what the government has said or proposed about a subject, a regulation or a company. Each document links to its page and its PDF: open the link for the full text. `total` is how many documents matched, including any beyond `limit`, and is 0 when none did.",
691
790
  "inputSchema": {
692
791
  "type": "object",
693
792
  "properties": {
@@ -736,7 +835,7 @@ export const LOOKUP_MANIFEST = [
736
835
  "name": "place_flood_zone",
737
836
  "path": "lookup/place-flood-zone",
738
837
  "title": "Flood Zone",
739
- "description": "Return the flood hazard zone published on the national flood hazard map at a point: the zone, its subtype, whether the point is in a special flood hazard area, the base flood elevation when one is stated, and the map the answer comes from. Give coordinates, not an address; Place Resolve returns the coordinates for an address. Covers US areas with a published flood hazard map. `mapped` is false when no map covers the point. When more than one zone covers the point, the first is returned and `overlapping_zones` gives the count. This is a screening aid, not a flood determination: do not use it as the basis for lending or insurance decisions.",
838
+ "description": "Returns the flood hazard zone at a point from the flood hazard map of the US Federal Emergency Management Agency: the zone, its subtype, whether the point is in a special flood hazard area, the base flood elevation when stated and the map. This is a screening aid, not a flood determination: never base lending or insurance decisions on it. Give coordinates, not an address; Place Resolve returns the coordinates for an address. Covers US areas with a published flood hazard map. `mapped` is false when no map covers the point. When more than one zone covers the point, the first is returned and `overlapping_zones` gives the count.",
740
839
  "inputSchema": {
741
840
  "type": "object",
742
841
  "properties": {
@@ -759,11 +858,34 @@ export const LOOKUP_MANIFEST = [
759
858
  "longitude": -95.3698
760
859
  }
761
860
  },
861
+ {
862
+ "name": "market_freight_index",
863
+ "path": "lookup/market-freight-index",
864
+ "title": "Freight Index",
865
+ "description": "Returns the Freight Transportation Services Index of the US Bureau of Transportation Statistics by month, newest first, with seasonally adjusted truck, rail, air, water and pipeline components. It measures volume, not prices, with 2000 = 100. The series refreshes monthly about six weeks after the month, and recent months are revised. `start_month` returns the months from that month onward. Missing modes are null. Each row carries its observation month. No matching months returns an empty list.",
866
+ "inputSchema": {
867
+ "type": "object",
868
+ "properties": {
869
+ "months": {
870
+ "type": "integer",
871
+ "description": "Maximum number of most recent months with a freight index, 1 to 60. From 1 to 60. Defaults to `12`."
872
+ },
873
+ "start_month": {
874
+ "type": "string",
875
+ "description": "Include months from YYYY-MM onward; cannot be later than the current UTC month. YYYY-MM."
876
+ }
877
+ },
878
+ "required": []
879
+ },
880
+ "example": {
881
+ "months": 1
882
+ }
883
+ },
762
884
  {
763
885
  "name": "market_freight_rate",
764
886
  "path": "lookup/market-freight-rate",
765
887
  "title": "Freight Rate Quote",
766
- "description": "Quote the rate to move freight between two US ZIP codes on a pickup date, by mode: ltl shares a trailer by the pallet, ftl is a whole 53-foot dry van, van is a cargo van and box_truck is a 26-foot box truck. The answer is one carrier's quote for that lane: the rate for the whole shipment with every included service, the transit time, the pickup and delivery dates, when the quote lapses and whether it is firm or indicative. Use it to check a billed freight charge against the lane's going rate. For ltl give the pallets, the weight per pallet and the pallet dimensions; for van and box_truck give the pallets and the weight per pallet; for ftl the lane and date are enough. A lane the mode does not serve is refused as invalid input: try another mode. Covers US lanes. Nothing is booked.",
888
+ "description": "Quotes the rate to move freight between two US ZIP codes on a pickup date, by mode (ltl, ftl, van or box_truck), as one carrier's quote for that lane: the rate for the whole shipment with every included service, transit time, pickup and delivery dates, when the quote lapses and whether it is firm or indicative. Nothing is booked. ltl shares a trailer by the pallet, ftl is a whole 53-foot dry van, van is a cargo van and box_truck is a 26-foot box truck. Use it to check a billed freight charge against the lane's going rate. For ltl give the pallets, the weight per pallet and the pallet dimensions; for van and box_truck give the pallets and the weight per pallet; for ftl the lane and date are enough. A lane the mode does not serve is refused as invalid input: try another mode. Covers US lanes.",
767
889
  "inputSchema": {
768
890
  "type": "object",
769
891
  "properties": {
@@ -833,7 +955,7 @@ export const LOOKUP_MANIFEST = [
833
955
  "name": "vehicle_fuel_economy",
834
956
  "path": "lookup/vehicle-fuel-economy",
835
957
  "title": "Fuel Economy",
836
- "description": "Get federal fuel economy ratings and annual fuel expenditure for US light-duty vehicles from model year 1984 on. The model name must be the source's: Camry, Camry AWD LE/SE and Camry Hybrid LE are three separate models. Make and model matching is case-insensitive. The result lists the engine and transmission options in source order. `variant` picks among the options by case-insensitive text, for example 4 cyl, 2.5 L or S8; without it the first option is used. An unknown model or unmatched variant completes with `matched: false` and the available options. City, highway and combined ratings are miles per gallon, or miles per gallon equivalent for electric vehicles. Unavailable or inapplicable values are null. The source refreshes weekly; updated_on dates the selected record.",
958
+ "description": "Returns federal fuel economy ratings and annual fuel expenditure for US light-duty vehicles from model year 1984 on, from the US Department of Energy and US Environmental Protection Agency: city, highway and combined miles per gallon (or the equivalent for electric vehicles) for each engine and transmission option. The model must be named as the source names it. Camry, Camry AWD LE/SE and Camry Hybrid LE are three separate models. Make and model matching is case-insensitive. The result lists the engine and transmission options in source order. `variant` picks among the options by case-insensitive text, for example 4 cyl, 2.5 L or S8; without it the first option is used. An unknown model or unmatched variant completes with `matched: false` and the available options. Unavailable or inapplicable values are null. The source refreshes weekly; updated_on dates the selected record.",
837
959
  "inputSchema": {
838
960
  "type": "object",
839
961
  "properties": {
@@ -867,11 +989,63 @@ export const LOOKUP_MANIFEST = [
867
989
  "variant": "4 cyl"
868
990
  }
869
991
  },
992
+ {
993
+ "name": "gene_diseases",
994
+ "path": "lookup/gene-diseases",
995
+ "title": "Gene Diseases",
996
+ "description": "Reports the diseases the Open Targets Platform (CC0) associates with a human gene, strongest overall score first, with the evidence score of each datatype. A score between 0 and 1 summarises the strength of the evidence that the gene and disease are associated; it is not a measure of causation or clinical risk. For research; not medical advice. The datatypes are genetic association, somatic mutation, known drug, affected pathway, literature, RNA expression, animal model and genetic literature. Human genes only. Pass an official gene symbol or an Ensembl gene ID; a version suffix is dropped. A symbol matches only a search hit with exactly that name, ignoring case: otherwise matched is false and the near hits are listed as candidates so you can retry by Ensembl ID. An unknown Ensembl ID returns matched: false.",
997
+ "inputSchema": {
998
+ "type": "object",
999
+ "properties": {
1000
+ "gene": {
1001
+ "type": "string",
1002
+ "description": "An official human gene symbol (BRCA1) or an Ensembl gene ID (ENSG00000012048); a version suffix is dropped. 1 to 30 characters. Letters, digits, \".\", \"_\" and \"-\" only."
1003
+ },
1004
+ "limit": {
1005
+ "type": "integer",
1006
+ "description": "Diseases returned, highest overall score first. From 1 to 25. Defaults to `10`."
1007
+ }
1008
+ },
1009
+ "required": [
1010
+ "gene"
1011
+ ]
1012
+ },
1013
+ "example": {
1014
+ "gene": "BRCA1",
1015
+ "limit": 2
1016
+ }
1017
+ },
1018
+ {
1019
+ "name": "gene_expression",
1020
+ "path": "lookup/gene-expression",
1021
+ "title": "Gene Expression",
1022
+ "description": "Reports the median expression of a human gene across donors of normal (non-diseased) tissue, in transcripts per million (TPM), from the open-access summary data of the Genotype-Tissue Expression (GTEx) project, US National Institutes of Health. Values are static between releases; the answer names the dataset. The data is for research and is not medical advice. Please cite the GTEx Portal (https://gtexportal.org) and dbGaP accession phs000424. Pass an official human gene symbol or an Ensembl gene ID, with or without a version. Exactly one matching reference row is required; otherwise matched is false and candidates lists the returned rows. Tissues are sorted by highest median first; omit limit for all tissues.",
1023
+ "inputSchema": {
1024
+ "type": "object",
1025
+ "properties": {
1026
+ "gene": {
1027
+ "type": "string",
1028
+ "description": "Official human gene symbol (TP53) or Ensembl gene ID (ENSG00000141510), with or without a version. 1 to 30 characters. Letters, digits, \".\", \"_\" and \"-\" only."
1029
+ },
1030
+ "limit": {
1031
+ "type": "integer",
1032
+ "description": "Tissues returned, highest median first; omit for all tissues. From 1 to 60."
1033
+ }
1034
+ },
1035
+ "required": [
1036
+ "gene"
1037
+ ]
1038
+ },
1039
+ "example": {
1040
+ "gene": "TP53",
1041
+ "limit": 2
1042
+ }
1043
+ },
870
1044
  {
871
1045
  "name": "gene_pathways",
872
1046
  "path": "lookup/gene-pathways",
873
1047
  "title": "Gene Pathways",
874
- "description": "Find the lowest-level pathways a gene’s products take part in, from Reactome. Covers curated human pathways and pathways inferred for other species. Pass the gene’s own organism as taxon_id (human, 9606, by default): a Gene ID belongs to one organism. Inferred pathways are computed from human pathways by orthology rather than curated for this species; in_disease pathways describe disease mechanisms. Returns up to limit pathways in source order, with total counting all pathways the source returned. An unknown gene, a gene with no pathways, or an organism mismatch returns an empty list. Reactome data is CC0 and refreshed in quarterly releases; no diagrams or images are returned.",
1048
+ "description": "Returns the lowest-level pathways a gene's products take part in, from Reactome (CC0, quarterly releases): curated human pathways and pathways inferred for other species. Pass the gene's own organism as `taxon_id`: a Gene ID belongs to one organism, and a mismatch returns an empty list. No diagrams or images are returned. taxon_id is human (9606) by default. Inferred pathways are computed from human pathways by orthology rather than curated for this species; in_disease pathways describe disease mechanisms. Returns up to limit pathways in source order, with total counting all pathways the source returned. An unknown gene or a gene with no pathways returns an empty list.",
875
1049
  "inputSchema": {
876
1050
  "type": "object",
877
1051
  "properties": {
@@ -897,11 +1071,37 @@ export const LOOKUP_MANIFEST = [
897
1071
  "limit": 1
898
1072
  }
899
1073
  },
1074
+ {
1075
+ "name": "gene_publications",
1076
+ "path": "lookup/gene-publications",
1077
+ "title": "Gene Publications",
1078
+ "description": "Lists the PubMed papers the US National Center for Biotechnology Information links to a gene, by NCBI Gene ID, most recently added first: title, journal, dates, first three authors, DOI, PubMed Central id, publication types and link. Only citation fields are returned, never an abstract or the full text. This is the curated gene-to-paper link list, not a literature search. `total` is how many papers are linked in all. Each paper also gives its author count. The order is by PubMed id, highest first, which is the order papers were added to PubMed; it is not the order of publication. The answer reports what a public database links to the gene: it is for research and is not medical advice. Takes a Gene ID only, never a sequence, a genome or a variant file; use `gene_resolve` to find the Gene ID for a symbol or alias. A gene with no linked papers, or an id no gene has, is a completed answer with `total` 0.",
1079
+ "inputSchema": {
1080
+ "type": "object",
1081
+ "properties": {
1082
+ "gene_id": {
1083
+ "type": "string",
1084
+ "description": "An NCBI Gene ID, digits only, for example 7157 for human TP53; `gene_resolve` finds it from a symbol or alias. Digits only, 1 to 12."
1085
+ },
1086
+ "limit": {
1087
+ "type": "integer",
1088
+ "description": "Papers returned, most recently added to PubMed first. From 1 to 20. Defaults to `10`."
1089
+ }
1090
+ },
1091
+ "required": [
1092
+ "gene_id"
1093
+ ]
1094
+ },
1095
+ "example": {
1096
+ "gene_id": "7157",
1097
+ "limit": 3
1098
+ }
1099
+ },
900
1100
  {
901
1101
  "name": "gene_resolve",
902
1102
  "path": "resolve/gene",
903
1103
  "title": "Gene Resolve",
904
- "description": "Give `query`: an official gene symbol (TP53), an alias (P53, HER2) or an Ensembl gene ID (ENSG00000141510; a version suffix is dropped). Letters, digits, dots, dashes and `_` only. `taxon_id` picks the organism and is human (9606) unless set. Returns the matching live genes, up to `limit`: genes whose official symbol is the query first, then genes that carry it as an alias, each in the source's order, with the NCBI Gene ID (the input of Gene Summary), the symbol, the full name, the aliases, the nomenclature status, the organism, the chromosome, the cytogenetic band and the gene page link. `matched_on` says how each gene matched. A search hit that carries the query as neither its symbol nor an alias is dropped. `ambiguous` is true when more than one gene matched and none has the query as its official symbol. An unknown query returns an empty matches list. Replaced and discontinued Gene IDs are not returned. A query whose search finds more than 20 live records fails rather than returning a partial answer. Data from NCBI Gene at the US National Center for Biotechnology Information; official human symbols are assigned by the HUGO Gene Nomenclature Committee.",
1104
+ "description": "Resolves a gene symbol (TP53), alias (P53, HER2) or Ensembl gene ID to the matching live genes in the Gene database of the US National Center for Biotechnology Information: NCBI Gene ID, symbol, full name, aliases, status, organism, chromosome, band and page link. A query whose search finds more than 20 live records fails rather than returning a partial answer. Give `query`: an official gene symbol, an alias or an Ensembl gene ID (ENSG00000141510; a version suffix is dropped). Letters, digits, dots, dashes and `_` only. `taxon_id` picks the organism and is human (9606) unless set. Returns up to `limit` genes: genes whose official symbol is the query first, then genes that carry it as an alias, each in the source's order. The NCBI Gene ID is the input of Gene Summary. `matched_on` says how each gene matched. A search hit that carries the query as neither its symbol nor an alias is dropped. `ambiguous` is true when more than one gene matched and none has the query as its official symbol. An unknown query returns an empty matches list. Replaced and discontinued Gene IDs are not returned. Data from NCBI Gene at the US National Center for Biotechnology Information; official human symbols are assigned by the HUGO Gene Nomenclature Committee.",
905
1105
  "inputSchema": {
906
1106
  "type": "object",
907
1107
  "properties": {
@@ -930,7 +1130,7 @@ export const LOOKUP_MANIFEST = [
930
1130
  "name": "gene_summary",
931
1131
  "path": "lookup/gene-summary",
932
1132
  "title": "Gene Summary",
933
- "description": "Describe a gene from its NCBI Gene ID or its official symbol: the symbol, the full name, the aliases and other names, the organism, the chromosome and cytogenetic band, the position on the current assembly with the strand, the exon count, the curated summary of its function with the note saying who wrote it, and the OMIM ids. Give exactly one of `gene_id` and `symbol`; `taxon_id` picks the organism for a symbol search and is human (9606) unless set. A symbol is matched without regard to case in the organism; when several genes carry it, the first is described and the rest are listed in `other_gene_ids`. `status` says whether the record is live, replaced (then `current_gene_id` names the record to use) or discontinued. `gene` is null when no gene has the id or the symbol. Covers every organism with genes in the US National Center for Biotechnology Information's Gene database. Coordinates are zero-based, as the source gives them.",
1133
+ "description": "Describes a gene from the Gene database of the US National Center for Biotechnology Information, by NCBI Gene ID or official symbol: symbol, full name, aliases, organism, chromosome and band, position and strand, exon count, curated function summary and OMIM ids. When several genes carry a symbol, the first is described and the rest are listed in `other_gene_ids`. Give exactly one of `gene_id` and `symbol`; `taxon_id` picks the organism for a symbol search and is human (9606) unless set. A symbol is matched without regard to case in the organism. The position is on the current assembly. The function summary comes with the note saying who wrote it. `status` says whether the record is live, replaced (then `current_gene_id` names the record to use) or discontinued. `gene` is null when no gene has the id or the symbol. Covers every organism with genes in the Gene database. Coordinates are zero-based, as the source gives them.",
934
1134
  "inputSchema": {
935
1135
  "type": "object",
936
1136
  "properties": {
@@ -957,7 +1157,7 @@ export const LOOKUP_MANIFEST = [
957
1157
  "name": "gene_variants_find",
958
1158
  "path": "find/gene-variants",
959
1159
  "title": "Gene Variants",
960
- "description": "Reports what a public registry, ClinVar, says about variants in a gene, for research; not medical advice. Classifications are submitters' and expert panels' interpretations. Supply exactly one NCBI Gene ID or official human gene symbol, never a person's genome, sequencing data or a VCF file. Aliases do not match: use gene_resolve to resolve aliases first. Optionally filter by ClinVar classification properties and expert panel review; these properties can include combined classifications. By default, single_gene excludes large deletions and duplications spanning multiple genes; include_multi_gene includes them. Returns up to 20 variants in search order and the total ClinVar search count. Empty classifications are null; no match returns total 0 and an empty variants list. Each vcv can be passed to variant_clinical_significance for details, including somatic and oncogenicity classifications. ClinVar refreshes weekly; classifications carry their last evaluated dates. NCBI places no restriction on use of ClinVar.",
1160
+ "description": "Reports what ClinVar, the public variant registry of the US National Center for Biotechnology Information, says about variants in a gene, by NCBI Gene ID or official human symbol: up to 20 variants with their classifications and the total count. Classifications are submitters' and expert panels' interpretations, for research; not medical advice. Aliases do not match. Supply exactly one NCBI Gene ID or official human gene symbol, never a person's genome, sequencing data or a VCF file. Use gene_resolve to resolve aliases first. Optionally filter by ClinVar classification properties and expert panel review; these properties can include combined classifications. By default, single_gene excludes large deletions and duplications spanning multiple genes; include_multi_gene includes them. Variants come in search order, and the total is the ClinVar search count. Empty classifications are null; no match returns total 0 and an empty variants list. Each vcv can be passed to variant_clinical_significance for details, including somatic and oncogenicity classifications. ClinVar refreshes weekly; classifications carry their last evaluated dates. NCBI places no restriction on use of ClinVar.",
961
1161
  "inputSchema": {
962
1162
  "type": "object",
963
1163
  "properties": {
@@ -1007,7 +1207,7 @@ export const LOOKUP_MANIFEST = [
1007
1207
  "name": "business_health_inspections",
1008
1208
  "path": "lookup/business-health-inspections",
1009
1209
  "title": "Health Inspections",
1010
- "description": "Given a New York City establishment id (CAMIS) or part of a trade name, return the matching food service establishments with their health inspections from the New York City Department of Health and Mental Hygiene: name, address, borough, ZIP code, cuisine and location, then for each inspection its date, type, score, letter grade with its date, the action taken and the violations cited, each with its code, description and whether it is critical. Give at least one of `establishment_id` and `name`; the id takes precedence when both are given. `name` matches anywhere in the trade name, ignoring case; `zipcode` narrows either search. Inspections are newest first, at most `limit` per establishment. The call reads the 200 newest violation rows that match, so a name shared by many establishments may leave out older inspections: add `zipcode` or use the id; when those rows all fall on one date the call fails as invalid input for the same reason. An establishment not yet inspected has an empty `inspections` list. Dates are YYYY-MM-DD and a value the source does not give is null. No match is a completed result with an empty `establishments` list.",
1210
+ "description": "Returns New York City food service establishments matching an establishment id (CAMIS) or part of a trade name, with their health inspections from the New York City Department of Health and Mental Hygiene: score, letter grade, action taken and violations cited. A name shared by many establishments may leave out older inspections: add `zipcode` or use the id. Each establishment has its name, address, borough, ZIP code, cuisine and location; each inspection its date, type, score, letter grade with its date, the action taken and the violations cited, each with its code, description and whether it is critical. Give at least one of `establishment_id` and `name`; the id takes precedence when both are given. `name` matches anywhere in the trade name, ignoring case; `zipcode` narrows either search. Inspections are newest first, at most `limit` per establishment. The call reads the 200 newest violation rows that match, which is why a broad name can leave out older inspections; when those rows all fall on one date the call fails as invalid input. An establishment not yet inspected has an empty `inspections` list. Dates are YYYY-MM-DD and a value the source does not give is null. No match is a completed result with an empty `establishments` list.",
1011
1211
  "inputSchema": {
1012
1212
  "type": "object",
1013
1213
  "properties": {
@@ -1039,7 +1239,7 @@ export const LOOKUP_MANIFEST = [
1039
1239
  "name": "person_health_provider",
1040
1240
  "path": "lookup/person-health-provider",
1041
1241
  "title": "Health Provider Registration",
1042
- "description": "Look up the national registration of an individual US health care practitioner (a doctor, nurse, pharmacist, therapist and the like) by 10-digit provider number, or by last name and state with optional first name and city. Returns each match with credential, whether the registration is active, specialties with licence state and number, practice address and mailing address, and the date the registry last updated the record. Use it to check that a practitioner in a directory, claim or referral exists and which specialty they are registered under. A registration is not a licence check and not proof that they still practise at the address; judge freshness by `last_updated_on`. Individuals only: organisations are not covered. `total` is the number of providers returned, at most `limit`; no match is `total: 0`. Exact numbers use the fresh, complete held monthly release when available; evidence.read states its scope and date, including for no match. Newer registrations may not be in that release. Specialty descriptions are null in the monthly data. Name searches and unavailable datasets use the live registry.",
1242
+ "description": "Returns the national registration of an individual US health care practitioner from the US Centers for Medicare & Medicaid Services, by 10-digit provider number or by name and state: credential, active status, specialties with license state and number, addresses and the last update date. A registration is not a license check, nor proof that they still practise at the address. Covers doctors, nurses, pharmacists, therapists and the like. A name search takes the last name and state, with optional first name and city. Use it to check that a practitioner in a directory, claim or referral exists and which specialty they are registered under. Judge freshness by `last_updated_on`. Individuals only: use company_health_provider for organizations. `total` is the number of providers returned, at most `limit`; no match is `total: 0`. Exact numbers use the fresh, complete held monthly release when available; evidence.read states its scope and date, including for no match. Newer registrations may not be in that release. Specialty descriptions are null in the monthly data. Name searches and unavailable datasets use the live registry.",
1043
1243
  "inputSchema": {
1044
1244
  "type": "object",
1045
1245
  "properties": {
@@ -1074,11 +1274,46 @@ export const LOOKUP_MANIFEST = [
1074
1274
  "npi": "1245319599"
1075
1275
  }
1076
1276
  },
1277
+ {
1278
+ "name": "company_health_provider",
1279
+ "path": "lookup/company-health-provider",
1280
+ "title": "Health Provider Registration (organization)",
1281
+ "description": "Returns US health care organizations (clinics, hospitals, pharmacies and suppliers) from the national provider register of the US Centers for Medicare & Medicaid Services, by 10-digit NPI or by name and state: names, status, specialties, license details, addresses and the authorized official. Registration is not a license check or proof of current practice at the address. Give a 10-digit NPI, or organization_name and state with an optional city, never both. Names match a prefix: a trailing * is appended when absent, with at least two characters before it. Returns registered names, active status, organizational subpart status, registration and update dates, specialties with primary flags and license details, practice and mailing addresses, and the authorized official name and title. The official telephone is omitted. The registry refreshes daily; judge each record by last_updated_on. Use person_health_provider for individual practitioners. total is the number returned, at most limit; no match completes with providers: [].",
1282
+ "inputSchema": {
1283
+ "type": "object",
1284
+ "properties": {
1285
+ "npi": {
1286
+ "type": "string",
1287
+ "description": "The organisation provider number. Give this, or organization_name and state, never both. A health provider number is exactly 10 digits."
1288
+ },
1289
+ "organization_name": {
1290
+ "type": "string",
1291
+ "description": "Organisation name prefix. Needs state; a trailing * is appended when absent. 2 to 100 characters. Give at least two characters before an optional trailing *."
1292
+ },
1293
+ "state": {
1294
+ "type": "string",
1295
+ "description": "US state code. Needs organization_name. A state is two capital letters, such as MN."
1296
+ },
1297
+ "city": {
1298
+ "type": "string",
1299
+ "description": "A city, to narrow a name search. An optional trailing * needs at least two preceding characters. 1 to 100 characters."
1300
+ },
1301
+ "limit": {
1302
+ "type": "integer",
1303
+ "description": "Most providers to return. From 1 to 20. Defaults to `5`."
1304
+ }
1305
+ },
1306
+ "required": []
1307
+ },
1308
+ "example": {
1309
+ "npi": "1881018208"
1310
+ }
1311
+ },
1077
1312
  {
1078
1313
  "name": "place_hospitals",
1079
1314
  "path": "lookup/place-hospitals",
1080
1315
  "title": "Hospitals",
1081
- "description": "List the hospitals registered with Medicare in a US ZIP code, from the hospital list of the US Centers for Medicare & Medicaid Services. Each hospital has its name, address, county, published main telephone line, type, ownership, whether it has emergency services and its overall quality rating from 1 to 5. The rating is null when the source gives no number for the hospital. A ZIP code with no registered hospital gives a total of 0 and an empty list. The total is the number of hospitals in the ZIP code, which can be more than the number returned.",
1316
+ "description": "Lists the hospitals registered with Medicare in a US ZIP code, from the hospital list of the US Centers for Medicare & Medicaid Services: name, address, county, main telephone line, type, ownership, emergency services and overall quality rating from 1 to 5. `total` counts every hospital in the ZIP code and can be more than the number returned. The rating is null when the source gives no number for the hospital. A ZIP code with no registered hospital gives a total of 0 and an empty list.",
1082
1317
  "inputSchema": {
1083
1318
  "type": "object",
1084
1319
  "properties": {
@@ -1104,7 +1339,7 @@ export const LOOKUP_MANIFEST = [
1104
1339
  "name": "company_legal_identifier",
1105
1340
  "path": "lookup/company-legal-identifier",
1106
1341
  "title": "Legal Entity Identifier",
1107
- "description": "Look up registered legal entities by a company's legal name or by its 20-character Legal Entity Identifier. Give exactly one of `name` and `lei`. Each entity has its identifier, legal name and other names, entity status, jurisdiction, legal form code, registration number, creation date, the identifier's registration status, registration, last update and next renewal dates, how well the record is corroborated, and its legal and headquarters addresses. It answers whether this is the legal entity you think it is, and whether its registration is current. A name is a text match, so similarly named entities come back too: tell them apart by the identifier on each row, and prefer the identifier when you have it, since it is an exact match. `total` is the number of entities that matched, which may be more than `limit`. No match is a completed result with `total` 0 and an empty list. Covers legal entities that hold an identifier; parent and child relationships are not included.",
1342
+ "description": "Returns registered legal entities by legal name or 20-character Legal Entity Identifier, from the Global Legal Entity Identifier Foundation: identifier, names, status, jurisdiction, legal form, registration number and dates, how well the record is corroborated, and addresses. It answers whether an entity is the one you think and whether its registration is current. Parent and child relationships are not included. Give exactly one of `name` and `lei`. Each entity has its identifier, legal name and other names, entity status, jurisdiction, legal form code, registration number, creation date, the identifier's registration status, registration, last update and next renewal dates, how well the record is corroborated, and its legal and headquarters addresses. A name is a text match, so similarly named entities come back too: tell them apart by the identifier on each row, and prefer the identifier when you have it, since it is an exact match. `total` is the number of entities that matched, which may be more than `limit`. No match is a completed result with `total` 0 and an empty list. Covers legal entities that hold an identifier.",
1108
1343
  "inputSchema": {
1109
1344
  "type": "object",
1110
1345
  "properties": {
@@ -1127,11 +1362,52 @@ export const LOOKUP_MANIFEST = [
1127
1362
  "lei": "DPRBOZP0K5RM2YE8UU08"
1128
1363
  }
1129
1364
  },
1365
+ {
1366
+ "name": "business_liquor_license",
1367
+ "path": "lookup/business-liquor-license",
1368
+ "title": "Liquor License",
1369
+ "description": "Returns active liquor licenses from the register of the New York State Liquor Authority, refreshed daily, by license id or part of a trade or legal name: class, premises, issue dates and expiration date. Pending and inactive licenses are not searched, so an empty list is not evidence that the location never held one. `state` is required and must be NY. Give at least one of `license_id` and `name`; the id takes precedence when both are given. Names are matched as stored, ignoring case, as a substring of the trade or legal name. Try a short distinctive fragment: SORLEY matches MC SORLEYS, but McSorley's does not. `zipcode` narrows either search. Returns at most `limit` licenses, newest last issue date first. Missing values are null; dates are YYYY-MM-DD. An empty licenses list is a completed result: no active license was found under that name or id.",
1370
+ "inputSchema": {
1371
+ "type": "object",
1372
+ "properties": {
1373
+ "state": {
1374
+ "type": "string",
1375
+ "enum": [
1376
+ "NY"
1377
+ ],
1378
+ "description": "State issuing the licence"
1379
+ },
1380
+ "license_id": {
1381
+ "type": "string",
1382
+ "description": "The source licence identifier; takes precedence over name"
1383
+ },
1384
+ "name": {
1385
+ "type": "string",
1386
+ "description": "A distinctive fragment of the trade or legal name, matched ignoring case. 2 to 100 characters."
1387
+ },
1388
+ "zipcode": {
1389
+ "type": "string",
1390
+ "description": "ZIP code to narrow the search"
1391
+ },
1392
+ "limit": {
1393
+ "type": "integer",
1394
+ "description": "Most licences to return. From 1 to 25. Defaults to `10`."
1395
+ }
1396
+ },
1397
+ "required": [
1398
+ "state"
1399
+ ]
1400
+ },
1401
+ "example": {
1402
+ "state": "NY",
1403
+ "license_id": "0138-21-123999"
1404
+ }
1405
+ },
1130
1406
  {
1131
1407
  "name": "company_lobbying",
1132
1408
  "path": "lookup/company-lobbying",
1133
1409
  "title": "Lobbying",
1134
- "description": "Search US federal lobbying registrations and quarterly reports by client name, newest posted first. Reports are posted continuously. The name match is partial: Nvidia can match both NVIDIA and NVIDIA CORPORATION, with different client records for different lobbying firms. Tell clients apart by client_id, which is unique across lobbying firms. Each filing includes its firm, client, reported income and expenses in US dollars, issues, government entities and lobbyist counts. Lobbyist names are not returned. Missing amounts are null. No match is a completed result with total 0 and an empty filings list. Cite evidence.retrieved_at as the retrieval date. Senate Office of Public Records cannot vouch for the data or analyses derived from these data after the data have been retrieved from LDA.gov.",
1410
+ "description": "Searches US federal lobbying registrations and quarterly reports filed with the US Senate Office of Public Records, by client name, newest posted first: firm, client, reported income and expenses, issues, government entities and lobbyist counts. The name match is partial, so one company can return several client records; tell them apart by `client_id`. Reports are posted continuously. Nvidia can match both NVIDIA and NVIDIA CORPORATION, with different client records for different lobbying firms. client_id is unique across lobbying firms. Amounts are in US dollars. Lobbyist names are not returned. Missing amounts are null. No match is a completed result with total 0 and an empty filings list. Cite evidence.retrieved_at as the retrieval date. Senate Office of Public Records cannot vouch for the data or analyses derived from these data after the data have been retrieved from LDA.gov.",
1135
1411
  "inputSchema": {
1136
1412
  "type": "object",
1137
1413
  "properties": {
@@ -1158,11 +1434,53 @@ export const LOOKUP_MANIFEST = [
1158
1434
  "limit": 1
1159
1435
  }
1160
1436
  },
1437
+ {
1438
+ "name": "company_medicare_ownership",
1439
+ "path": "lookup/company-medicare-ownership",
1440
+ "title": "Medicare Ownership",
1441
+ "description": "Returns the owners of a US hospital, nursing home, home health agency, hospice, health center or rural health clinic, as the facility reported them to Medicare, from the US Centers for Medicare & Medicaid Services: organizations and individuals with role, share and join date, highest share first. The register is released monthly; release_file_date says which release answered. facility_type picks the register: each kind of facility is its own dataset at the source. Give the facility enrollment_id, or part of its organization_name (matched as a substring, upper-cased), never both. Returns up to limit facilities, each with its owners: organizations and individuals with their role, share, join date, city and state, and owner-type flags such as holding_company, private_equity_company or reit. Individuals listed are owners, officers, directors or managing employees in that capacity; their street addresses are left out. No match completes with facilities: []. When truncated is true the source page was full and the last facility may be missing owners.",
1442
+ "inputSchema": {
1443
+ "type": "object",
1444
+ "properties": {
1445
+ "facility_type": {
1446
+ "type": "string",
1447
+ "enum": [
1448
+ "hospital",
1449
+ "skilled_nursing",
1450
+ "home_health",
1451
+ "hospice",
1452
+ "health_center",
1453
+ "rural_health_clinic"
1454
+ ],
1455
+ "description": "Which register to search: each kind of facility is its own dataset at the source"
1456
+ },
1457
+ "enrollment_id": {
1458
+ "type": "string",
1459
+ "description": "The facility Medicare enrolment id. Give this or organization_name, never both. An enrolment id is O followed by 14 digits."
1460
+ },
1461
+ "organization_name": {
1462
+ "type": "string",
1463
+ "description": "Part of the enrolled organisation legal name; matched as a substring, upper-cased. 3 to 100 characters. Must be well-formed text, without unpaired UTF-16 surrogates."
1464
+ },
1465
+ "limit": {
1466
+ "type": "integer",
1467
+ "description": "Most facilities to return. From 1 to 10. Defaults to `3`."
1468
+ }
1469
+ },
1470
+ "required": [
1471
+ "facility_type"
1472
+ ]
1473
+ },
1474
+ "example": {
1475
+ "facility_type": "hospital",
1476
+ "enrollment_id": "O20020812000015"
1477
+ }
1478
+ },
1161
1479
  {
1162
1480
  "name": "company_motor_carrier",
1163
1481
  "path": "lookup/company-motor-carrier",
1164
1482
  "title": "Motor Carrier Record",
1165
- "description": "Given a US Department of Transportation (DOT) number or a motor carrier (MC) number, return the carrier's registration record from the US Department of Transportation: legal and trading name, whether it is active, legal form, physical address, telephone number, kind of operation, the classes of operation and the cargo it registered, its power units and drivers, its reported annual mileage, whether it carries hazardous materials, its safety rating with the date, its latest review date and the date it last updated its registration. Give exactly one of `dot_number` and `mc_number`. A DOT number finds one carrier; an MC number can find more than one, so check `status`. Dates are YYYY-MM-DD and a value the source does not give is null. `total` is the number of carriers returned, at most 5; no match is a completed result with `total` 0 and an empty list. It does not cover operating authority, insurance on file, out-of-service rates or crash counts.",
1483
+ "description": "Returns a motor carrier's registration record from the US Department of Transportation, by DOT number or MC number: names, active status, address, telephone, operation, cargo, power units, drivers, mileage, hazardous materials, safety rating and review dates. It does not cover operating authority, insurance on file, out-of-service rates or crash counts. Give exactly one of `dot_number` and `mc_number`. A DOT number finds one carrier; an MC number can find more than one, so check `status`. The record gives the legal and trading name, whether it is active, legal form, physical address, telephone number, kind of operation, the classes of operation and the cargo it registered, its power units and drivers, its reported annual mileage, whether it carries hazardous materials, its safety rating with the date, its latest review date and the date it last updated its registration. Dates are YYYY-MM-DD and a value the source does not give is null. `total` is the number of carriers returned, at most 5; no match is a completed result with `total` 0 and an empty list.",
1166
1484
  "inputSchema": {
1167
1485
  "type": "object",
1168
1486
  "properties": {
@@ -1185,7 +1503,7 @@ export const LOOKUP_MANIFEST = [
1185
1503
  "name": "place_resolve",
1186
1504
  "path": "resolve/place",
1187
1505
  "title": "Place Resolve",
1188
- "description": "Resolve a US street address to the matched address, its latitude and longitude, and the codes for its state, county and census tract (plus census block and incorporated place when the source has them). Use it first when another fact about a place is keyed by state and county, or by coordinates, so an agent does not have to guess them. Street addresses in the United States only: no post-office boxes, no place names or landmarks, no addresses outside the US. Give the whole address on one line, for example \"1600 Pennsylvania Ave NW, Washington, DC\". Only the best match is returned; `candidates` is how many matches the source offered. An address that matches nothing is a completed result with `found` false and every other field null.",
1506
+ "description": "Resolves a US street address to the matched address, its latitude and longitude, and its state, county and census tract codes (plus census block and incorporated place when the source has them), from the US Census Bureau. Street addresses in the United States only: no post-office boxes, place names or landmarks. Only the best match is returned. Use it first when another fact about a place is keyed by state and county, or by coordinates, so an agent does not have to guess them. Give the whole address on one line, for example \"1600 Pennsylvania Ave NW, Washington, DC\". `candidates` is how many matches the source offered. An address that matches nothing is a completed result with `found` false and every other field null.",
1189
1507
  "inputSchema": {
1190
1508
  "type": "object",
1191
1509
  "properties": {
@@ -1206,7 +1524,7 @@ export const LOOKUP_MANIFEST = [
1206
1524
  "name": "product_recalls",
1207
1525
  "path": "lookup/product-recalls",
1208
1526
  "title": "Product Recalls",
1209
- "description": "List the recalls of US products that match a product name, a manufacturer or, for consumer products, words from a recall title, optionally within a date range. `category` is required and picks the regulator: `consumer` is consumer products (appliances, tools, toys, furniture, ladders, bicycles, children's products and the like) from the US Consumer Product Safety Commission; `food`, `drug` and `device` are food, drugs and medical devices from the US Food and Drug Administration's enforcement reports, where `classification` (Class I, II or III) narrows the list. Vehicles are Vehicle Recalls. Each recall gives the recall number, the date it was announced and last published, what was recalled, the models and units, the hazard or reason, and the manufacturer or recalling firm. Consumer recalls also give the title, injuries, remedies, retailers and a link to the notice; food, drug and device recalls give the status, the class and where it was distributed. Newest first. Use it to check a product before a purchase, a resale, a claim or a listing. A recall says what was recalled, not whether a particular unit has been repaired. Give at least one of `product_name`, `title` and `manufacturer`; dates alone are refused. `title` is for consumer only. `total` is how many recalls matched, including any beyond `limit`, and is 0 when none did.",
1527
+ "description": "Lists US product recalls matching a product name, a manufacturer or a recall title, newest first: consumer products from the US Consumer Product Safety Commission, and food, drugs and medical devices from the US Food and Drug Administration. Each gives what was recalled, the hazard and the firm. A recall does not say whether a particular unit has been repaired. `category` is required and picks the regulator: `consumer` is consumer products (appliances, tools, toys, furniture, ladders, bicycles, children's products and the like); `food`, `drug` and `device` come from the enforcement reports of the US Food and Drug Administration, where `classification` (Class I, II or III) narrows the list. Vehicles are Vehicle Recalls. Each recall gives the recall number, the date it was announced and last published, what was recalled, the models and units, the hazard or reason, and the manufacturer or recalling firm. Consumer recalls also give the title, injuries, remedies, retailers and a link to the notice; food, drug and device recalls give the status, the class and where it was distributed. Use it to check a product before a purchase, a resale, a claim or a listing. Give at least one of `product_name`, `title` and `manufacturer`, optionally with a date range; dates alone are refused. `title` is for consumer only. `total` is how many recalls matched, including any beyond `limit`, and is 0 when none did.",
1210
1528
  "inputSchema": {
1211
1529
  "type": "object",
1212
1530
  "properties": {
@@ -1268,7 +1586,7 @@ export const LOOKUP_MANIFEST = [
1268
1586
  "name": "protein_domains",
1269
1587
  "path": "lookup/protein-domains",
1270
1588
  "title": "Protein Domains",
1271
- "description": "InterPro entries from InterPro at EMBL-EBI, under CC0 1.0. Returns integrated InterPro entries only, never member-database signatures. Covers canonical UniProtKB sequences; isoform accessions are refused. Filter by entry type or omit types for all entries. An empty types list keeps no entries. Entries are sorted by their first location’s start, then identifier. Locations span the first through last fragment; discontinuous marks multiple fragments or a fragment whose dc-status is not CONTINUOUS. Releases arrive about every eight weeks; no per-entry date is supplied, so changes are recorded as observations. Returns the first page only (up to 200 entries), with truncated true when another page exists. No match completes with an empty entries list and null protein_length.",
1589
+ "description": "Returns the integrated InterPro entries on a protein's canonical UniProtKB sequence, with their locations, from InterPro at EMBL-EBI under CC0 1.0. Member-database signatures are never returned, and isoform accessions are refused. Only the first page, up to 200 entries, is returned; `truncated` is true when another page exists. Filter by entry type or omit types for all entries. An empty types list keeps no entries. Entries are sorted by their first location’s start, then identifier. Locations span the first through last fragment; discontinuous marks multiple fragments or a fragment whose dc-status is not CONTINUOUS. Releases arrive about every eight weeks; no per-entry date is supplied, so changes are recorded as observations. No match completes with an empty entries list and null protein_length.",
1272
1590
  "inputSchema": {
1273
1591
  "type": "object",
1274
1592
  "properties": {
@@ -1309,7 +1627,7 @@ export const LOOKUP_MANIFEST = [
1309
1627
  "name": "protein_function",
1310
1628
  "path": "lookup/protein-function",
1311
1629
  "title": "Protein Function",
1312
- "description": "Protein annotations from UniProt under CC BY 4.0, attributed to the UniProt Consortium. Covers reviewed and unreviewed UniProtKB entries. Function texts retain their literature citations, with deduplicated PubMed identifiers also returned separately. Includes names, genes, organism, length, subcellular locations, catalytic activities, EC numbers, keywords and annotation score. UniProt releases updates every eight weeks; last_updated is the entry’s last annotation date. The amino-acid sequence is returned only when include_sequence is true, otherwise null. Absent values and collections are null. A merged accession resolves to its primary entry. A deleted or demerged accession returns no protein and the source’s structured inactive reason, including replacement accessions when supplied. No match returns null for both.",
1630
+ "description": "Returns a protein's annotations from UniProt, under CC BY 4.0 and attributed to the UniProt Consortium: function text with its citations, names, genes, organism, length, subcellular locations, catalytic activities, EC numbers, keywords and annotation score. Covers reviewed and unreviewed UniProtKB entries. The amino-acid sequence is returned only when `include_sequence` is true. Function texts retain their literature citations, with deduplicated PubMed identifiers also returned separately. UniProt releases updates every eight weeks; last_updated is the entry’s last annotation date. Without include_sequence the sequence is null. Absent values and collections are null. A merged accession resolves to its primary entry. A deleted or demerged accession returns no protein and the source’s structured inactive reason, including replacement accessions when supplied. No match returns null for both.",
1313
1631
  "inputSchema": {
1314
1632
  "type": "object",
1315
1633
  "properties": {
@@ -1335,7 +1653,7 @@ export const LOOKUP_MANIFEST = [
1335
1653
  "name": "protein_resolve",
1336
1654
  "path": "resolve/protein",
1337
1655
  "title": "Protein Resolve",
1338
- "description": "Protein identities from UniProtKB under CC BY 4.0, attributed to the UniProt Consortium. For research and education only; not medical advice. Give a gene symbol or synonym (TP53, P53, HER2), an entry name (P53_HUMAN), or a protein name (insulin). Exact gene names and synonyms are searched first. If none match, protein names are searched unless the query is a single uppercase token or contains digits without spaces. taxon_id defaults to human (9606); reviewed_only defaults to true. Entry names are resolved directly across organisms and review statuses. Returns up to limit matches, reviewed entries first then source order, with recommended full protein name, primary gene, gene synonyms, organism, annotation score and how each matched. ambiguous is true when multiple matches are kept and none matched an entry name or primary gene. total is the sum of source counts for the searches made. With reviewed_only false, unreviewed entries are searched and counted only when reviewed matches do not fill limit. No match returns an empty list. Absent scalar values are null. Use the accession with Protein Function, Sequence, Structure or Domains for those facts. UniProt releases updates every eight weeks.",
1656
+ "description": "Resolves a gene symbol or synonym (TP53, HER2), an entry name (P53_HUMAN) or a protein name (insulin) to protein entries from UniProtKB, under CC BY 4.0 and attributed to the UniProt Consortium: protein name, genes, organism, annotation score and how each matched. Defaults to reviewed human entries. For research and education only; not medical advice. Exact gene names and synonyms are searched first. If none match, protein names are searched unless the query is a single uppercase token or contains digits without spaces. taxon_id defaults to human (9606); reviewed_only defaults to true. Entry names are resolved directly across organisms and review statuses. Returns up to limit matches, reviewed entries first then source order, with recommended full protein name, primary gene, gene synonyms, organism, annotation score and how each matched. ambiguous is true when multiple matches are kept and none matched an entry name or primary gene. total is the sum of source counts for the searches made. With reviewed_only false, unreviewed entries are searched and counted only when reviewed matches do not fill limit. No match returns an empty list. Absent scalar values are null. Use the accession with Protein Function, Sequence, Structure or Domains for those facts. UniProt releases updates every eight weeks.",
1339
1657
  "inputSchema": {
1340
1658
  "type": "object",
1341
1659
  "properties": {
@@ -1368,7 +1686,7 @@ export const LOOKUP_MANIFEST = [
1368
1686
  "name": "protein_sequence",
1369
1687
  "path": "lookup/protein-sequence",
1370
1688
  "title": "Protein Sequence",
1371
- "description": "Protein sequences from UniProt under CC BY 4.0, attributed to the UniProt Consortium. Medical or genetic information is for research and education only. The sequence is the reference sequence UniProtKB holds for a protein, never an individual’s sequence. Covers reviewed and unreviewed entries; an accession with an isoform suffix (P04637-2) returns that isoform’s sequence. Returns the one-letter sequence, length, molecular weight in daltons, CRC64 and MD5 checksums, gene, organism and the isoforms the entry lists. sequence_version and last_sequence_update describe the entry, also for an isoform. UniProt releases updates every eight weeks. Absent values are null. A merged, demerged or deleted accession returns no protein and the source’s inactive reason with any replacement accessions. No match, including an isoform the entry does not list, returns null for both.",
1689
+ "description": "Returns the reference sequence UniProtKB holds for a protein, from UniProt under CC BY 4.0, attributed to the UniProt Consortium: the one-letter sequence, length, molecular weight in daltons, checksums, gene, organism and listed isoforms. It is never an individual's sequence. Medical or genetic information is for research and education only. Covers reviewed and unreviewed entries; an accession with an isoform suffix (P04637-2) returns that isoform’s sequence. The checksums are CRC64 and MD5. sequence_version and last_sequence_update describe the entry, also for an isoform. UniProt releases updates every eight weeks. Absent values are null. A merged, demerged or deleted accession returns no protein and the source’s inactive reason with any replacement accessions. No match, including an isoform the entry does not list, returns null for both.",
1372
1690
  "inputSchema": {
1373
1691
  "type": "object",
1374
1692
  "properties": {
@@ -1389,7 +1707,7 @@ export const LOOKUP_MANIFEST = [
1389
1707
  "name": "protein_structure",
1390
1708
  "path": "lookup/protein-structure",
1391
1709
  "title": "Protein Structure",
1392
- "description": "Give the structure of a protein by its UniProt accession. `coverage` picks which kind: `experimental` lists the newest entries in the Protein Data Bank that contain the protein, each with its title, experimental method, resolution in angstrom, release date, page and structure file, with `total` counting every matching entry; `predicted` returns the predicted model for the accession, with its version, creation date, residue range, mean confidence, the fraction of residues at each confidence level, and its structure and error-image files, or null when no model exists. A predicted model is a computed estimate with per-residue confidence, not an experimental structure: regions of low or very low confidence should not be read as structure. Predicted models come from the predicted-structure database at EMBL-EBI, used under CC BY 4.0; experimental entries come from the RCSB Protein Data Bank. Use it to check whether a protein has a solved structure, to find the file to load into a viewer or a docking run, or to judge how far a predicted model can be trusted. Covers proteins with a UniProt accession. The sequence, alignment links and the names of the prediction software and its maker are not returned.",
1710
+ "description": "Returns a protein's structures by UniProt accession: with `coverage` set to `experimental`, the newest RCSB Protein Data Bank entries with method, resolution, release date and files; with `predicted`, the EMBL-EBI predicted model with its confidence and files. A predicted model is a computed estimate, not an experimental structure: low-confidence regions should not be read as structure. `experimental` lists the newest entries in the Protein Data Bank that contain the protein, each with its title, experimental method, resolution in angstrom, release date, page and structure file, with `total` counting every matching entry. `predicted` returns the predicted model for the accession, with its version, creation date, residue range, mean confidence, the fraction of residues at each confidence level, and its structure and error-image files, or null when no model exists. Predicted models come from the predicted-structure database at EMBL-EBI, used under CC BY 4.0; experimental entries come from the RCSB Protein Data Bank. Use it to check whether a protein has a solved structure, to find the file to load into a viewer or a docking run, or to judge how far a predicted model can be trusted. Covers proteins with a UniProt accession. The sequence, alignment links and the names of the prediction software and its maker are not returned.",
1393
1711
  "inputSchema": {
1394
1712
  "type": "object",
1395
1713
  "properties": {
@@ -1421,11 +1739,61 @@ export const LOOKUP_MANIFEST = [
1421
1739
  "limit": 2
1422
1740
  }
1423
1741
  },
1742
+ {
1743
+ "name": "company_financials",
1744
+ "path": "lookup/company-financials",
1745
+ "title": "Reported Financials",
1746
+ "description": "Returns one reported financial figure of a US public company, by Central Index Key (CIK), from its filings with the US Securities and Exchange Commission: one value per period, newest first, with dates, fiscal period, form, filing date and accession number. Figures are as the company reported them; a later filing that restates a period replaces the earlier value. The CIK is the registrant number the US Securities and Exchange Commission assigns to every filer, as for Company Filings. Looks up by identifier only: it does not search by company name or ticker. `metric` is one of `revenue`, `net_income`, `operating_income`, `total_assets`, `total_liabilities`, `stockholders_equity`, `cash` or `eps_diluted`; `period` is `annual` (default) or `quarterly`. Returns the company name, the US GAAP tag and unit the figures come from, and each value's calendar frame, start and end dates, fiscal year and period. Figures are not adjusted or restated by anyone else. `periods` is empty when the company never reported the metric under its US GAAP tag. History is kept per series: Changes addresses one by the padded identifier, metric and period joined with colons (`0000320193:revenue:annual`); a call with a non-default `limit` is kept as a query.",
1747
+ "inputSchema": {
1748
+ "type": "object",
1749
+ "properties": {
1750
+ "cik": {
1751
+ "type": "string",
1752
+ "description": "The registry identifier (CIK), for example 320193. Shorter numbers are padded with zeros. A CIK is 1 to 10 digits."
1753
+ },
1754
+ "metric": {
1755
+ "type": "string",
1756
+ "enum": [
1757
+ "revenue",
1758
+ "net_income",
1759
+ "operating_income",
1760
+ "total_assets",
1761
+ "total_liabilities",
1762
+ "stockholders_equity",
1763
+ "cash",
1764
+ "eps_diluted"
1765
+ ],
1766
+ "description": "Which reported figure to return"
1767
+ },
1768
+ "period": {
1769
+ "type": "string",
1770
+ "enum": [
1771
+ "annual",
1772
+ "quarterly"
1773
+ ],
1774
+ "description": "Fiscal years or fiscal quarters. Defaults to `\"annual\"`."
1775
+ },
1776
+ "limit": {
1777
+ "type": "integer",
1778
+ "description": "Most periods to return, newest first. From 1 to 20. Defaults to `5`."
1779
+ }
1780
+ },
1781
+ "required": [
1782
+ "cik",
1783
+ "metric"
1784
+ ]
1785
+ },
1786
+ "example": {
1787
+ "cik": "320193",
1788
+ "metric": "revenue",
1789
+ "limit": 2
1790
+ }
1791
+ },
1424
1792
  {
1425
1793
  "name": "variant_clinical_significance",
1426
1794
  "path": "lookup/variant-clinical-significance",
1427
1795
  "title": "Variant Clinical Significance",
1428
- "description": "Reports what a public registry, ClinVar, says about one variant, for research; not medical advice. Classifications are submitters' and expert panels' interpretations. Supply exactly one ClinVar VCV accession or dbSNP rsID, never a person's genome, sequencing data or a VCF file. A versioned VCV identifies the base accession; the result reports the current accession version. An rsID can match several alleles: returns up to five matching variations. Includes germline, somatic clinical impact and oncogenicity classifications, review status, conditions and last evaluated dates. Empty classifications are null; no match returns an empty variants list. ClinVar refreshes weekly, and accession versions change when records change. NCBI places no restriction on use of ClinVar.",
1796
+ "description": "Reports what ClinVar, the public variant registry of the US National Center for Biotechnology Information, says about one variant by VCV accession or dbSNP rsID: germline, somatic clinical impact and oncogenicity classifications, review status, conditions and last evaluated dates. Classifications are submitters' and expert panels' interpretations, for research; not medical advice. Supply exactly one ClinVar VCV accession or dbSNP rsID, never a person's genome, sequencing data or a VCF file. A versioned VCV identifies the base accession; the result reports the current accession version. An rsID can match several alleles: returns up to five matching variations. Empty classifications are null; no match returns an empty variants list. ClinVar refreshes weekly, and accession versions change when records change. NCBI places no restriction on use of ClinVar.",
1429
1797
  "inputSchema": {
1430
1798
  "type": "object",
1431
1799
  "properties": {
@@ -1448,7 +1816,7 @@ export const LOOKUP_MANIFEST = [
1448
1816
  "name": "variant_resolve",
1449
1817
  "path": "resolve/variant",
1450
1818
  "title": "Variant Resolve",
1451
- "description": "Says which variant a public registry, ClinVar, records under one identifier, for research; not medical advice. Supply exactly one HGVS expression on a reference sequence accession (genomic, coding, non-coding or protein) or one dbSNP rsID, never a person's genome, sequencing data or a VCF file. The expression is matched as one quoted variant name; expressions containing double quotes or square brackets are refused, so use the rsID for repeat notation. An rsID can match several alleles at one position: returns up to five variations carrying that rsID. A short protein change can match several variants too; ambiguous is then true. No match returns an empty variants list. Identity only: no germline, somatic or oncogenicity classification, conditions or submissions; pass vcv to variant_clinical_significance for those. ClinVar refreshes weekly, and accession versions change when records change. NCBI places no restriction on use of ClinVar.",
1819
+ "description": "Says which variant ClinVar, the public variant registry of the US National Center for Biotechnology Information, records under one HGVS expression or dbSNP rsID, for research; not medical advice. Identity only: no germline, somatic or oncogenicity classification, conditions or submissions; pass vcv to variant_clinical_significance for those. Supply exactly one HGVS expression on a reference sequence accession (genomic, coding, non-coding or protein) or one dbSNP rsID, never a person's genome, sequencing data or a VCF file. The expression is matched as one quoted variant name; expressions containing double quotes or square brackets are refused, so use the rsID for repeat notation. An rsID can match several alleles at one position: returns up to five variations carrying that rsID. A short protein change can match several variants too; ambiguous is then true. No match returns an empty variants list. ClinVar refreshes weekly, and accession versions change when records change. NCBI places no restriction on use of ClinVar.",
1452
1820
  "inputSchema": {
1453
1821
  "type": "object",
1454
1822
  "properties": {
@@ -1471,7 +1839,7 @@ export const LOOKUP_MANIFEST = [
1471
1839
  "name": "company_vat_registration",
1472
1840
  "path": "lookup/company-vat-registration",
1473
1841
  "title": "VAT Registration",
1474
- "description": "Check whether a VAT number is registered today for cross-border trade in an EU member state or Northern Ireland. Give `country`, the two-letter code the source uses (`EL` for Greece, `XI` for Northern Ireland), and `vat_number`; spaces, dots and dashes are removed, and a leading country code equal to `country` is removed. `registered` is true when the number is registered and false when the source says it is not. The registered name and address come back where the member state gives them; some confirm a number and withhold both, which is `null` here. `checked_at` is when the source made the check. A number that is not registered is a completed result. When a member state's own service does not answer or is too busy, the call fails and is never reported as not registered. It confirms registration, not who owns or controls the company.",
1842
+ "description": "Checks with the European Commission whether a VAT number is registered today for cross-border trade in an EU member state or Northern Ireland, with the registered name and address where the member state gives them. It confirms registration, not who owns or controls the company. A member state service that does not answer fails the call. Give `country`, the two-letter code the source uses (`EL` for Greece, `XI` for Northern Ireland), and `vat_number`; spaces, dots and dashes are removed, and a leading country code equal to `country` is removed. `registered` is true when the number is registered and false when the source says it is not. Some member states confirm a number and withhold the name and address, which are then `null`. `checked_at` is when the source made the check. A number that is not registered is a completed result. When a member state's own service does not answer or is too busy, the call fails and is never reported as not registered.",
1475
1843
  "inputSchema": {
1476
1844
  "type": "object",
1477
1845
  "properties": {
@@ -1528,7 +1896,7 @@ export const LOOKUP_MANIFEST = [
1528
1896
  "name": "vehicle_complaints",
1529
1897
  "path": "lookup/vehicle-complaints",
1530
1898
  "title": "Vehicle Complaints",
1531
- "description": "Summarize what owners have reported to the US safety regulator about a vehicle by make, model and model year: how many complaints there are, how many involved a crash, a fire, injuries or deaths, which components are reported most, and the newest complaints with their dates, components and the owner's own words. Use it to check a used vehicle before a purchase, a loan, a claim or a fleet decision. Covers vehicles sold in the United States. Complaints are reports by owners, not findings by the regulator. A complaint does not show that the vehicle has a defect, and a model with few complaints is not proven free of one. To see the safety recalls instead, use Vehicle Recalls. `total` is 0 when the model has no complaints.",
1899
+ "description": "Summarizes what owners have reported to the US National Highway Traffic Safety Administration about a make, model and model year: complaint counts, crashes, fires, injuries, deaths, the components reported most and the newest complaints in the owner's words. Complaints are reports by owners, not findings by the regulator. A complaint does not show that the vehicle has a defect. A model with few complaints is not proven free of a defect. Use it to check a used vehicle before a purchase, a loan, a claim or a fleet decision. Covers vehicles sold in the United States. To see the safety recalls instead, use Vehicle Recalls. `total` is 0 when the model has no complaints.",
1532
1900
  "inputSchema": {
1533
1901
  "type": "object",
1534
1902
  "properties": {
@@ -1566,7 +1934,7 @@ export const LOOKUP_MANIFEST = [
1566
1934
  "name": "vehicle_identification",
1567
1935
  "path": "lookup/vehicle-identification",
1568
1936
  "title": "Vehicle Identification",
1569
- "description": "Decode a 17-character vehicle identification number (VIN) into the vehicle it names: make, model, model year, trim, body class, engine, fuel, transmission, manufacturer and assembly plant. Use it to confirm that a vehicle in a listing, title, claim or invoice is what it says it is. Covers vehicles sold in the United States. `decoded` is false when the number does not resolve to a vehicle; `notes` then says why.",
1937
+ "description": "Decodes a 17-character vehicle identification number (VIN), from the records of the US National Highway Traffic Safety Administration: make, model, model year, trim, body class, engine, fuel, transmission, manufacturer and assembly plant. Covers vehicles sold in the United States. `decoded` is false when the number does not resolve to a vehicle; `notes` then says why. Use it to confirm that a vehicle in a listing, title, claim or invoice is what it says it is.",
1570
1938
  "inputSchema": {
1571
1939
  "type": "object",
1572
1940
  "properties": {
@@ -1591,7 +1959,7 @@ export const LOOKUP_MANIFEST = [
1591
1959
  "name": "vehicle_recalls",
1592
1960
  "path": "lookup/vehicle-recalls",
1593
1961
  "title": "Vehicle Recalls",
1594
- "description": "List the safety recalls issued for a vehicle by make, model and model year: the campaign number, the date it was reported, the affected component, what is wrong, the risk, the remedy and whether the owner is told to park the vehicle. Use it to check a used vehicle before a purchase, a loan, a claim or a fleet decision. Covers vehicles sold in the United States. These are the recalls issued for the model. The result does not say whether a particular vehicle has had the repair done. To start from a vehicle identification number, decode it first with Vehicle Identification, which returns the make, model and year. `total` is 0 when the model has no recalls.",
1962
+ "description": "Lists the safety recalls issued for a make, model and model year, from the US National Highway Traffic Safety Administration: campaign number, report date, component, what is wrong, the risk, the remedy and whether owners are told to park the vehicle. These are the recalls for the model, not proof that a particular vehicle has had the repair done. Use it to check a used vehicle before a purchase, a loan, a claim or a fleet decision. Covers vehicles sold in the United States. To start from a vehicle identification number, decode it first with Vehicle Identification, which returns the make, model and year. `total` is 0 when the model has no recalls.",
1595
1963
  "inputSchema": {
1596
1964
  "type": "object",
1597
1965
  "properties": {
@@ -1629,7 +1997,7 @@ export const LOOKUP_MANIFEST = [
1629
1997
  "name": "record_vulnerability",
1630
1998
  "path": "lookup/record-vulnerability",
1631
1999
  "title": "Vulnerability",
1632
- "description": "Look up a software vulnerability by its CVE identifier in the US National Vulnerability Database. The record gives a description in English, when it was published and last modified, its analysis status, its severity (the newest CVSS version that has a primary score, with the score, the rating word and the vector), the weakness types, whether it is on the US list of known exploited vulnerabilities (with the date added, the date action is due and the required action), the first 10 references with their tags and a link to the record. The lists of affected product versions are not returned. A record is what the database publishes, not a measure of the risk to any one system. `total` is 1, or 0 when the database has no such identifier. Times are UTC. This product uses the NVD API but is not endorsed or certified by the NVD.",
2000
+ "description": "Returns a software vulnerability's record from the National Vulnerability Database of the US National Institute of Standards and Technology, by CVE identifier: description, dates, analysis status, severity, weakness types, known-exploited status and references. Affected product versions are not returned. A record is what the database publishes, not a measure of the risk to any one system. The record gives a description in English, when it was published and last modified, its analysis status, its severity (the newest CVSS version that has a primary score, with the score, the rating word and the vector), the weakness types, whether it is on the US list of known exploited vulnerabilities (with the date added, the date action is due and the required action), the first 10 references with their tags and a link to the record. `total` is 1, or 0 when the database has no such identifier. Times are UTC. This product uses the NVD API but is not endorsed or certified by the NVD.",
1633
2001
  "inputSchema": {
1634
2002
  "type": "object",
1635
2003
  "properties": {
@@ -1650,7 +2018,7 @@ export const LOOKUP_MANIFEST = [
1650
2018
  "name": "place_weather_alerts",
1651
2019
  "path": "lookup/place-weather-alerts",
1652
2020
  "title": "Weather Alerts",
1653
- "description": "List the weather watches, warnings and advisories in force now at a point in the United States, given its latitude and longitude. Use it to check whether a storm, flood, heat, fire-weather or winter-weather alert covers a property, a route stop or a claim location today. Alerts are ordered most severe first (Extreme, Severe, Moderate, Minor, Unknown), then by soonest to expire. The source's active list is returned as it gives it: an alert already issued whose event has not begun (a watch for tomorrow, urgency Future, `onset_at` in the future) is included, so check `urgency` and `onset_at` to tell what is under way from what is coming. `total` is the number of alerts returned. Expired and past alerts are not returned. A point with nothing active is a completed result with `total` 0.",
2021
+ "description": "Lists the weather watches, warnings and advisories the US National Weather Service has in force at a latitude and longitude in the United States, most severe first, then soonest to expire. An alert issued for an event that has not begun is included: check `urgency` and `onset_at` to tell what is under way from what is coming. Use it to check whether a storm, flood, heat, fire-weather or winter-weather alert covers a property, a route stop or a claim location today. Severity runs Extreme, Severe, Moderate, Minor, Unknown. The source's active list is returned as it gives it: a watch for tomorrow (urgency Future, `onset_at` in the future) is included. `total` is the number of alerts returned. Expired and past alerts are not returned. A point with nothing active is a completed result with `total` 0.",
1654
2022
  "inputSchema": {
1655
2023
  "type": "object",
1656
2024
  "properties": {
@@ -1677,7 +2045,7 @@ export const LOOKUP_MANIFEST = [
1677
2045
  "name": "place_wildfires",
1678
2046
  "path": "lookup/place-wildfires",
1679
2047
  "title": "Wildfires",
1680
- "description": "List the wildfires currently burning within a distance of a point, given its latitude and longitude. Use it to check fire activity around a property, a facility or a route stop. Fires are returned largest first, each with its name, size in acres, the percent contained (null when the source states none), the date it was discovered (YYYY-MM-DD, UTC), and its state and county. `radius_km` sets the distance (1 to 200, default 50) and `limit` the most returned (1 to 25, default 10); `more` is true when the source held more fires in range than were returned. Covers current wildfire perimeters in the United States. A point with no fire in range is a completed result with an empty list; that means no published perimeter matched, not that no fire is near: a new fire may not have a perimeter yet.",
2048
+ "description": "Lists the wildfires burning now within a distance of a latitude and longitude, largest first, from the current fire perimeters of the US National Interagency Fire Center: name, acres, percent contained, discovery date, state and county. An empty list means no published perimeter matched, not that no fire is near: a new fire may not have a perimeter yet. Use it to check fire activity around a property, a facility or a route stop. Covers current wildfire perimeters in the United States. The percent contained is null when the source states none. The discovery date is YYYY-MM-DD, UTC. `radius_km` sets the distance (1 to 200, default 50) and `limit` the most returned (1 to 25, default 10); `more` is true when the source held more fires in range than were returned. A point with no fire in range is a completed result with an empty list.",
1681
2049
  "inputSchema": {
1682
2050
  "type": "object",
1683
2051
  "properties": {
@@ -2920,6 +3288,48 @@ export const ROUTE_MANIFEST = [
2920
3288
  "shipment_id": "se-1001"
2921
3289
  }
2922
3290
  },
3291
+ {
3292
+ "name": "identity_start",
3293
+ "method": "POST",
3294
+ "path": "/v1/tools/identity/start",
3295
+ "paid": true,
3296
+ "readOnly": false,
3297
+ "title": "Start an Identity Verification",
3298
+ "description": "Ask a person to verify their identity: they photograph an identity document and their face on a hosted page, after a consent page that shows them your purpose. Returns request_id, a verification_url to hand to the person (nothing is sent to them) and expires_at; the session expires after 7 days. Poll the request for the result: status (approved, declined, resubmission_requested, expired or abandoned), reason, document_type, issuing_country, name_matches and decided_at; every result, a resubmission request included, ends the session, so a fresh check needs a new request. The document number, images, date of birth and address are never kept. Charged when the session starts and not refunded if the person declines, abandons it or it expires (see Pricing). Subject to the agent's approval rules.",
3299
+ "inputSchema": {
3300
+ "type": "object",
3301
+ "properties": {
3302
+ "full_name": {
3303
+ "type": "string",
3304
+ "description": "The name of the person being verified, as it appears on their document (1 to 200 characters)"
3305
+ },
3306
+ "email": {
3307
+ "type": "string",
3308
+ "description": "Their email address (optional; deleted when the session ends)"
3309
+ },
3310
+ "purpose": {
3311
+ "type": "string",
3312
+ "description": "Why they are asked, shown to them on the consent page (at most 140 characters)"
3313
+ },
3314
+ "idempotency_key": {
3315
+ "type": "string",
3316
+ "description": "A key of your choosing (1 to 255 letters, digits, _ . : -); the same key with the same input returns the same session instead of starting and charging another"
3317
+ }
3318
+ },
3319
+ "required": [
3320
+ "full_name",
3321
+ "purpose",
3322
+ "idempotency_key"
3323
+ ]
3324
+ },
3325
+ "example": {
3326
+ "full_name": "Jane Doe",
3327
+ "email": "jane@example.com",
3328
+ "purpose": "Confirm the account holder before a payout",
3329
+ "idempotency_key": "kyc-2026-10-jane-doe"
3330
+ },
3331
+ "wait": false
3332
+ },
2923
3333
  {
2924
3334
  "name": "tax_calculate",
2925
3335
  "method": "POST",
@@ -40,5 +40,7 @@ export function routeRequest(entry, args) {
40
40
  }
41
41
  return entry.method === "GET" || entry.method === "DELETE" ? { params, query: rest } : { params, body: rest };
42
42
  }
43
- const routeHandler = (entry) => (agent, args) => agent.route(entry.method, entry.path, { ...routeRequest(entry, args), paid: entry.paid });
43
+ // An acceptance route (`wait: false`, Identity Verification) answers with the envelope the caller acts on
44
+ // (the verification_url to hand to the person): returned as it is, never polled until the person decides.
45
+ const routeHandler = (entry) => (agent, args) => agent.route(entry.method, entry.path, { ...routeRequest(entry, args), paid: entry.paid, ...(entry.wait === false ? { wait: false } : {}) });
44
46
  export const routeHandlers = Object.fromEntries(ROUTE_MANIFEST.map((entry) => [`oneshot_${entry.name}`, routeHandler(entry)]));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneshot-agent/mcp-server",
3
- "version": "0.46.0",
4
- "description": "MCP server for OneShot - 173 tools for AI agents",
3
+ "version": "0.48.0",
4
+ "description": "MCP server for OneShot - 185 tools for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  "dependencies": {
27
27
  "@coinbase/cdp-sdk": "1.45.0",
28
28
  "@modelcontextprotocol/sdk": "1.27.1",
29
- "@oneshot-agent/sdk": "^0.58.0",
29
+ "@oneshot-agent/sdk": "^0.60.0",
30
30
  "zod": "3.25.76"
31
31
  },
32
32
  "devDependencies": {