Catalog PyPI
Back to packageRELEASE DETAILS

1.13.4

PyPI

academia-mcp

MCP server that provides different tools to search for scientific publications

Published24 Jan 2026
Direct dependencies22
Transitive dependenciesNot calculated

README

Version 1.13.4 documentation

Academia MCP

PyPI CI License smithery badge Verified on MseeP

MCP server with tools to search, fetch, analyze, and report on scientific papers and datasets.

Features

  • ArXiv search and download
  • ACL Anthology search
  • Hugging Face datasets search
  • Semantic Scholar citations and references
  • Web search via Exa, Brave, or Tavily
  • Web page crawler, LaTeX compilation, PDF reading
  • Optional LLM-powered tools for document QA and research proposal workflows

Requirements

  • Python 3.12+

Install

  • Using pip (end users):
pip3 install academia-mcp
  • For development (uv + Makefile):
uv venv .venv
make install

Quickstart

  • Run over HTTP (default transport):
python -m academia_mcp --transport streamable-http
# OR
uv run -m academia_mcp --transport streamable-http
  • Run over stdio (for local MCP clients like Claude Desktop):
python -m academia_mcp --transport stdio
# OR
uv run -m academia_mcp --transport stdio

Notes:

  • Transports: stdio, sse, streamable-http.
  • host/port are used for HTTP transports; ignored for stdio. Default port is 5056 (or PORT).

Authentication

Academia MCP supports optional token-based authentication for HTTP transports (streamable-http and sse). Authentication is disabled by default to maintain backward compatibility.

Enabling Authentication

Set the ENABLE_AUTH environment variable to true:

export ENABLE_AUTH=true
export TOKENS_FILE=/path/to/tokens.json  # Optional, defaults to ./tokens.json

Managing Tokens

Issue a new token:

academia_mcp auth issue-token --client-id=my-client --description="Production API client"

# Issue token with 30-day expiration
academia_mcp auth issue-token --client-id=test-client --expires-days=30

# Issue token with custom scopes
academia_mcp auth issue-token --client-id=admin --scopes="read,write,admin"

List active tokens:

academia_mcp auth list-tokens

Revoke a token:

academia_mcp auth revoke-token mcp_a1b2c3d4e5f6...

Using Tokens

Include the token in the Authorization header with the Bearer scheme or as a query parameter apiKey.

Security Notes:

  • Tokens are displayed only once during issuance. Store them securely.
  • Use HTTPS in production to protect tokens in transit.
  • The tokens.json file is automatically created with restrictive permissions (mode 600).
  • Tokens are stored in plaintext (standard practice for bearer tokens) - protect the tokens file.

Claude Desktop config

{
  "mcpServers": {
    "academia": {
      "command": "python3",
      "args": [
        "-m",
        "academia_mcp",
        "--transport",
        "stdio"
      ]
    }
  }
}

Available tools (one-liners)

  • arxiv_search: Query arXiv with field-specific queries and filters.
  • arxiv_download: Fetch a paper by ID and convert to structured text (HTML/PDF modes).
  • anthology_search: Search ACL Anthology with fielded queries and optional date filtering.
  • hf_datasets_search: Find Hugging Face datasets with filters and sorting.
  • s2_get_citations: List papers citing a given arXiv paper (Semantic Scholar Graph).
  • s2_get_references: List papers referenced by a given arXiv paper.
  • visit_webpage: Fetch and normalize a web page.
  • web_search: Unified search wrapper; available when at least one of Exa/Brave/Tavily keys is set.
  • exa_web_search, brave_web_search, tavily_web_search: Provider-specific search.
  • get_latex_templates_list, get_latex_template: Enumerate and fetch built-in LaTeX templates.
  • compile_latex: Compile LaTeX to PDF in WORKSPACE_DIR.
  • read_pdf: Extract text per page from a PDF.
  • download_pdf_paper, review_pdf_paper: Download and optionally review PDFs (requires LLM + workspace).
  • document_qa: Answer questions over provided document chunks (requires LLM).
  • extract_bitflip_info, generate_research_proposals, score_research_proposals: Research proposal helpers (requires LLM).

