Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
cookjohn avatar

Cnki Search

  • 995 installs
  • 811 repo stars
  • Updated March 13, 2026
  • cookjohn/cnki-skills

cnki-search is a Claude Code skill that searches CNKI (中国知网) via browser automation and returns structured Chinese academic paper metadata for developers researching technical topics.

About

cnki-search is a Claude Code skill from cookjohn/cnki-skills that queries CNKI (中国知网) for academic papers by Chinese or English keywords. It navigates https://kns.cnki.net/kns8s/search using Chrome DevTools MCP, runs a single evaluate_script search, and returns result counts plus structured lists with titles, URLs, authors, journals, and dates. Developers reach for cnki-search when validating assumptions against Chinese-language research, surveying domain literature, or gathering citations unavailable in Western preprint indexes.

  • Searches CNKI (中国知网) using keywords in Chinese or English
  • Returns result count plus structured list with titles, URLs, authors, journal and date
  • Single-call browser automation via chrome-devtools MCP
  • Built-in captcha detection and graceful error handling
  • Works as a reusable research agent capability across domains

Cnki Search by the numbers

  • 995 all-time installs (skills.sh)
  • +21 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #1,095 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Security screen: HIGH risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cookjohn/cnki-skills --skill cnki-search

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs995
repo stars811
Security audit1 / 3 scanners passed
Last updatedMarch 13, 2026
Repositorycookjohn/cnki-skills

How do you search CNKI for Chinese academic papers?

Quickly surface Chinese academic papers and structured metadata when exploring technical topics or validating assumptions.

Who is it for?

Developers or researchers who need Chinese-language academic literature from CNKI during technical exploration.

Skip if: Developers needing English-only preprint search via arXiv API without browser-based CNKI access.

When should I use this skill?

The user wants to find academic papers on CNKI or search 中国知网 by keyword in Chinese or English.

What you get

CNKI search result count and structured paper list with titles, authors, journals, dates, and URLs.

  • Structured CNKI paper list
  • Search result count

Files

SKILL.mdMarkdownGitHub ↗

CNKI Basic Search

Search CNKI for papers using keyword(s). Returns result count and structured result list (titles, URLs, authors, journal, date) in a single call.

Arguments

$ARGUMENTS contains the search keyword(s) in Chinese or English.

Steps

1. Navigate

Use mcp__chrome-devtools__navigate_pagehttps://kns.cnki.net/kns8s/search

2. Search + extract results (single evaluate_script, NO wait_for)

Replace YOUR_KEYWORDS with actual search terms:

async () => {
  const query = "YOUR_KEYWORDS";

  // Wait for search input (replaces wait_for)
  await new Promise((r, j) => {
    let n = 0;
    const c = () => { if (document.querySelector('input.search-input')) r(); else if (++n > 30) j('timeout'); else setTimeout(c, 500); };
    c();
  });

  // Check captcha (only if visible on screen, not hidden SDK at top:-1000000)
  const outer = document.querySelector('#tcaptcha_transform_dy');
  if (outer && outer.getBoundingClientRect().top >= 0) return { error: 'captcha' };

  // Fill and submit (verified selectors: input.search-input, input.search-btn)
  const input = document.querySelector('input.search-input');
  input.value = query;
  input.dispatchEvent(new Event('input', { bubbles: true }));
  document.querySelector('input.search-btn')?.click();

  // Wait for results
  await new Promise((r, j) => {
    let n = 0;
    const c = () => { if (document.body.innerText.includes('条结果')) r(); else if (++n > 30) j('timeout'); else setTimeout(c, 500); };
    c();
  });

  // Check captcha again
  const outer2 = document.querySelector('#tcaptcha_transform_dy');
  if (outer2 && outer2.getBoundingClientRect().top >= 0) return { error: 'captcha' };

  // Extract current page results (merged parse-results)
  const rows = document.querySelectorAll('.result-table-list tbody tr');
  const checkboxes = document.querySelectorAll('.result-table-list tbody input.cbItem');
  const results = Array.from(rows).map((row, i) => {
    const titleLink = row.querySelector('td.name a.fz14');
    const authors = Array.from(row.querySelectorAll('td.author a.KnowledgeNetLink') || []).map(a => a.innerText?.trim());
    const journal = row.querySelector('td.source a')?.innerText?.trim() || '';
    const date = row.querySelector('td.date')?.innerText?.trim() || '';
    const citations = row.querySelector('td.quote')?.innerText?.trim() || '';
    const downloads = row.querySelector('td.download')?.innerText?.trim() || '';
    return {
      n: i + 1,
      title: titleLink?.innerText?.trim() || '',
      href: titleLink?.href || '',
      exportId: checkboxes[i]?.value || '',
      authors: authors.join('; '),
      journal,
      date,
      citations,
      downloads
    };
  });

  return {
    query,
    total: document.querySelector('.pagerTitleCell')?.innerText?.match(/([\d,]+)/)?.[1] || '0',
    page: document.querySelector('.countPageMark')?.innerText || '1/1',
    results
  };
}

3. Report

Present results as a numbered list:

Searched CNKI for "$ARGUMENTS": found {total} results (page {page}).

1. {title}
   Authors: {authors} | Journal: {journal} | Date: {date}
   Citations: {citations} | Downloads: {downloads}

2. ...

4. Follow-up: navigate to a paper

When the user wants to open or download a specific paper, use navigate_page with the result's href URL directly — do NOT click the link (clicking opens a new tab and wastes 3 extra tool calls for tab management).

Captcha detection

Check #tcaptcha_transform_dy element's getBoundingClientRect().top >= 0. Tencent captcha SDK preloads DOM at top: -1000000px (off-screen, not active). Only return error: 'captcha' when top >= 0 (actually visible to user).

Verified selectors

ElementSelectorNotes
Search inputinput.search-inputid=txt_search, placeholder "中文文献、外文文献"
Search buttoninput.search-btntype="button"
Result count.pagerTitleCelltext "共找到 X 条结果"
Page indicator.countPageMarktext "1/300"
Result rows.result-table-list tbody trEach row = one paper
Title linktd.name a.fz14Paper title with href
Authorstd.author a.KnowledgeNetLinkAuthor name links
Journaltd.source aJournal/source link
Datetd.datePublication date text
Citationstd.quoteCitation count
Downloadstd.downloadDownload count

Batch export to Zotero

When user wants to save results to Zotero, use batch export directly from the results page — do NOT navigate to each detail page. The exportId in results equals the detail page's #export-id. Call cnki-export skill with batch mode (Step 1B). See cnki-export SKILL.md for details.

Tool calls: 2 (navigate + evaluate_script)

Related skills

How it compares

Use cnki-search for Chinese CNKI literature; use paper-lookup for English preprints via the arXiv Atom API without browser automation.

FAQ

How does cnki-search query CNKI?

cnki-search navigates https://kns.cnki.net/kns8s/search using Chrome DevTools MCP, submits keyword arguments, and extracts results via evaluate_script in one pass without separate wait steps.

What metadata does cnki-search return?

cnki-search returns the total result count and a structured list per paper including title, URL, authors, journal name, and publication date from CNKI search results.

Is Cnki Search safe to install?

skills.sh reports 1 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

AI & Agent Buildingresearchautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.