Academic Research Tools
Evidence-grounded academic literature discovery for AI agents, MCP clients, command-line workflows, and Python applications.
Academic Research Tools provides one normalized interface over several literature sources while preserving the source and identifiers of every record. Its core is independent of any agent harness; MCP, CLI, Python, and Hermes are adapters over the same implementation.
Providers
| Provider | Credential | Availability | Notes |
|---|---|---|---|
| arXiv | None | Core | Official public Atom API |
| Semantic Scholar | Optional SEMANTIC_SCHOLAR_API_KEY |
Core | Unauthenticated access uses shared public quota |
| Scopus | ELSEVIER_API_KEY |
Core, optional at runtime | Metadata and abstracts may require subscription or institutional IP |
| Google Scholar through SerpAPI | SERPAPI_API_KEY |
Experimental | Third-party SerpAPI integration; not direct scraping or an official Google Scholar API |
The package remains useful without credentials: arXiv is available immediately and Semantic Scholar can be queried without a key, subject to public rate limits.
Features
- Normalized
Paper,Author,SearchResult, andUnifiedSearchResultcontracts - Concurrent multi-provider search with partial-failure reporting
- Conservative deduplication by DOI, base arXiv ID, or normalized title plus year
- Per-record provenance and provider identifiers
- Local stdio MCP server for compatible clients
- Automation-friendly CLI and direct Python API
- Thin native Hermes Agent adapter
- Protected local credential configuration with environment overrides
- Interactive hidden-input credential wizard, offline diagnostics, and opt-in online reachability checks
- Bounded retries for transient network, rate-limit, and server errors on arXiv and Semantic Scholar
- One-command Claude Code and Codex MCP plus skill installation
- Progressive onboarding that never blocks the first keyless search
- No telemetry
Installation
From GitHub
git clone https://github.com/istgrudd/academic-research-tools.git
cd academic-research-tools
python -m venv .venv
. .venv/bin/activate
python -m pip install .
From PyPI
pip install academic-research-tools
# or
pipx install academic-research-tools
No credential is required to verify the installation:
academic-research --version
academic-research doctor
academic-research status
academic-research search "traffic flow estimation low visibility" \
--sources arxiv,semantic_scholar --limit 5
Configure optional providers later, only when you need them:
academic-research configure
Secret input is hidden. Do not paste API keys into chat or pass them as command arguments.
Install the MCP server and workflow skill for a coding agent:
academic-research install --platform claude-code
# or
academic-research install --platform codex
The installer does not launch credential configuration. arXiv and Semantic Scholar public access remain ready for immediate use.
See Getting started and Credential setup.
Diagnostics and network
academic-research doctor is offline: it checks the credential configuration and provider availability without contacting any provider.
To check whether each active provider is reachable from the current network, add --online:
academic-research doctor --online
academic-research doctor --online --json
Each active provider receives exactly one small search request with a 10-second timeout and no retries. The result is shown as ✓/✗ with a reason, and the JSON report gains an online section. Credential values are never printed. The command exits non-zero when any check fails. Each check is a real request and counts against that provider's quota; for SerpAPI it uses one search credit.
| Environment variable | Purpose |
|---|---|
ACADEMIC_RESEARCH_TIMEOUT |
Request timeout in seconds for every provider. Default 30, clamped to 1–120; invalid values fall back to the default. |
HTTPS_PROXY / HTTP_PROXY |
Standard proxy variables, honoured through Python's urllib together with the operating system proxy settings. |
ACADEMIC_RESEARCH_CONFIG_DIR |
Alternative directory for the protected credentials.json. |
arXiv and Semantic Scholar retry timeouts, connection failures, HTTP 429, and HTTP 5xx up to two times, waiting 1 s and then 2 s. Other 4xx responses are returned immediately. If a host stays unreachable, the error states that it could not be reached from this network; check firewall, ISP, or VPN restrictions, or set HTTPS_PROXY.
MCP quick start
Run the local stdio server:
academic-research serve
If you use uvx without a prior install, configure the MCP client to execute:
uvx --from academic-research-tools academic-research serve
Generic MCP configuration:
{
"mcpServers": {
"academic-research": {
"command": "uvx",
"args": [
"--from",
"academic-research-tools",
"academic-research",
"serve"
],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "${SEMANTIC_SCHOLAR_API_KEY}",
"ELSEVIER_API_KEY": "${ELSEVIER_API_KEY}"
}
}
}
}
Only include environment variables for providers you intend to use. The protected user configuration is also read automatically. Details: generic MCP, Claude Code, Codex, Claude Desktop, and Cursor.
MCP tools
research_provider_statussearch_paperssearch_arxivsearch_semantic_scholarsearch_scopusget_scopus_abstractsearch_scopus_authorssearch_google_scholar
Python API
from academic_research import ResearchService
client = ResearchService.from_environment()
result = client.search(
"traffic flow estimation under low visibility",
sources=["arxiv", "semantic_scholar", "scopus"],
limit_per_source=10,
year="2020-2026",
)
for paper in result.papers:
print(paper.title, paper.doi, paper.provenance)
if result.errors:
print("Partial provider failures:", result.errors)
A provider that is not configured is excluded from ResearchService.from_environment(). The MCP unified search preserves results from available providers and reports missing optional providers with a configuration command. A provider-specific request returns an actionable error rather than silently substituting a different source.
Hermes Agent
Current Hermes installations can install the repository directly:
hermes plugins install istgrudd/academic-research-tools --enable
Pip-distributed discovery is also declared through the hermes_agent.plugins entry-point group. Scopus and SerpAPI use per-tool checks, so missing optional credentials never disable arXiv or Semantic Scholar.
See Hermes integration.
Credential safety
Credentials are resolved from environment variables first and a protected per-user JSON file second. The interactive wizard writes mode 0700 directories and mode 0600 files on Unix. The local file is plaintext and is not an encrypted vault.
This project does not:
- accept secrets as command-line arguments
- print credential values in
status - request credentials through an agent conversation
- display credential values in diagnostics or provider status
- store API responses automatically
- send telemetry
- require all providers to be configured
Do not commit .env; it is ignored by Git. See SECURITY.md.
Development
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev]'
ruff check src tests __init__.py
pytest
python -m build
Tests use synthetic fixtures and do not spend provider quota. See CONTRIBUTING.md.
Scope and limitations
- Search ranking and coverage differ by provider.
- Citation counts from different providers are retained with provenance and should not be treated as directly interchangeable.
- Deduplication is intentionally conservative; ambiguous records may remain separate.
- This project does not bypass paywalls or grant access beyond the user's provider entitlement.
- Remote hosted MCP, operating-system keyring integration, and automatic literature-review decisions are outside the v0.2 scope.
Legal and data-provider notice
This project is an independent, unofficial integration and is not affiliated with or endorsed by Elsevier, Scopus, Semantic Scholar, arXiv, Google, or SerpAPI. Users are responsible for complying with each provider's API terms, acceptable-use policies, subscription conditions, and data licenses. The MIT license covers this project's source code, not provider data or services.
Thank you to arXiv for use of its open access interoperability.
License
Source code is available under the MIT License.
Metadata
Release files for academic-research-tools 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| academic_research_tools-0.2.1.tar.gz | 73.2 kB | With provenance | Details for academic_research_tools-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| academic_research_tools-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for academic_research_tools-0.2.1-py3-none-any.whl |
Total release size: 120.2 kB
Release files / academic_research_tools-0.2.1.tar.gz
| Download URL | academic_research_tools-0.2.1.tar.gz |
|---|---|
| Size | 73.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b8a2b1fff5868a3f9df350c62fa5a9382965c10eb09d48f4245a872c529e0ca3
|
|
BLAKE2b-256 checksum How to use checksums |
5fa0d350e8433c550cfc4df85b056b201e7d147eb822fd3575b1783018ab56c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / academic_research_tools-0.2.1-py3-none-any.whl
| Download URL | academic_research_tools-0.2.1-py3-none-any.whl |
|---|---|
| Size | 47.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
938371614993e2592d9fc8a37c450e49d03e6b694f4427b6155276941023fc06
|
|
BLAKE2b-256 checksum How to use checksums |
91566f45ea8b92ce0ede3d38d90047a19ec87ad08aea7c8bfc82f6f0ffb2746d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logSecurity for academic-research-tools 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for academic_research_tools-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.