# Paper Query

> >-

- **Type:** Skill
- **Install:** `agentstack add skill-lyq777-xing-yq-paper-query-skill-yq-paper-query-skill`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [lyq777-Xing](https://agentstack.voostack.com/s/lyq777-xing)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [lyq777-Xing](https://github.com/lyq777-Xing)
- **Source:** https://github.com/lyq777-Xing/yq_paper_query_skill

## Install

```sh
agentstack add skill-lyq777-xing-yq-paper-query-skill-yq-paper-query-skill
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Paper Query Skill

## What I Do

- Search 7+ academic databases in parallel with automatic retry and fallback
- **Filter: Only show published papers** (journal/conference proceedings, exclude unpublished preprints)
- Deduplicate and merge results by DOI, arXiv ID, or title similarity
- Annotate venue tiers using CCF (A/B/C), CAS-JCR (Q1-Q4), and SCI (Q1-Q4)
- Translate paper titles from English to Chinese
- Generate 2-3 sentence bilingual summaries from abstracts
- Format results as Markdown with direct links to arXiv, DOI, Semantic Scholar
- Auto-save results to `papers/query_.md`

---

## Workflow

### Step 0: Check Configuration

Read `paper-config.json` from the project root. If the file is missing:

> I notice your paper query is not set up yet. Let me help you configure it. Please run `/paper-setup` to create your profile — it takes about 2 minutes.

If the file exists, extract:
- `user.name`, `user.institution`, `user.field_of_study`
- `api_keys` for rate-limited APIs
- `preferences.databases`, `preferences.min_venue_tier`, `preferences.max_results`
- `preferences.sort_by`, `preferences.year_range`, `preferences.output`

**Dynamic Year Range**: If `preferences.year_range` is `null` or not set, default to the last 3 years:
- `year_start = current_year - 3` (e.g., 2023 if today is 2026)
- `year_end = current_year`
- User can specify explicit year range in query to override this default

### Step 1: Parse Query

From the user's query string, extract:
- **Keywords**: core search terms — generate 2-3 query variants (exact phrase, broader terms, synonyms) to maximize recall
- **Authors**: if mentioned (e.g., "papers by Hinton")
- **Year range**: if user specifies (e.g., "--year 2023-2025"), use it. Otherwise, use config default (last 3 years). **CRITICAL: Always apply a year filter** to avoid overwhelming results.
- **Venue filter**: if user mentions a specific conference/journal
- **Topic mapping**: map keywords to CS subfields for venue prioritization

**Important**: The year range defaults to the last 3 years. If the user does not specify a year and the config has `null`, use `current_year - 3` to `current_year`.

### Step 2: Parallel Database Search

Query all configured databases simultaneously using `webfetch`. 
**IMPORTANT**: Request **2x** `preferences.max_results` from each source to compensate for unpublished preprints that will be filtered later.

**General Retry Strategy for all APIs**:
- If 429 (rate limited): wait 5 seconds, retry once. If still fails, try the fallback endpoint.
- If 500/502/503 (server error): wait 2 seconds, retry once. If still fails, skip that source and note it.
- If timeout (>15s): skip and try fallback.
- If 403 (forbidden): skip immediately — this source requires authentication.

**Data Coverage Note**: Semantic Scholar and OpenAlex are meta-search engines that aggregate papers from hundreds of publishers including IEEE Xplore, ACM Digital Library, Springer, Elsevier, and others. Even when IEEE/ACM direct APIs fail, their papers ARE still represented in the results — you just get them through S2/OpenAlex instead of directly. Do NOT treat IEEE/ACM direct API failure as missing data.

#### 2.1 arXiv API (with rate-limiting discipline)

arXiv enforces strict rate limits: **no more than 1 request per 3 seconds**. Violations result in 429 + temporary ban.

**Query strategy** — use a single targeted request:
```
URL: http://export.arxiv.org/api/query?search_query=all:{encoded_keywords}&start=0&max_results={2x_max_results}&sortBy=relevance
```
Parse XML response. Extract: id, title, summary, authors (list), published (date), doi, journal_ref, primary_category, link.

**Rate limit handling**:
- If 429: wait 20 seconds (arXiv ban cooldown), retry once. If still fails, skip — S2 and OpenAlex already cover arXiv papers.
- Do NOT send multiple rapid requests to arXiv. One query per search is sufficient.

**Published-only check**: After parsing, flag papers that have a `journal_ref` or `doi` as PUBLISHED. Papers with neither are preprints — keep them for dedup but mark as unpublished candidate.

#### 2.2 Semantic Scholar API (with rate-limit handling)

**Primary endpoint** — try this first:
```
URL: https://api.semanticscholar.org/graph/v1/paper/search?query={encoded_keywords}&limit={2x_max_results}&year={year_start}-{year_end}&fieldsOfStudy={topic}&fields=title,year,authors,externalIds,url,abstract,venue,citationCount,publicationTypes,openAccessPdf,publicationDate,journal
```
If API key configured, add: `x-api-key: {key}`

**Fallback endpoint** — use if primary returns 429:
```
URL: https://api.semanticscholar.org/graph/v1/paper/search/bulk?query={encoded_keywords}&year={year_start}-{year_end}&fields=title,year,authors,externalIds,url,abstract,venue,citationCount,publicationTypes,journal
```

**No-key workaround** — if both endpoints rate-limit and no API key is configured:
- Inform user: "Semantic Scholar API 请求被限。建议在 https://www.semanticscholar.org/product/api 免费注册 API key 以提高限额。"
- Skip Semantic Scholar, proceed with other databases.

Parse JSON response (`data` array). Extract: title, year, authors, externalIds (DOI, ArXiv), url, abstract, venue, citationCount, publicationTypes, journal.

#### 2.3 DBLP API (with fallback)

**Primary endpoint**:
```
URL: https://dblp.org/search/publ/api?q={encoded_keywords}&h={2x_max_results}&format=json
```

**Fallback endpoint** — use author-title search if primary fails:
```
URL: https://dblp.org/search/publ/api?q={encoded_keywords}&h={2x_max_results}&format=json&c=0
```

**Second fallback** — use simpler search with f=0:
```
URL: https://dblp.org/search/publ/api?q={encoded_keywords}&h={2x_max_results}&f=0&format=json
```

If DBLP returns 500 after all retries, skip it — DBLP has known stability issues. Note in results.

Parse JSON. Extract from `result.hits.hit[]`: title, year, venue (from `info.venue`), authors (from `info.authors.author[]`), doi (from `info.doi` or `info.ee`).

#### 2.4 PubMed E-utilities
```
Step 1 (search): https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={encoded_keywords}&retmax={2x_max_results}&retmode=json&mindate={year_start}&maxdate={year_end}&datetype=pdat
Step 2 (fetch): https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id={comma_separated_ids}&retmode=json
```
Parse JSON. Extract: title, authors, pubdate, source (journal), doi, articleids.

#### 2.5 IEEE Xplore (API key required)

IEEE Xplore has no public REST API. The search page aggressively blocks automated access (403). There are two paths:

**Path A — With API key** (configured in `paper-config.json.api_keys.ieee`):
```
URL: https://ieeexplore.ieee.org/rest/search
Method: POST
Headers:
  Content-Type: application/json
  Accept: application/json
  apikey: {ieee_api_key}
Body: {"queryText": "{keywords}", "returnType": "SEARCH", "highlight": false, "rowsPerPage": {2x_max_results}, "ranges": ["{year_start}_{year_end}_Year"]}
```

**Path B — Without API key** (most users):
Skip IEEE Xplore direct search entirely. The IEEE papers ARE already covered by Semantic Scholar and OpenAlex — they index IEEE Xplore content including all conference proceedings and journals. Your results will include IEEE papers via these sources.

**How to get an IEEE API key**:
1. Visit https://developer.ieee.org/
2. Register for a free account (requires institutional email or IEEE membership)
3. Request API access — approval may take days
4. Add the key to `paper-config.json`: `"api_keys": { "ieee": "your-key-here" }`

**If 403 or auth error**: Skip and note "IEEE Xplore 需 API key 授权。IEEE 论文已通过 Semantic Scholar/OpenAlex 覆盖。"

#### 2.6 ACM Digital Library (limited access)

ACM Digital Library blocks automated web scraping (403). Direct search is unreliable.

**With institutional access** (if user can authenticate):
Try a single webfetch attempt:
```
URL: https://dl.acm.org/action/doSearch?AllField={encoded_keywords}&pageSize={2x_max_results}&startPage=0&AfterYear={year_start}&BeforeYear={year_end}
```
Parse HTML for paper entries if response is successful.

**Without institutional access** (most users):
Skip ACM DL direct search entirely. ACM papers (SIGMOD, SIGCOMM, CHI, CCS, OSDI, etc.) ARE indexed by DBLP, Semantic Scholar, and OpenAlex — all three cover ACM venues comprehensively. No data is lost by skipping ACM direct.

**If 403 or blocked**: Skip silently. Note "ACM Digital Library 拒绝自动访问 — ACM 论文已通过 DBLP/Semantic Scholar/OpenAlex 覆盖。"

#### 2.7 Google Scholar (webfetch — last resort fallback)
Only use if fewer than 5 results returned from all other databases combined.
```
URL: https://scholar.google.com/scholar?q={encoded_keywords}&as_ylo={year_start}&as_yhi={year_end}&num={max_results}
```
Parse HTML. Extract title, authors, year, venue, cited-by count.

**Warning**: Google Scholar frequently blocks automated access. If blocked or returns empty, skip silently — do not treat as error.

#### 2.8 Additional Open Access Sources (if results are still insufficient)

**OpenAlex API** (free, no key needed):
```
URL: https://api.openalex.org/works?search={encoded_keywords}&filter=publication_year:{year_start}-{year_end},type:article|proceedings&per_page={2x_max_results}&sort=publication_date:desc
```
This is an excellent fallback — OpenAlex has broad coverage and is fully open access.

**CORE API** (free, no key needed):
```
URL: https://api.core.ac.uk/v3/search/works?q={encoded_keywords}&yearFrom={year_start}&yearTo={year_end}&limit={2x_max_results}
```

### Step 2.5: Published-Paper Filter (CRITICAL)

After collecting raw results from all databases, apply this filter to keep ONLY published papers:

A paper is considered PUBLISHED if it has ANY of the following:
- **DOI** assigned (from any source)
- **Journal reference** present (arXiv `journal_ref` field)
- **Venue + year** clearly specified (conference name + year, or journal name + volume/issue)
- **In DBLP** (DBLP only indexes published CS papers)
- **In PubMed** with PMID (PubMed only indexes published papers)
- **publicationTypes** from Semantic Scholar indicates "JournalArticle" or "Review"

A paper is UNPUBLISHED (exclude) if:
- Only has arXiv ID but NO DOI, NO journal_ref, NO venue
- Only appears on Google Scholar without verifiable venue

**Filtering logic**: Remove all unpublished papers from the candidate list. Keep a count of how many were removed for reporting.

**Exception**: If after filtering, fewer than 3 papers remain, fall back to the broader candidate list and mark the report header: "⚠️ 大部分结果为预印本/未发表论文，仅有 {count} 篇已发表。"

### Step 3: Deduplicate and Merge

After collecting results from all databases:

1. **Normalize titles**: lowercase, remove punctuation, strip extra whitespace
2. **Match by DOI**: exact DOI match → merge
3. **Match by arXiv ID**: exact arXiv ID match → merge
4. **Match by title similarity**: if title edit distance < 10% of length → likely same paper
5. **Merge data**: for matched papers, combine metadata from all sources, preferring:
   - DOI from Semantic Scholar or CrossRef
   - Citation count from Semantic Scholar
   - Abstract from arXiv (usually most complete)
   - Venue info from DBLP (usually most accurate)

### Step 4: Venue Tier Annotation

For each paper, check its venue (conference or journal) against the tier database below. Assign ALL applicable tiers.

**Tier Badge Format**: `🏆CCF-A ⭐SCI-Q1 📊CAS-Q1`

#### Tier Database

##### AI / Machine Learning
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| NeurIPS | Conference | A | — | — |
| ICML | Conference | A | — | — |
| AAAI | Conference | A | — | — |
| IJCAI | Conference | A | — | — |
| ICLR | Conference | A* | — | — |
| UAI | Conference | B | — | — |
| AISTATS | Conference | B | — | — |
| ECAI | Conference | B | — | — |
| ACML | Conference | C | — | — |
| TPAMI | Journal | A | Q1 | Q1 |
| JMLR | Journal | A | Q1 | Q1 |
| AIJ | Journal | A | Q1 | Q1 |
| Neural Networks | Journal | B | Q1 | Q1 |
| MLJ | Journal | B | Q2 | Q2 |
| Neurocomputing | Journal | C | Q1 | Q2 |
| IJON | Journal | C | Q1 | Q2 |
| Pattern Recognition | Journal | B | Q1 | Q1 |

##### Computer Vision
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| CVPR | Conference | A | — | — |
| ICCV | Conference | A | — | — |
| ECCV | Conference | B | — | — |
| BMVC | Conference | C | — | — |
| ACCV | Conference | C | — | — |
| IJCV | Journal | A | Q1 | Q1 |
| TIP | Journal | A | Q1 | Q1 |
| CVIU | Journal | B | Q2 | Q2 |
| PR Letters | Journal | C | Q3 | Q3 |
| IET-CV | Journal | C | Q4 | Q4 |

##### Natural Language Processing
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| ACL | Conference | A | — | — |
| EMNLP | Conference | A | — | — |
| NAACL | Conference | B | — | — |
| COLING | Conference | B | — | — |
| CoNLL | Conference | B | — | — |
| EACL | Conference | C | — | — |
| CL | Journal | A | Q1 | Q1 |
| TACL | Journal | A | Q1 | Q1 |
| NLP Engineering | Journal | B | Q2 | Q2 |
| ACM-TALLIP | Journal | C | Q4 | Q4 |

##### Computer Systems / Architecture
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| OSDI | Conference | A | — | — |
| SOSP | Conference | A | — | — |
| ASPLOS | Conference | A | — | — |
| EuroSys | Conference | A | — | — |
| USENIX ATC | Conference | A | — | — |
| FAST | Conference | A | — | — |
| ISCA | Conference | A | — | — |
| MICRO | Conference | A | — | — |
| HPCA | Conference | A | — | — |
| SC | Conference | A | — | — |
| PPoPP | Conference | A | — | — |
| PODC | Conference | B | — | — |
| ICDCS | Conference | B | — | — |
| Middleware | Conference | B | — | — |
| TOCS | Journal | A | Q1 | Q1 |
| TPDS | Journal | A | Q1 | Q1 |
| TC | Journal | A | Q1 | Q1 |
| TACO | Journal | A | Q1 | Q1 |
| JPDC | Journal | B | Q2 | Q2 |
| FGCS | Journal | C | Q1 | Q2 |

##### Computer Networks
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| SIGCOMM | Conference | A | — | — |
| NSDI | Conference | A | — | — |
| MobiCom | Conference | A | — | — |
| INFOCOM | Conference | A | — | — |
| SenSys | Conference | B | — | — |
| ICNP | Conference | B | — | — |
| CoNEXT | Conference | B | — | — |
| MobiSys | Conference | B | — | — |
| TON | Journal | A | Q1 | Q1 |
| JSAC | Journal | A | Q1 | Q1 |
| TMC | Journal | A | Q1 | Q1 |
| TWC | Journal | B | Q1 | Q1 |
| ComNet | Journal | B | Q2 | Q2 |

##### Databases
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| SIGMOD | Conference | A | — | — |
| VLDB | Conference | A | — | — |
| ICDE | Conference | A | — | — |
| PODS | Conference | B | — | — |
| CIKM | Conference | B | — | — |
| EDBT | Conference | B | — | — |
| DASFAA | Conference | B | — | — |
| TKDE | Journal | A | Q1 | Q1 |
| VLDBJ | Journal | A | Q1 | Q1 |
| ISJ | Journal | B | Q1 | Q1 |
| DKE | Journal | B | Q2 | Q2 |
| WWWJ | Journal | B | Q3 | Q3 |

##### Security / Privacy
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| IEEE S&P | Conference | A | — | — |
| ACM CCS | Conference | A | — | — |
| USENIX Security | Conference | A | — | — |
| NDSS | Conference | A | — | — |
| ESORICS | Conference | B | — | — |
| RAID | Conference | B | — | — |
| ACSAC | Conference | B | — | — |
| ASIACRYPT | Conference | B | — | — |
| TDSC | Journal | A | Q1 | Q1 |
| TIFS | Journal | A | Q1 | Q1 |
| Computers & Security | Journal | B | Q1 | Q2 |
| JCS | Journal | B | Q2 | Q2 |

##### Software Engineering
| Venue | Type | CCF | SCI | CAS-JCR |
|-------|------|-----|-----|---------|
| ICSE | Conference | A | — | — |
| FSE/ESEC | Conference | A | — | — |
| ASE | Conference | A | — | — |
| ISSTA | Conference | A | — | — |
| OOPSLA/SPLASH | Conference | A | — | — |
| ICSME | Conference | B | — | — |
| SANER | Conference | B | — | — |
| MSR | Conference | B | — | — |
| TSE | Journal | A | Q1 | Q1 |
| TOSEM | Journal | A | Q1 | Q1 |
| EMSE | Journal | B | Q1 | Q1 |
| JSS | Journal | B | Q1 | Q1 |
| IST | Journal | B |

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [lyq777-Xing](https://github.com/lyq777-Xing)
- **Source:** [lyq777-Xing/yq_paper_query_skill](https://github.com/lyq777-Xing/yq_paper_query_skill)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-lyq777-xing-yq-paper-query-skill-yq-paper-query-skill
- Seller: https://agentstack.voostack.com/s/lyq777-xing
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
