Best use case
mendeley-api is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Manage references and search Mendeley's catalog via REST API
Teams using mendeley-api should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/mendeley-api/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How mendeley-api Compares
| Feature / Agent | mendeley-api | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Manage references and search Mendeley's catalog via REST API
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Mendeley REST API
## Overview
Mendeley provides a reference management platform with a REST API for programmatic access to personal libraries, group collections, and the Mendeley Catalog — a crowdsourced database of 200M+ academic documents. The API supports OAuth 2.0 authentication, CRUD operations on documents/folders/annotations, and catalog search with rich metadata. Free tier available with registration.
## Authentication
Mendeley uses OAuth 2.0 with client credentials or authorization code flow.
```bash
# 1. Register app at https://dev.elsevier.com/
# 2. Get access token via client credentials (for catalog search)
curl -X POST "https://api.mendeley.com/oauth/token" \
-d "grant_type=client_credentials" \
-d "scope=all" \
-d "client_id=$MENDELEY_CLIENT_ID" \
-d "client_secret=$MENDELEY_CLIENT_SECRET"
# Response: { "access_token": "...", "expires_in": 3600, "token_type": "bearer" }
```
## API Endpoints
### Base URL
```
https://api.mendeley.com
```
### Catalog Search
Search across Mendeley's 200M+ document database:
```bash
# Search by title/keywords
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/catalog?query=deep+learning+NLP&limit=20"
# Search by DOI
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/catalog?doi=10.1038/nature14539"
# Search by title
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/catalog?title=attention+is+all+you+need"
```
### User Library
```bash
# List documents in personal library
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/documents?limit=50&sort=created&order=desc"
# Get document details
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/documents/{doc_id}"
# Add document to library
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/vnd.mendeley-document.1+json" \
-d '{"title":"My Paper","type":"journal","year":2025,"authors":[{"first_name":"A","last_name":"B"}]}' \
"https://api.mendeley.com/documents"
```
### Folders and Groups
```bash
# List folders
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/folders"
# List group documents
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/documents?group_id={group_id}"
```
### Annotations
```bash
# Get annotations for a document
curl -H "Authorization: Bearer $TOKEN" \
"https://api.mendeley.com/annotations?document_id={doc_id}"
```
## Query Parameters
| Parameter | Description | Example |
|-----------|-------------|---------|
| `query` | Free-text search | `query=transformer+model` |
| `doi` | DOI lookup | `doi=10.1234/example` |
| `title` | Title search | `title=BERT` |
| `author` | Author filter | `author=LeCun` |
| `min_year` | From year | `min_year=2020` |
| `max_year` | To year | `max_year=2026` |
| `limit` | Results per page (max 500) | `limit=50` |
| `sort` | Sort field | `created`, `title`, `year` |
| `order` | Sort direction | `asc` or `desc` |
| `view` | Response detail | `bib` (bibliographic), `stats` (reader counts) |
## Catalog Response
```json
{
"id": "abc123-...",
"title": "Attention Is All You Need",
"type": "conference_proceedings",
"year": 2017,
"authors": [
{"first_name": "Ashish", "last_name": "Vaswani"}
],
"source": "NeurIPS",
"identifiers": {
"doi": "10.5555/3295222.3295349",
"arxiv": "1706.03762"
},
"keywords": ["attention mechanism", "transformer"],
"abstract": "The dominant sequence transduction models...",
"reader_count": 15432,
"link": "https://www.mendeley.com/catalogue/..."
}
```
## Python Usage
```python
import os
import requests
CLIENT_ID = os.environ["MENDELEY_CLIENT_ID"]
CLIENT_SECRET = os.environ["MENDELEY_CLIENT_SECRET"]
TOKEN_URL = "https://api.mendeley.com/oauth/token"
BASE_URL = "https://api.mendeley.com"
def get_token() -> str:
"""Obtain access token via client credentials."""
resp = requests.post(TOKEN_URL, data={
"grant_type": "client_credentials",
"scope": "all",
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
})
resp.raise_for_status()
return resp.json()["access_token"]
def search_catalog(query: str, limit: int = 20,
min_year: int = None) -> list:
"""Search the Mendeley catalog."""
token = get_token()
params = {"query": query, "limit": limit, "view": "bib"}
if min_year:
params["min_year"] = min_year
resp = requests.get(
f"{BASE_URL}/catalog",
headers={"Authorization": f"Bearer {token}"},
params=params,
)
resp.raise_for_status()
results = []
for doc in resp.json():
results.append({
"title": doc.get("title"),
"authors": [f"{a['first_name']} {a['last_name']}"
for a in doc.get("authors", [])],
"year": doc.get("year"),
"source": doc.get("source"),
"doi": doc.get("identifiers", {}).get("doi"),
"readers": doc.get("reader_count", 0),
})
return results
def lookup_by_doi(doi: str) -> dict:
"""Look up a single document by DOI."""
token = get_token()
resp = requests.get(
f"{BASE_URL}/catalog",
headers={"Authorization": f"Bearer {token}"},
params={"doi": doi, "view": "bib"},
)
resp.raise_for_status()
items = resp.json()
return items[0] if items else {}
# Example
papers = search_catalog("federated learning privacy", min_year=2023)
for p in papers:
print(f"[{p['year']}] {p['title']} — readers: {p['readers']}")
```
## Reader Statistics
Mendeley tracks how many users have saved each paper, providing a real-time measure of scholarly interest (unlike citation counts which lag by months).
```python
def get_popular_papers(topic: str, limit: int = 10) -> list:
"""Find most-read papers on a topic via reader counts."""
results = search_catalog(topic, limit=limit)
return sorted(results, key=lambda x: x["readers"], reverse=True)
```
## Rate Limits
| Tier | Requests/hour | Catalog access |
|------|--------------|----------------|
| Free | 150 | Read-only catalog + personal library |
| Institutional | Higher | Full API access |
## References
- [Mendeley API Documentation](wentor-research-plugins)
- [Mendeley Developer Portal](https://dev.elsevier.com/)
- [Mendeley API Reference](https://api.mendeley.com/apidocs/)Related Skills
thuthesis-guide
Write Tsinghua University theses using the ThuThesis LaTeX template
thesis-writing-guide
Templates, formatting rules, and strategies for thesis and dissertation writing
thesis-template-guide
Set up LaTeX templates for PhD and Master's thesis documents
sjtuthesis-guide
Write SJTU theses using the SJTUThesis LaTeX template with full compliance
scientific-article-pdf
Generate publication-ready scientific article PDFs from templates
novathesis-guide
LaTeX thesis template supporting multiple universities and formats
graphical-abstract-guide
Create SVG graphical abstracts for journal paper submissions
elegant-paper-template
Beautiful LaTeX template for working papers and technical reports
conference-paper-template
Templates and formatting guides for major academic conference submissions
beamer-presentation-guide
Guide to creating academic presentations with LaTeX Beamer
plagiarism-detection-guide
Use plagiarism detection tools and ensure manuscript originality
paper-polish-guide
Review and polish LaTeX research papers for clarity and style