semantic-scholar

Search and retrieve research paper metadata using the Semantic Scholar Academic Graph API via curl. Use this skill whenever the user wants to find academic papers, look up citations, get paper details by DOI/arXiv ID/title, explore an author's publications, or fetch reference/citation lists. Trigger on phrases like "find papers on X", "look up this paper", "how many citations does X have", "papers citing X", "search for research about X", "get metadata for arxiv:...", or any request to explore academic literature. Always use this skill when the task involves academic paper search or metadata retrieval — even if the user just pastes a DOI or arXiv link and wants info about it.

14 stars

Best use case

semantic-scholar is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Search and retrieve research paper metadata using the Semantic Scholar Academic Graph API via curl. Use this skill whenever the user wants to find academic papers, look up citations, get paper details by DOI/arXiv ID/title, explore an author's publications, or fetch reference/citation lists. Trigger on phrases like "find papers on X", "look up this paper", "how many citations does X have", "papers citing X", "search for research about X", "get metadata for arxiv:...", or any request to explore academic literature. Always use this skill when the task involves academic paper search or metadata retrieval — even if the user just pastes a DOI or arXiv link and wants info about it.

Teams using semantic-scholar 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

$curl -o ~/.claude/skills/semantic-scholar/SKILL.md --create-dirs "https://raw.githubusercontent.com/duskmoon314/keine/main/.agents/skills/semantic-scholar/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/semantic-scholar/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How semantic-scholar Compares

Feature / Agentsemantic-scholarStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Search and retrieve research paper metadata using the Semantic Scholar Academic Graph API via curl. Use this skill whenever the user wants to find academic papers, look up citations, get paper details by DOI/arXiv ID/title, explore an author's publications, or fetch reference/citation lists. Trigger on phrases like "find papers on X", "look up this paper", "how many citations does X have", "papers citing X", "search for research about X", "get metadata for arxiv:...", or any request to explore academic literature. Always use this skill when the task involves academic paper search or metadata retrieval — even if the user just pastes a DOI or arXiv link and wants info about it.

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

# Semantic Scholar Paper Metadata Skill

