Package com.tnsai.tools.academic
Class AcademicExtraTools
java.lang.Object
com.tnsai.tools.academic.AcademicExtraTools
Function-shape extra academic tools — supplements the 6 tools in
AcademicTools with 4 more free APIs (ORCID lookup, Unpaywall OA
resolution, bioRxiv + medRxiv preprint windows). Replaces legacy
ORCIDTool, UnpaywallTool, BioRxivTool, and
MedRxivTool.
| Method | Backend | Auth | Idempotent |
|---|---|---|---|
orcidSearch(java.lang.String, int) | pub.orcid.org /v3.0/search | none | true |
orcidGet(java.lang.String) | pub.orcid.org /v3.0/{id}/record | none | true |
unpaywallLookup(java.lang.String) | api.unpaywall.org /v2/{doi} | email (UNPAYWALL_EMAIL or constructor) | true |
biorxivRecent(java.lang.String, int) | api.biorxiv.org /details/{server}/recent | none | true |
Remaining 9 academic legacy tools (CORE / IEEE / Lens.org / Dimensions / GoogleScholar / ConnectedPapers / AlphaXiv / PapersWithCode / PubChem) intentionally not migrated — most need API keys, custom scraping, or are aggregators that compose the free ones above. Phase 3 will sweep them.
- Since:
- 0.5.7 (Phase 2 batch 33 — built-in tool migration to function shape, see #188)
-
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor — picks UNPAYWALL_EMAIL from env.AcademicExtraTools(String unpaywallEmail) Explicit-email constructor (Unpaywall identifies callers by email).AcademicExtraTools(String unpaywallEmail, okhttp3.OkHttpClient http, com.fasterxml.jackson.databind.ObjectMapper mapper) Full constructor for tests / shared HTTP. -
Method Summary
Modifier and TypeMethodDescriptionbiorxivRecent(String server, int days) orcidSearch(String query, int limit) unpaywallLookup(String doi)
-
Constructor Details
-
AcademicExtraTools
public AcademicExtraTools()Default constructor — picks UNPAYWALL_EMAIL from env. -
AcademicExtraTools
Explicit-email constructor (Unpaywall identifies callers by email). -
AcademicExtraTools
public AcademicExtraTools(String unpaywallEmail, okhttp3.OkHttpClient http, com.fasterxml.jackson.databind.ObjectMapper mapper) Full constructor for tests / shared HTTP.
-
-
Method Details
-
orcidSearch
@Tool(name="orcid_search", description="Search ORCID public researcher records by free-text {query}. {limit} clamps to [1, 100]. Returns the raw JSON response with researcher records (each has the ORCID id under \"orcid-identifier.path\"). No auth required.", keywords={"orcid","researcher","author","identifier"}, idempotent=true) public String orcidSearch(@ToolParam(description="Free-text query (name, affiliation, \u2026)") String query, @ToolParam(description="Max results (1..100); 0 \u2192 default 10",required=false,defaultValue="0") int limit) throws IOException - Throws:
IOException
-
orcidGet
@Tool(name="orcid_get", description="Fetch a single ORCID researcher\'s full public record (name, affiliations, works, funding) by ORCID id (e.g. \"0000-0002-1825-0097\"). Returns the raw JSON.", keywords={"orcid","researcher","profile","record"}, idempotent=true) public String orcidGet(@ToolParam(description="ORCID id (\"0000-0000-0000-0000\" format)") String orcidId) throws IOException - Throws:
IOException
-
unpaywallLookup
@Tool(name="unpaywall_lookup", description="Find legal open-access versions of a paper by its DOI via Unpaywall. Returns the raw JSON response with \"is_oa\" boolean + \"best_oa_location\" pointer to the free PDF/HTML when available. Requires UNPAYWALL_EMAIL (any email \u2014 used only to identify the caller per Unpaywall\'s terms).", keywords={"unpaywall","open access","doi","free pdf","paper"}, idempotent=true) public String unpaywallLookup(@ToolParam(description="Paper DOI (e.g. \"10.1038/nature12373\")") String doi) throws IOException - Throws:
IOException
-
biorxivRecent
@Tool(name="biorxiv_recent", description="Fetch recent bioRxiv / medRxiv preprints from the last {days} days (default 7). {server} is \"biorxiv\" (default) or \"medrxiv\". Returns the raw JSON response with the preprint metadata array under \"collection\". No auth required.", keywords={"biorxiv","medrxiv","preprint","recent","biology"}, idempotent=true) public String biorxivRecent(@ToolParam(description="Server: biorxiv (default) or medrxiv",required=false,defaultValue="biorxiv") String server, @ToolParam(description="Days back (1..30); 0 \u2192 default 7",required=false,defaultValue="0") int days) throws IOException - Throws:
IOException
-