/gs-fulltext
Get full-text access links for a Google Scholar paper - PDF, DOI, Sci-Hub, and publisher links. Use when user wants to read or download a paper's full text.
$ npx -y skills add cookjohn/gs-skills --skill gs-fulltext --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/gs-fulltext
Context preview
The summary Claude sees to decide when to auto-load this skill.
Get full-text access links for a Google Scholar paper - PDF, DOI, Sci-Hub, and publisher links. Use when user wants to read or download a paper's full text.
SKILL.md
gs-fulltext.SKILL.mdname: gs-fulltext
description: Get full-text access links for a Google Scholar paper - PDF, DOI, Sci-Hub, and publisher links. Use when user wants to read or download a paper's full text.
argument-hint: "[data-cid or result number from previous search]"
Google Scholar Full Text Access
Resolve and present all full-text access options for a paper found in Google Scholar search results.
Arguments
$ARGUMENTS can be:
- A `data-cid` from a previous search result
- A result number (e.g., `3`) referring to a previous search result
Prerequisites
This skill works best after a previous `gs-search` or `gs-advanced-search` call, which already extracts `fullTextUrl` and `href` for each result. If those are available, use them directly.
Steps
Step 1: Collect links from search results
From the previous search result, extract these fields for the target paper:
- `fullTextUrl`: direct PDF/HTML link (from `.gs_ggs a`)
- `href`: link to the paper's publisher page (from `.gs_rt a`)
- `dataCid`: cluster ID
If no previous search context is available, search for the paper first using `gs-search`.
Step 2: Resolve additional links (evaluate_script)
Navigate to the Google Scholar results page (if not already there), then extract full-text links for the specific paper:
async () => {
const cid = "DATA_CID_HERE";
// Find the result item by data-cid
const item = document.querySelector(`.gs_r.gs_or.gs_scl[data-cid="${cid}"]`);
if (!item) return { error: 'not_found', message: 'Paper not found on current page. Try searching again.' };
const titleEl = item.querySelector('.gs_rt a');
const title = titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '';
const paperUrl = titleEl?.href || '';
// Full-text PDF/HTML link (shown on the right side of results)
const fullTextEl = item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a');
const fullTextUrl = fullTextEl?.href || '';
const fullTextType = fullTextEl?.querySelector('span.gs_ctg2')?.textContent?.trim() || '';
// Meta info for context
const meta = item.querySelector('.gs_a')?.textContent || '';
const parts = meta.split(' - ');
const authors = parts[0]?.trim() || '';
const journalYear = parts[1]?.trim() || '';
// Try to extract DOI from paper URL
let doi = '';
if (paperUrl.includes('doi.org/')) {
doi = paperUrl.replace(/^https?:\/\/(dx\.)?doi\.org\//, '');
}
// Build access links
const links = {};
if (fullTextUrl) {
links.fullText = fullTextUrl;
links.fullTextType = fullTextType || (fullTextUrl.endsWith('.pdf') ? '[PDF]' : '[HTML]');
}
if (paperUrl) {
links.publisher = paperUrl;
}
if (doi) {
links.doi = `https://doi.org/${doi}`;
links.scihub = `https://sci-hub.ru/${doi}`;
} else if (paperUrl) {
// Sci-Hub also works with direct URLs
links.scihub = `https://sci-hub.ru/${paperUrl}`;
}
return {
dataCid: cid,
title,
authors,
journalYear,
doi,
fullTextUrl,
fullTextType,
paperUrl,
links
};
}Step 3: Report
## Full Text Links — {title}
**Authors:** {authors} | {journalYear}
**Direct Full Text:**
{links.fullText ? "- " + links.fullTextType + " " + links.fullText : "No direct full text link available"}
**Publisher Page:**
{links.publisher ? "- " + links.publisher : "N/A"}
**DOI:**
{links.doi ? "- " + links.doi : "No DOI detected"}
**Sci-Hub:**
{links.scihub ? "- " + links.scihub : "N/A"}Step 4: Open full text (optional)
If the user wants to read the paper immediately, use `mcp__chrome-devtools__new_page` to open the preferred link in this priority: 1. `fullTextUrl` (direct PDF/HTML, usually free) 2. DOI link (may require subscription) 3. Sci-Hub link (fallback) 4. Publisher page
Notes
- This skill uses 1-2 tool calls: `evaluate_script` (if already on results page) or `navigate_page` + `evaluate_script`
- Google Scholar's full-text links (`.gs_ggs`) are usually free/open-access PDFs
- DOI may not always be extractable from the paper URL
- Sci-Hub works with both DOI and direct URL
- Opening full text in a new tab adds 1 more tool call (`new_page`)
Read more
name: gs-fulltext description: Get full-text access links for a Google Scholar paper - PDF, DOI, Sci-Hub, and publisher links. Use when user wants to read or download a paper's full text. argument-hint: "[data-cid or result number from previous search]"
Google Scholar Full Text Access
Resolve and present all full-text access options for a paper found in Google Scholar search results.
Arguments
$ARGUMENTS can be:
- A `data-cid` from a previous search result
- A result number (e.g., `3`) referring to a previous search result
Prerequisites
This skill works best after a previous `gs-search` or `gs-advanced-search` call, which already extracts `fullTextUrl` and `href` for each result. If those are available, use them directly.
Steps
Step 1: Collect links from search results
From the previous search result, extract these fields for the target paper:
- `fullTextUrl`: direct PDF/HTML link (from `.gs_ggs a`)
- `href`: link to the paper's publisher page (from `.gs_rt a`)
- `dataCid`: cluster ID
If no previous search context is available, search for the paper first using `gs-search`.
Step 2: Resolve additional links (evaluate_script)
Navigate to the Google Scholar results page (if not already there), then extract full-text links for the specific paper:
async () => {
const cid = "DATA_CID_HERE";
// Find the result item by data-cid
const item = document.querySelector(`.gs_r.gs_or.gs_scl[data-cid="${cid}"]`);
if (!item) return { error: 'not_found', message: 'Paper not found on current page. Try searching again.' };
const titleEl = item.querySelector('.gs_rt a');
const title = titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '';
const paperUrl = titleEl?.href || '';
// Full-text PDF/HTML link (shown on the right side of results)
const fullTextEl = item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a');
const fullTextUrl = fullTextEl?.href || '';
const fullTextType = fullTextEl?.querySelector('span.gs_ctg2')?.textContent?.trim() || '';
// Meta info for context
const meta = item.querySelector('.gs_a')?.textContent || '';
const parts = meta.split(' - ');
const authors = parts[0]?.trim() || '';
const journalYear = parts[1]?.trim() || '';
// Try to extract DOI from paper URL
let doi = '';
if (paperUrl.includes('doi.org/')) {
doi = paperUrl.replace(/^https?:\/\/(dx\.)?doi\.org\//, '');
}
// Build access links
const links = {};
if (fullTextUrl) {
links.fullText = fullTextUrl;
links.fullTextType = fullTextType || (fullTextUrl.endsWith('.pdf') ? '[PDF]' : '[HTML]');
}
if (paperUrl) {
links.publisher = paperUrl;
}
if (doi) {
links.doi = `https://doi.org/${doi}`;
links.scihub = `https://sci-hub.ru/${doi}`;
} else if (paperUrl) {
// Sci-Hub also works with direct URLs
links.scihub = `https://sci-hub.ru/${paperUrl}`;
}
return {
dataCid: cid,
title,
authors,
journalYear,
doi,
fullTextUrl,
fullTextType,
paperUrl,
links
};
}Step 3: Report
## Full Text Links — {title}
**Authors:** {authors} | {journalYear}
**Direct Full Text:**
{links.fullText ? "- " + links.fullTextType + " " + links.fullText : "No direct full text link available"}
**Publisher Page:**
{links.publisher ? "- " + links.publisher : "N/A"}
**DOI:**
{links.doi ? "- " + links.doi : "No DOI detected"}
**Sci-Hub:**
{links.scihub ? "- " + links.scihub : "N/A"}Step 4: Open full text (optional)
If the user wants to read the paper immediately, use `mcp__chrome-devtools__new_page` to open the preferred link in this priority: 1. `fullTextUrl` (direct PDF/HTML, usually free) 2. DOI link (may require subscription) 3. Sci-Hub link (fallback) 4. Publisher page
Notes
- This skill uses 1-2 tool calls: `evaluate_script` (if already on results page) or `navigate_page` + `evaluate_script`
- Google Scholar's full-text links (`.gs_ggs`) are usually free/open-access PDFs
- DOI may not always be extractable from the paper URL
- Sci-Hub works with both DOI and direct URL
- Opening full text in a new tab adds 1 more tool call (`new_page`)
Google Scholar skills for Claude Code — search, citation tracking, full-text access, and Zotero export via Chrome DevTools MCP
Repo: cookjohn/gs-skills
Other skills on gs-skills.
- /gs-advanced-search
Perform advanced Google Scholar search with filters - author, journal, date range, exact phrase, title-only. Constructs proper URL parameters from natural language. Use for precise filtered searches.
Open skill - /gs-cited-by
Find papers that cite a given Google Scholar paper. Tracks citation chains using data-cid (cluster ID). Use when user wants to see who cited a specific paper.
Open skill - /gs-export
Export Google Scholar paper(s) to Zotero via BibTeX. Gets citation data from Google Scholar's cite dialog, then pushes to Zotero desktop. Supports single or batch export.
Open skill - /gs-navigate-pages
Navigate Google Scholar search result pages. Use when user wants to see more results or go to a specific page.
Open skill - /gs-search
Search Google Scholar for academic papers by keywords. Returns results with title, authors, journal, year, citation count, and full-text links. Use when the user wants to search Google Scholar.
Open skill

