Class AcademicExtraTools

java.lang.Object
com.tnsai.tools.academic.AcademicExtraTools

public class AcademicExtraTools extends Object
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.
MethodBackendAuthIdempotent
orcidSearch(java.lang.String, int)pub.orcid.org /v3.0/searchnonetrue
orcidGet(java.lang.String)pub.orcid.org /v3.0/{id}/recordnonetrue
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}/recentnonetrue

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 Details

    • AcademicExtraTools

      public AcademicExtraTools()
      Default constructor — picks UNPAYWALL_EMAIL from env.
    • AcademicExtraTools

      public AcademicExtraTools(String unpaywallEmail)
      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