Search and retrieve research paper metadata using the [Semantic Scholar Academic Graph API](https://api.semanticscholar.org/api-docs/).

**Base URL:** `https://api.semanticscholar.org/graph/v1`
**Auth:** No key required for basic use. For higher rate limits, get a free key at https://www.semanticscholar.org/product/api and pass it as `x-api-key` header.

---

## Choosing the Right Endpoint

| Goal | Endpoint |
|------|----------|
| Search by keywords/topic | `GET /paper/search` |
| Boolean/filtered bulk search | `GET /paper/search/bulk` |
| Match by exact/near-exact title | `GET /paper/search/match` |
| Look up a specific paper (DOI, arXiv, etc.) | `GET /paper/{paper_id}` |
| Fetch multiple papers at once | `POST /paper/batch` |
| Papers that cite a paper | `GET /paper/{paper_id}/citations` |
| Papers referenced by a paper | `GET /paper/{paper_id}/references` |
| Author's papers | `GET /author/{author_id}/papers` |

---

## Field Selection

All endpoints accept a `fields` parameter — a comma-separated list. Default response only includes `paperId` and `title`. Always request the fields you need.

**Common fields:**
```
paperId, corpusId, externalIds, title, abstract, year, venue,
publicationDate, authors, citationCount, referenceCount,
influentialCitationCount, isOpenAccess, openAccessPdf,
fieldsOfStudy, s2FieldsOfStudy, publicationTypes
```

**Nested fields** use dot notation:
```
authors.name, authors.affiliations,
citations.title, citations.year, citations.authors,
references.title, references.externalIds,
openAccessPdf.url
```

---

## Endpoint Details & curl Examples

### 1. Keyword Search — `/paper/search`

Best for: topic discovery, finding relevant papers by concept.

```bash
curl -G "https://api.semanticscholar.org/graph/v1/paper/search" \
  --data-urlencode "query=transformer attention mechanism" \
  --data-urlencode "fields=title,year,authors,citationCount,abstract" \
  --data-urlencode "limit=10"
```

**Filters** (all optional, combine freely):
```bash
--data-urlencode "year=2020-2024"               # year range
--data-urlencode "venue=NeurIPS,ICML"           # specific venues
--data-urlencode "fieldsOfStudy=Computer Science"
--data-urlencode "minCitationCount=50"
--data-urlencode "openAccessPdf="               # open access only (empty value = true)
--data-urlencode "publicationDateOrYear=2023-01-01:2023-12-31"
```

**Pagination:** Response includes `total`, `offset`, `next`. Use `offset=N` to page through results (max 1,000 total).

---

### 2. Bulk Search — `/paper/search/bulk`

Best for: large result sets, boolean queries, sorted/filtered exports.

Supports AND/OR/NOT operators and returns up to 1,000 results per call with token-based pagination (no 1,000 total cap).

```bash
curl -G "https://api.semanticscholar.org/graph/v1/paper/search/bulk" \
  --data-urlencode "query=large language models AND safety" \
  --data-urlencode "fields=title,year,citationCount,authors" \
  --data-urlencode "sort=citationCount:desc" \
  --data-urlencode "limit=100"
```

**Sort options:** `paperId`, `publicationDate`, `citationCount` (append `:asc` or `:desc`).

**Pagination:** Response includes a `token` field. Pass it as `&token=...` on the next call.

---

### 3. Title Match — `/paper/search/match`

Best for: "I have this paper title, give me its metadata."
Returns a single best match or 404. Includes a `matchScore`.

```bash
curl -G "https://api.semanticscholar.org/graph/v1/paper/search/match" \
  --data-urlencode "query=Attention Is All You Need" \
  --data-urlencode "fields=title,year,authors,citationCount,externalIds"
```

---

### 4. Paper by ID — `/paper/{paper_id}`

Best for: fetching full metadata when you already have an identifier.

**Supported ID formats** (prefix as shown):
| Format | Example |
|--------|---------|
| S2 Paper ID (bare) | `649def34f8be52c8b66281af98ae884c09aef38a` |
| Corpus ID | `CorpusId:215416146` |
| DOI | `DOI:10.18653/v1/2020.acl-main.463` |
| arXiv | `ARXIV:2005.14165` |
| PubMed | `PMID:23193287` |
| PubMed Central | `PMCID:PMC4535869` |
| ACL Anthology | `ACL:2020.acl-main.463` |
| Semantic Scholar URL | `URL:https://www.semanticscholar.org/paper/...` |

```bash
# By arXiv ID
curl "https://api.semanticscholar.org/graph/v1/paper/ARXIV:1706.03762?fields=title,abstract,year,authors,citationCount,referenceCount,isOpenAccess,openAccessPdf"

# By DOI
curl "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1145/3292500.3330919?fields=title,year,venue,citationCount"
```

---

### 5. Batch Paper Lookup — `POST /paper/batch`

Best for: fetching metadata for a list of known paper IDs (up to 500).

```bash
curl -X POST "https://api.semanticscholar.org/graph/v1/paper/batch?fields=title,year,citationCount" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["ARXIV:1706.03762", "ARXIV:2005.14165", "DOI:10.18653/v1/2020.acl-main.463"]}'
```

---

### 6. Citations & References

```bash
# Papers that CITE this paper (incoming)
curl "https://api.semanticscholar.org/graph/v1/paper/ARXIV:1706.03762/citations?fields=title,year,authors,citationCount&limit=20"

# Papers this paper CITES (outgoing)
curl "https://api.semanticscholar.org/graph/v1/paper/ARXIV:1706.03762/references?fields=title,year,authors&limit=20"
```

Response wraps each item in a `citingPaper` or `citedPaper` key:
```json
{ "data": [{ "citingPaper": { "title": "...", "year": 2023 } }] }
```

---

### 7. Author Lookup

```bash
# Find an author's ID by name
curl -G "https://api.semanticscholar.org/graph/v1/author/search" \
  --data-urlencode "query=Yoshua Bengio" \
  --data-urlencode "fields=name,affiliations,paperCount,citationCount,hIndex"

# Get their papers
curl "https://api.semanticscholar.org/graph/v1/author/{authorId}/papers?fields=title,year,citationCount&limit=20"
```

---

## Rate Limits & API Key

- Without a key: ~100 requests/5 min (shared pool)
- With a free API key: ~1 request/sec sustained

To use an API key:
```bash
curl -H "x-api-key: YOUR_KEY" "https://api.semanticscholar.org/graph/v1/paper/..."
```

Store the key in an env var: `export S2_API_KEY=...`
Then use: `-H "x-api-key: $S2_API_KEY"`

---

## Parsing Results

Use `jq` to extract fields from responses:

```bash
# List titles and citation counts from a search
curl -s -G "https://api.semanticscholar.org/graph/v1/paper/search" \
  --data-urlencode "query=BERT language model" \
  --data-urlencode "fields=title,year,citationCount" \
  --data-urlencode "limit=5" \
| jq '.data[] | "\(.citationCount)\t\(.year)\t\(.title)"'

# Get all author names from a paper
curl -s "https://api.semanticscholar.org/graph/v1/paper/ARXIV:1706.03762?fields=authors.name" \
| jq '[.authors[].name]'

# Extract open access PDF URL
curl -s "https://api.semanticscholar.org/graph/v1/paper/ARXIV:2005.14165?fields=openAccessPdf" \
| jq '.openAccessPdf.url'
```

---

## Workflow Tips

- **Start with `/paper/search/match`** when the user provides a full title — it's faster than a keyword search.
- **Use `/paper/{id}`** when they give you a DOI, arXiv link, or PubMed ID — extract the ID and call directly.
- **For "papers about X"** questions, use `/paper/search` with `minCitationCount` and `year` filters to surface foundational work.
- **For citation counts and h-index exploration**, combine `/author/search` → `/author/{id}/papers` sorted by `citationCount:desc`.
- **Always request only the fields you need** — smaller responses, faster calls.
- **When displaying results**, format as a table with title, year, venue, and citation count for readability.

Related Skills

openalex

14
from duskmoon314/keine

Search and retrieve scholarly metadata from the OpenAlex API — a free, open catalog of 270M+ works, 90M+ authors, and 100K+ sources. Use this skill whenever the user wants to query OpenAlex for works, authors, institutions, sources, topics, publishers, or funders. Trigger on phrases like "search OpenAlex for X", "find papers in OpenAlex", "OpenAlex works by author Y", "get institution metadata from OpenAlex", "look up this DOI in OpenAlex", "how many works does institution X have in OpenAlex", or any request that specifically involves the OpenAlex API or database. Also trigger when the user pastes an OpenAlex ID (like W1234567890 or A5023888391) or mentions OpenAlex by name in any research context. This skill complements the semantic-scholar skill — use OpenAlex when the user asks for it specifically, when they need institution/funder/topic data that Semantic Scholar doesn't cover, or when they want open-access filtering and aggregation features unique to OpenAlex.

keine-update-maps

14
from duskmoon314/keine

Use this skill when creating or editing a topic map in the Keine knowledge base. Trigger after ingesting a set of related entries on a topic, or when asked to summarize, compare, survey, or give an overview of a subject area. Also use when a user asks a broad question and you want to leave a synthesized overview for future agents or readers. Maps are different from entries — they synthesize rather than document.

keine-update-entries

14
from duskmoon314/keine

Use this skill when creating a new knowledge entry or editing an existing one in the Keine knowledge base. Trigger when asked to add, ingest, document, or update any piece of knowledge — a URL, PDF, book, concept, note, or research finding. Use this skill even when the user doesn't say "entry" — if they want to capture or update knowledge, this is the skill.

keine-research

14
from duskmoon314/keine

Use this skill only when the user explicitly requests deep research or a detailed report on a topic — phrases like "research X", "give me a detailed report on X", "deep dive into X", "I want a thorough analysis of X", or "write me a research report on X". Do NOT trigger for casual questions, quick lookups, or requests to add/edit entries. This is a heavyweight, multi-step workflow that mines the knowledge base, fills gaps with web research, creates new KB entries along the way, and produces a long-form, citation-rich research report saved to reports/.

keine-manage

14
from duskmoon314/keine

Always use this skill before creating, editing, or tagging any document in the knowledge base. Use it when asked to add, ingest, find, link, or manage any entry.

keine-chat

14
from duskmoon314/keine

Use this skill whenever the user wants to discuss, explore, or ask questions about a topic using the local knowledge base as grounding. Trigger on phrases like "what do you know about X", "let's talk about X", "explain X", "I'm trying to understand X", "discuss X with me", "what does the KB have on X", "help me think through X", "tell me about X", or any conversational question about a concept or idea. Also trigger when the user asks a question that could be answered from stored knowledge, even if they don't explicitly say "knowledge base". This is the default skill for knowledge-grounded conversation — prefer it over answering from memory alone whenever the KB might have relevant content. Do NOT trigger for: deep research reports (use keine-research), adding new entries (use keine-update-entries), or creating maps (use keine-update-maps).

semanticscholar-automation

11
from EricGrill/agents-skills-plugins

Automate Semanticscholar tasks via Rube MCP (Composio). Always search tools first for current schemas.

scholar-evaluation

10
from Blurjp/ImagePrepMCP

Systematically evaluate scholarly work using the ScholarEval framework, providing structured assessment across research quality dimensions including problem formulation, methodology, analysis, and writing with quantitative scoring and actionable feedback.

apply-semantic-versioning

9
from pjt222/agent-almanac

Apply semantic versioning (SemVer 2.0.0) to determine the correct version bump based on change analysis. Covers major/minor/patch classification, pre-release identifiers, build metadata, and breaking change detection. Use when preparing a new release to determine the correct version number, after merging changes before tagging, evaluating whether a change constitutes a breaking change, adding pre-release identifiers, or resolving disagreement about what version bump is appropriate.

semantic-git

8
from siviter-xyz/dot-agent

Manage Git commits using conventional commit format with atomic staging. Always generate plain git commands before running them and offer to let the user run them manually.

semantic-release-troubleshooting

8
from patternfly/ai-helpers

Diagnose and fix semantic-release issues when a specific version is not being released. Use when semantic-release skips a version, fails to release, or when troubleshooting after git push --force, squashed commits, permission errors, or reference already exists.

comparative-religion-scholar

8
from sandraschi/advanced-memory-mcp

Expert in world religions covering beliefs, practices, texts, and comparative analysis across traditions