@oneshot-agent/mcp-server 0.38.1 → 0.39.1

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/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.38.1", // keep in sync with package.json; guarded by version.test.ts
53
+ version: "0.39.1", // keep in sync with package.json; guarded by version.test.ts
54
54
  }, {
55
55
  capabilities: {
56
56
  tools: {},
@@ -111,6 +111,37 @@ export const LOOKUP_MANIFEST = [
111
111
  "limit": 1
112
112
  }
113
113
  },
114
+ {
115
+ "name": "compound_resolve",
116
+ "path": "resolve/compound",
117
+ "title": "Compound Resolve",
118
+ "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.",
119
+ "inputSchema": {
120
+ "type": "object",
121
+ "properties": {
122
+ "name": {
123
+ "type": "string",
124
+ "description": "A common, trade or systematic chemical name, or a CAS registry number such as 50-78-2; give exactly one of name, inchikey or smiles. 2 to 200 characters."
125
+ },
126
+ "inchikey": {
127
+ "type": "string",
128
+ "description": "The compound InChIKey; give exactly one of name, inchikey or smiles. Exactly 27 characters."
129
+ },
130
+ "smiles": {
131
+ "type": "string",
132
+ "description": "A SMILES structure string without / or \\, which the source path form cannot carry; give exactly one of name, inchikey or smiles. 1 to 500 characters."
133
+ },
134
+ "limit": {
135
+ "type": "integer",
136
+ "description": "The most matching compounds to return. From 1 to 10. Defaults to `5`."
137
+ }
138
+ },
139
+ "required": []
140
+ },
141
+ "example": {
142
+ "name": "aspirin"
143
+ }
144
+ },
114
145
  {
115
146
  "name": "company_consumer_complaints",
116
147
  "path": "lookup/company-consumer-complaints",
@@ -200,6 +231,44 @@ export const LOOKUP_MANIFEST = [
200
231
  "limit": 1
201
232
  }
202
233
  },
234
+ {
235
+ "name": "vehicle_crash_ratings",
236
+ "path": "lookup/vehicle-crash-ratings",
237
+ "title": "Crash Ratings",
238
+ "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.",
239
+ "inputSchema": {
240
+ "type": "object",
241
+ "properties": {
242
+ "model_year": {
243
+ "type": "integer",
244
+ "description": "The model year. At least 1990. Model year cannot be later than next year."
245
+ },
246
+ "make": {
247
+ "type": "string",
248
+ "description": "The vehicle make, for example Toyota. 2 to 40 characters."
249
+ },
250
+ "model": {
251
+ "type": "string",
252
+ "description": "The vehicle model, for example Camry. 1 to 60 characters."
253
+ },
254
+ "variant": {
255
+ "type": "string",
256
+ "description": "Text found in the variant description, matched without regard to case, for example AWD or 4 DR. Without it the first rated variant is used. 1 to 40 characters."
257
+ }
258
+ },
259
+ "required": [
260
+ "model_year",
261
+ "make",
262
+ "model"
263
+ ]
264
+ },
265
+ "example": {
266
+ "model_year": 2024,
267
+ "make": "Toyota",
268
+ "model": "Camry",
269
+ "variant": "FWD"
270
+ }
271
+ },
203
272
  {
204
273
  "name": "place_disasters",
205
274
  "path": "lookup/place-disasters",
@@ -247,6 +316,33 @@ export const LOOKUP_MANIFEST = [
247
316
  "limit": 1
248
317
  }
249
318
  },
319
+ {
320
+ "name": "market_drug_acquisition_cost",
321
+ "path": "lookup/market-drug-acquisition-cost",
322
+ "title": "Drug Acquisition Cost",
323
+ "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.",
324
+ "inputSchema": {
325
+ "type": "object",
326
+ "properties": {
327
+ "ndc": {
328
+ "type": "string",
329
+ "description": "National Drug Code; takes precedence over description. 11 digits, with optional dashes."
330
+ },
331
+ "description": {
332
+ "type": "string",
333
+ "description": "Exact source drug description, matched in uppercase, for example ATORVASTATIN 20 MG TABLET. 3 to 100 characters."
334
+ },
335
+ "limit": {
336
+ "type": "integer",
337
+ "description": "Maximum number of distinct NDC prices to return. From 1 to 25. Defaults to `10`."
338
+ }
339
+ },
340
+ "required": []
341
+ },
342
+ "example": {
343
+ "ndc": "60290-0040-02"
344
+ }
345
+ },
250
346
  {
251
347
  "name": "product_drug_adverse_events",
252
348
  "path": "lookup/product-drug-adverse-events",
@@ -386,6 +482,37 @@ export const LOOKUP_MANIFEST = [
386
482
  "limit": 1
387
483
  }
388
484
  },
485
+ {
486
+ "name": "company_environmental_compliance",
487
+ "path": "lookup/company-environmental-compliance",
488
+ "title": "Environmental Compliance",
489
+ "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.",
490
+ "inputSchema": {
491
+ "type": "object",
492
+ "properties": {
493
+ "name": {
494
+ "type": "string",
495
+ "description": "Whole words of one facility name, in any order and without commas, for example TESLA MOTORS; a part of a word matches nothing. 3 to 100 characters. A name carries no comma: the source reads a comma as a separator between alternative names."
496
+ },
497
+ "state": {
498
+ "type": "string",
499
+ "description": "US state or territory postal code that limits the search to facilities in that state. A state is its two-letter postal code, for example CA."
500
+ },
501
+ "limit": {
502
+ "type": "integer",
503
+ "description": "How many facilities to return. From 1 to 25. Defaults to `10`."
504
+ }
505
+ },
506
+ "required": [
507
+ "name"
508
+ ]
509
+ },
510
+ "example": {
511
+ "name": "TESLA MOTORS INC",
512
+ "state": "CA",
513
+ "limit": 3
514
+ }
515
+ },
389
516
  {
390
517
  "name": "company_federal_awards",
391
518
  "path": "lookup/company-federal-awards",
@@ -620,11 +747,38 @@ export const LOOKUP_MANIFEST = [
620
747
  "height_in": 48
621
748
  }
622
749
  },
750
+ {
751
+ "name": "gene_summary",
752
+ "path": "lookup/gene-summary",
753
+ "title": "Gene Summary",
754
+ "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.",
755
+ "inputSchema": {
756
+ "type": "object",
757
+ "properties": {
758
+ "gene_id": {
759
+ "type": "string",
760
+ "description": "An NCBI Gene ID, digits only, for example 7157. Digits only, 1 to 12."
761
+ },
762
+ "symbol": {
763
+ "type": "string",
764
+ "description": "An official gene symbol, for example TP53, matched without regard to case in the organism `taxon_id` names. 1 to 30 characters. No spaces, quotes or square brackets."
765
+ },
766
+ "taxon_id": {
767
+ "type": "integer",
768
+ "description": "The organism as an NCBI Taxonomy ID, used with `symbol`; 9606 (human) unless set, 10090 is mouse. From 1 to 999999999. Defaults to `9606`."
769
+ }
770
+ },
771
+ "required": []
772
+ },
773
+ "example": {
774
+ "symbol": "TP53"
775
+ }
776
+ },
623
777
  {
624
778
  "name": "person_health_provider",
625
779
  "path": "lookup/person-health-provider",
626
780
  "title": "Health Provider Registration",
627
- "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`.",
781
+ "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.",
628
782
  "inputSchema": {
629
783
  "type": "object",
630
784
  "properties": {
@@ -712,6 +866,37 @@ export const LOOKUP_MANIFEST = [
712
866
  "lei": "DPRBOZP0K5RM2YE8UU08"
713
867
  }
714
868
  },
869
+ {
870
+ "name": "company_lobbying",
871
+ "path": "lookup/company-lobbying",
872
+ "title": "Lobbying",
873
+ "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.",
874
+ "inputSchema": {
875
+ "type": "object",
876
+ "properties": {
877
+ "client_name": {
878
+ "type": "string",
879
+ "description": "Part of the client name, for example Nvidia. 2 to 100 characters."
880
+ },
881
+ "filing_year": {
882
+ "type": "integer",
883
+ "description": "Filing year, no later than the current year; omit to search all years. At least 1999."
884
+ },
885
+ "limit": {
886
+ "type": "integer",
887
+ "description": "Most filings to return, newest posted first. From 1 to 25. Defaults to `10`."
888
+ }
889
+ },
890
+ "required": [
891
+ "client_name"
892
+ ]
893
+ },
894
+ "example": {
895
+ "client_name": "Nvidia",
896
+ "filing_year": 2026,
897
+ "limit": 1
898
+ }
899
+ },
715
900
  {
716
901
  "name": "company_motor_carrier",
717
902
  "path": "lookup/company-motor-carrier",
@@ -818,6 +1003,91 @@ export const LOOKUP_MANIFEST = [
818
1003
  "limit": 10
819
1004
  }
820
1005
  },
1006
+ {
1007
+ "name": "protein_function",
1008
+ "path": "lookup/protein-function",
1009
+ "title": "Protein Function",
1010
+ "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.",
1011
+ "inputSchema": {
1012
+ "type": "object",
1013
+ "properties": {
1014
+ "accession": {
1015
+ "type": "string",
1016
+ "description": "The UniProt accession identifying the protein, for example P04637"
1017
+ },
1018
+ "include_sequence": {
1019
+ "type": "boolean",
1020
+ "description": "Include the amino-acid sequence. Defaults to `false`."
1021
+ }
1022
+ },
1023
+ "required": [
1024
+ "accession"
1025
+ ]
1026
+ },
1027
+ "example": {
1028
+ "accession": "P29358",
1029
+ "include_sequence": false
1030
+ }
1031
+ },
1032
+ {
1033
+ "name": "protein_structure",
1034
+ "path": "lookup/protein-structure",
1035
+ "title": "Protein Structure",
1036
+ "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.",
1037
+ "inputSchema": {
1038
+ "type": "object",
1039
+ "properties": {
1040
+ "accession": {
1041
+ "type": "string",
1042
+ "description": "The UniProt accession of the protein, for example P04637. A UniProt accession is 6 or 10 letters and digits in the UniProt form."
1043
+ },
1044
+ "coverage": {
1045
+ "type": "string",
1046
+ "enum": [
1047
+ "experimental",
1048
+ "predicted"
1049
+ ],
1050
+ "description": "Which kind of structure: experimental (entries in the Protein Data Bank) or predicted (the predicted model)"
1051
+ },
1052
+ "limit": {
1053
+ "type": "integer",
1054
+ "description": "How many experimental structures to return, newest release first (1 to 25). Ignored for predicted. From 1 to 25. Defaults to `10`."
1055
+ }
1056
+ },
1057
+ "required": [
1058
+ "accession",
1059
+ "coverage"
1060
+ ]
1061
+ },
1062
+ "example": {
1063
+ "accession": "P04637",
1064
+ "coverage": "experimental",
1065
+ "limit": 2
1066
+ }
1067
+ },
1068
+ {
1069
+ "name": "variant_clinical_significance",
1070
+ "path": "lookup/variant-clinical-significance",
1071
+ "title": "Variant Clinical Significance",
1072
+ "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.",
1073
+ "inputSchema": {
1074
+ "type": "object",
1075
+ "properties": {
1076
+ "vcv": {
1077
+ "type": "string",
1078
+ "description": "ClinVar variation accession, for example VCV000017677 or VCV000017677.176; supply only vcv or rsid"
1079
+ },
1080
+ "rsid": {
1081
+ "type": "string",
1082
+ "description": "dbSNP identifier, for example rs80357906; supply only rsid or vcv"
1083
+ }
1084
+ },
1085
+ "required": []
1086
+ },
1087
+ "example": {
1088
+ "rsid": "rs80357906"
1089
+ }
1090
+ },
821
1091
  {
822
1092
  "name": "company_vat_registration",
823
1093
  "path": "lookup/company-vat-registration",
@@ -1063,6 +1333,30 @@ export const LOOKUP_MANIFEST = [
1063
1333
  }
1064
1334
  ];
1065
1335
  export const ROUTE_MANIFEST = [
1336
+ {
1337
+ "name": "browser_connect_account_status",
1338
+ "method": "POST",
1339
+ "path": "/v1/tools/browser/profiles/{profile_id}/setup/status",
1340
+ "paid": false,
1341
+ "readOnly": true,
1342
+ "title": "Account Connection Status",
1343
+ "description": "Check whether the person has finished signing in with this browser profile. completed_at is set once they pressed Done on the sign-in page; status is idle while the page is still open. Free. Mints no link.",
1344
+ "inputSchema": {
1345
+ "type": "object",
1346
+ "properties": {
1347
+ "profile_id": {
1348
+ "type": "string",
1349
+ "description": "Profile id from oneshot_browser_create_profile"
1350
+ }
1351
+ },
1352
+ "required": [
1353
+ "profile_id"
1354
+ ]
1355
+ },
1356
+ "example": {
1357
+ "profile_id": "prof_01HX"
1358
+ }
1359
+ },
1066
1360
  {
1067
1361
  "name": "benchmark",
1068
1362
  "method": "POST",
@@ -1284,6 +1578,35 @@ export const ROUTE_MANIFEST = [
1284
1578
  "goal_id": "goal_01HX"
1285
1579
  }
1286
1580
  },
1581
+ {
1582
+ "name": "browser_connect_account",
1583
+ "method": "POST",
1584
+ "path": "/v1/tools/browser/profiles/{profile_id}/setup/link",
1585
+ "paid": false,
1586
+ "readOnly": false,
1587
+ "title": "Connect an Account",
1588
+ "description": "Get a single-use link a person opens to sign in to a site with this browser profile, including two-step verification. Give the link to that person; never open it yourself.",
1589
+ "inputSchema": {
1590
+ "type": "object",
1591
+ "properties": {
1592
+ "profile_id": {
1593
+ "type": "string",
1594
+ "description": "Profile id from oneshot_browser_create_profile"
1595
+ },
1596
+ "start_url": {
1597
+ "type": "string",
1598
+ "description": "The sign-in page to open. Required when no setup is active for the profile; otherwise a fresh link to the open setup is minted"
1599
+ }
1600
+ },
1601
+ "required": [
1602
+ "profile_id"
1603
+ ]
1604
+ },
1605
+ "example": {
1606
+ "profile_id": "prof_01HX",
1607
+ "start_url": "https://example.com/login"
1608
+ }
1609
+ },
1287
1610
  {
1288
1611
  "name": "watch_delete",
1289
1612
  "method": "DELETE",
@@ -1478,6 +1801,65 @@ export const ROUTE_MANIFEST = [
1478
1801
  "limit": 10
1479
1802
  }
1480
1803
  },
1804
+ {
1805
+ "name": "solve",
1806
+ "method": "POST",
1807
+ "path": "/v1/tools/solve",
1808
+ "paid": true,
1809
+ "readOnly": true,
1810
+ "title": "Solve",
1811
+ "description": "Plan vehicle routes within capacity and time windows. Returns the best route found, constraint checks and conflicts.",
1812
+ "inputSchema": {
1813
+ "type": "object",
1814
+ "properties": {
1815
+ "problem": {
1816
+ "type": "string",
1817
+ "enum": [
1818
+ "routing"
1819
+ ]
1820
+ },
1821
+ "time_limit_s": {
1822
+ "type": "integer",
1823
+ "minimum": 1,
1824
+ "maximum": 300,
1825
+ "default": 30
1826
+ },
1827
+ "routing": {
1828
+ "type": "object",
1829
+ "description": "Vehicles, stops, objective and optional travel matrix."
1830
+ }
1831
+ },
1832
+ "required": [
1833
+ "problem",
1834
+ "routing"
1835
+ ]
1836
+ },
1837
+ "example": {
1838
+ "problem": "routing",
1839
+ "routing": {
1840
+ "objective": "distance",
1841
+ "vehicles": [
1842
+ {
1843
+ "id": "van",
1844
+ "capacity": 10,
1845
+ "start": {
1846
+ "lat": 48,
1847
+ "lng": 16
1848
+ }
1849
+ }
1850
+ ],
1851
+ "stops": [
1852
+ {
1853
+ "id": "stop",
1854
+ "location": {
1855
+ "lat": 48.01,
1856
+ "lng": 16.01
1857
+ }
1858
+ }
1859
+ ]
1860
+ }
1861
+ }
1862
+ },
1481
1863
  {
1482
1864
  "name": "watch",
1483
1865
  "method": "POST",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneshot-agent/mcp-server",
3
- "version": "0.38.1",
3
+ "version": "0.39.1",
4
4
  "description": "MCP server for OneShot - 81 tools for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -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.53.1",
29
+ "@oneshot-agent/sdk": "^0.54.0",
30
30
  "zod": "3.25.76"
31
31
  },
32
32
  "devDependencies": {