Availability notes:

  • Set WORKSPACE_DIR to enable compile_latex, read_pdf, download_pdf_paper, and review_pdf_paper.
  • Set OPENROUTER_API_KEY to enable LLM tools (document_qa, review_pdf_paper, and bitflip tools).
  • Set one or more of EXA_API_KEY, BRAVE_API_KEY, TAVILY_API_KEY to enable web_search and provider tools.

Environment variables

Set as needed, depending on which tools you use:

  • OPENROUTER_API_KEY: required for LLM-related tools.
  • BASE_URL: override OpenRouter base URL.
  • DOCUMENT_QA_MODEL_NAME: override default model for document_qa.
  • BITFLIP_MODEL_NAME: override default model for bitflip tools.
  • TAVILY_API_KEY: enables Tavily in web_search.
  • EXA_API_KEY: enables Exa in web_search and visit_webpage.
  • BRAVE_API_KEY: enables Brave in web_search.
  • WORKSPACE_DIR: directory for generated files (PDFs, temp artifacts).
  • PORT: HTTP port (default 5056).

You can put these in a .env file in the project root.

Docker

Build the image:

docker build -t academia_mcp .

Run the server (HTTP):

docker run --rm -p 5056:5056 \
  -e PORT=5056 \
  -e OPENROUTER_API_KEY=your_key_here \
  -e WORKSPACE_DIR=/workspace \
  -v "$PWD/workdir:/workspace" \
  academia_mcp

Or use existing image: phoenix120/academia_mcp

Examples

Makefile targets

  • make install: install the package in editable mode with uv
  • make validate: run black, flake8, and mypy (strict)
  • make test: run the test suite with pytest
  • make publish: build and publish using uv

LaTeX/PDF requirements

Only needed for LaTeX/PDF tools. Ensure a LaTeX distribution is installed and pdflatex is on PATH, as well as latexmk. On Debian/Ubuntu:

sudo apt install texlive-latex-base texlive-fonts-recommended texlive-latex-extra texlive-science latexmk

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 22

Native requirements
22 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
mcp
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
mcp>=1.10.1runtime
xmltodict
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
xmltodict>=0.14.0runtime
requests
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
requests>=2.32.0runtime
pypdf
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
pypdf>=5.1.0runtime
beautifulsoup4
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
beautifulsoup4>=4.12.0runtime
markdownify
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
markdownify==0.14.1runtime
types-xmltodict
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
types-xmltodict>=0.14.0runtime
types-requests
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
types-requests>=2.32.0runtime
types-beautifulsoup4
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
types-beautifulsoup4>=4.12.0runtime
acl-anthology
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
acl-anthology==0.5.2runtime
huggingface-hub
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
huggingface-hub>=0.32.4runtime
fire
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
fire>=0.7.0runtime
openai
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
openai>=1.97.1runtime
jinja2
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
jinja2>=3.1.6runtime
datasets
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
datasets>=4.0.0runtime
pymupdf
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
pymupdf>=1.26.4runtime
pillow
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
pillow>=11.3.0runtime
pydantic-settings
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
pydantic-settings>=2.6.0runtime
rich
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
rich>=13.0.0runtime
youtube-transcript-api
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
youtube-transcript-api>=1.2.2runtime
paddlepaddle
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
paddlepaddle==3.2.0runtime
paddleocr
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": "<=3.13,>=3.12",
  "evaluation": "NOT_EVALUATED"
}
paddleocr==3.2.0runtime

Distribution files

2 collected
academia_mcp-1.13.4-py3-none-any.whl

bdist_wheel · 63.29 KB · Python py3

Source file
academia_mcp-1.13.4.tar.gz

sdist · 62.8 KB · Python source

Source file

Repository

ACCESSIBLE
ilyagusev/academia_mcp

Shared repository data · GitHub

License detected in repository
Apache-2.0
License branch / ref
main
Last push
25 Jan 2026
Archived
No
Contributor identities
— · partial collection

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

8count
Gauge · observed snapshots24 Oct 2026
840
2026-10-24: 8 · observed 2026-10-24T08:56:35.0156688Z
24 Oct24 Oct

github · 1 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2482026-10-24T08:56:35.0156688Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:49 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:38c5fc849ea078bbc965e0dc78ba3bee723c87e42ff08e359b1b2666f077ead4

Other collected versions

View all collected versions →