
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.
- Installs
- 443
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/cookjohn/gs-skills --skill gs-search- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads gs-search automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Google Scholar Basic Search
Search Google Scholar for papers using keyword(s). Returns structured result list via DOM scraping.
Arguments
$ARGUMENTS contains the search keyword(s).
Steps
1. Navigate
Use mcp__chrome-devtools__navigate_page:
- url:
https://scholar.google.com/scholar?q={URL_ENCODED_KEYWORDS}&hl=en&num=10
2. Extract results (evaluate_script)
Wait for results to load, check for CAPTCHA, then scrape the DOM:
async () => {
// Wait for results or CAPTCHA
for (let i = 0; i < 20; i++) {
if (document.querySelector('#gs_res_ccl') || document.querySelector('#gs_captcha_ccl')) break;
await new Promise(r => setTimeout(r, 500));
}
// CAPTCHA check
if (document.querySelector('#gs_captcha_ccl') || document.body.innerText.includes('unusual traffic')) {
return { error: 'captcha', message: 'Google Scholar requires CAPTCHA verification. Please complete it in your browser, then tell me to continue.' };
}
const items = document.querySelectorAll('#gs_res_ccl .gs_r.gs_or.gs_scl');
const results = Array.from(items).map((item, i) => {
const titleEl = item.querySelector('.gs_rt a');
const meta = item.querySelector('.gs_a')?.textContent || '';
// Parse "Author1, Author2 - Journal, Year - publisher"
const parts = meta.split(' - ');
const authors = parts[0]?.trim() || '';
const journalYear = parts[1]?.trim() || '';
const citedByEl = item.querySelector('.gs_fl a[href*="cites"]');
const relatedEl = item.querySelector('.gs_fl a[href*="related"]');
const versionsEl = item.querySelector('.gs_fl a[href*="cluster"]');
return {
n: i + 1,
title: titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '',
href: titleEl?.href || '',
authors,
journalYear,
citedBy: citedByEl?.textContent?.match(/\d+/)?.[0] || '0',
citedByUrl: citedByEl?.href || '',
dataCid: item.getAttribute('data-cid') || '',
fullTextUrl: (item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a'))?.href || '',
snippet: item.querySelector('.gs_rs')?.textContent?.trim()?.substring(0, 200) || '',
relatedUrl: relatedEl?.href || '',
versionsUrl: versionsEl?.href || '',
versions: versionsEl?.textContent?.match(/\d+/)?.[0] || ''
};
});
const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || '';
const currentUrl = window.location.href;
return { total: totalText, resultCount: results.length, currentUrl, results };
}
3. Report
Present results as a numbered list:
Searched Google Scholar for "$ARGUMENTS": {total}
1. {title}
Authors: {authors} | {journalYear}
Cited by: {citedBy} | [Full text]({fullTextUrl})
Data-CID: {dataCid}
2. ...
Always show the dataCid — it's the unique identifier used for citation export and "cited by" tracking.
If fullTextUrl is available, highlight it (means open-access PDF/HTML).
4. Follow-up
When the user wants to:
- See more results: use
gs-navigate-pagesto go to next page - See who cited a paper: use
gs-cited-bywith the data-cid - Export to Zotero: use
gs-exportwith the data-cid(s)
CAPTCHA Handling
If the result contains {error: 'captcha'}:
- Tell the user: "Google Scholar is requesting CAPTCHA verification. Please complete it in your browser."
- Wait for user confirmation
- Retry the evaluate_script extraction
Notes
- This skill uses 2 tool calls:
navigate_page+evaluate_script - Google Scholar has NO public API — all data extraction is via DOM scraping
data-cidis the primary identifier (cluster ID) — used across all GS skills- Keep request frequency low to avoid triggering CAPTCHA
- Default
num=10results per page (max 20)
FAQ
What does the gs-search skill do?
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.
How do I install gs-search?
Run npx skills add https://github.com/cookjohn/gs-skills --skill gs-search in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/gs-search/ (personal) or .claude/skills/gs-search/ (project).
Which AI agents can use gs-search?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is gs-search safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains gs-search?
It is published by cookjohn in cookjohn/gs-skills. It has 443 recorded installs.
More from cookjohn/gs-skills
gs-navigate-pages
cookjohn/gs-skills
Navigate Google Scholar search result pages. Use when user wants to see more results or go to a specific page.
Popular education & science skills
teach
mattpocock/skills
Teach the user a new skill or concept, within this workspace.
scaffold-exercises
mattpocock/skills
Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.
paper-context-resolver
lllllllama/rigorpilot-skills
Rigor Paper Context helper for README-first deep learning repo reproduction. Use only when the README and repository files leave a narrow reproduction-critical gap and the task is to resolve a specific paper detail such as dataset split, preprocessing, evaluation protocol, checkpoint mapping, or runtime assumption from primary paper sources while recording conflicts. Do not use for general paper summary, repo scanning, environment setup, command execution, title-only paper lookup, or replacing README guidance by default.
caveman-learn
juliusbrussee/caveman
Act on a Caveman learn report - review the ranked token sinks, apply cost-lowering fixes with per-edit consent, and report what those fixes returned. Use when asked to lower an agent's token cost, what caveman has saved, to trim a heavy CLAUDE.md, or to offload re-pasted context into cavemem.
gsap-plugins
greensock/gsap-skills
Official GSAP skill for GSAP plugins — registration, ScrollToPlugin, ScrollSmoother, Flip, Draggable, Inertia, Observer, SplitText, ScrambleText, SVG and physics plugins, CustomEase, EasePack, CustomWiggle, CustomBounce, GSDevTools. Use when the user asks about a GSAP plugin, scroll-to, flip animations, draggable, SVG drawing, or plugin registration.
teach-impeccable
pbakaus/impeccable
DEPRECATED: Use /impeccable teach instead. This command has been folded into the impeccable skill.