Claude Research Gateway π¬
An MCP (Model Context Protocol) server that enables Claude to access paywalled scientific papers through your institutional login (Shibboleth/SAML SSO, EZProxy).
How it works: When you ask Claude to find or read a paper, this tool authenticates to journal portals using your university credentials (via a browser popup), then fetches the full text of papers you have institutional access to.
Supported Portals
| Portal | Key | Publisher | |--------|-----|-----------| | ACS Publications | acs | American Chemical Society | | SciFinder-n | scifinder | CAS | | ScienceDirect | elsevier | Elsevier | | Springer / Nature | springer | Springer Nature | | Wiley Online Library | wiley | Wiley | | IEEE Xplore | ieee | IEEE | | JSTOR | jstor | JSTOR | | PubMed Central | pmc | NIH / NLM |
Prerequisites
- Python 3.10+
- uv (Python package manager):
pip install uv - A valid institutional login (university SSO credentials)
Quick Setup
1. Install Dependencies
cd claude-tool-research
uv sync
2. Install Playwright Browsers
uv run playwright install chromium
3. Add to Claude Desktop
Edit your Claude Desktop config file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add this MCP server entry:
{
"mcpServers": {
"research-gateway": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\abdir\\Documents\\projects-code\\claude-tool-research",
"run",
"server.py"
]
}
}
}
4. Restart Claude Desktop
Close and reopen Claude Desktop. You should see the research tools appear in the tools menu (π¨ icon).
Usage Examples
First-Time Setup
You: "Configure my institution β I'm at MIT"
Claude: [Calls configure_institution with name="MIT", wayf_name="Massachusetts Institute of Technology"]
You: "Log me into ACS Publications"
Claude: [Calls authenticate_portal("acs")]
β A browser window opens β You complete your university SSO login β Session is saved
Searching Papers
You: "Search ACS for papers about lithium-ion battery cathodes published recently"
Claude: [Calls search_papers("acs", "lithium-ion battery cathode materials")]
β Returns formatted search results with titles, authors, DOIs
Reading a Paper
You: "Fetch the full text of DOI 10.1021/jacs.3c12345"
Claude: [Calls fetch_paper("acs", doi="10.1021/jacs.3c12345")]
β Downloads and extracts the full paper text for Claude to read and discuss
Checking Session
You: "Is my ACS session still active?"
Claude: [Calls check_session("acs")]
β Reports session status and age
Available Tools
| Tool | Description | |------|-------------| | list_portals | Shows all portals and your login status for each | | authenticate_portal | Opens browser for institutional SSO login | | check_session | Verifies if a session is still valid | | search_papers | Searches for papers by keywords, title, etc. | | fetch_paper | Downloads and extracts full paper text (via DOI or URL) | | configure_institution | Sets up your institution name, EZProxy URL, WAYF name |
How Authentication Works
βββββββββββββββ ββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β Claude βββββΆβ MCP Server βββββΆβ Playwright βββββΆβ Publisher β
β (asks for β β (manages β β Browser β β Login Page β
β a paper) β β sessions) β β (visible) β β (SSO/SAML) β
βββββββββββββββ ββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β β
β ββββββββββββββββ β
βββββΆβ Your Univ. βββββ
β IdP (SSO) β
ββββββββββββββββ
β
You enter your
credentials here
- Claude calls
authenticate_portalβ a real browser window opens - The browser navigates to the publisher's institutional login
- You're redirected to your university's SSO page (Shibboleth/SAML)
- You enter your credentials in the browser
- After successful login, the tool captures the session cookies
- Cookies are encrypted and stored locally in
~/.claude-research/sessions/ - Subsequent requests use these cookies β no browser needed until they expire
Security Notes
- No credentials stored: Only session cookies are saved, never your password
- Encrypted storage: Cookies are encrypted with a machine-local key (Fernet)
- Session expiry: Sessions follow your institution's expiry policy (typically 8β24h)
- Local only: All data stays on your machine in
~/.claude-research/
Configuration
Optional: create ~/.claude-research/config.json:
{
"institution": {
"name": "MIT",
"ezproxy_url": "https://ezproxy.library.mit.edu/login",
"wayf_institution_name": "Massachusetts Institute of Technology"
},
"rate_limit_seconds": 1.0,
"max_content_length": 100000,
"browser_timeout_seconds": 300
}
Troubleshooting
| Issue | Solution | |-------|----------| | Browser doesn't open | Run uv run playwright install chromium | | Login times out | Increase browser_timeout_seconds in config | | Session expired quickly | Your institution may have short session limits; re-authenticate | | Paper text is empty | Some publishers serve content via JavaScript β try the PDF version | | "Access denied" error | Re-authenticate with authenticate_portal |
License
MIT






