IEEE Paper Survey Skill
What it does
When asked "what papers are out there on X", run this pipeline: search → de-noise → rank → present cards → user picks → fetch full text.
What it does NOT do
- Does not write survey articles (that is
deep-research, if installed) - No citation graphs, no meta-analysis
- Never bulk-downloads dozens of PDFs without user confirmation
Main flow
1. Tighten the query
If the user's keywords are too broad ("DAB converter"), add one qualifier ("DAB converter ZVS modulation"). A more specific query means less noise.
2. Search (hard constraint)
uv run --directory ~/paper-search-mcp paper-search search "<query>" \
-n 8 -s openalex,semantic [-y <year>]
(Adjust --directory if paper-search-mcp is cloned elsewhere — see README.)
If this command cannot run — sandboxed or read-only environment, uv missing, backend not installed (note uv run writes a venv cache, which a read-only policy blocks) — say so and stop. Never silently substitute hand-rolled API calls: the source choice below is load-bearing, and a quiet fallback discards it without the user ever knowing.
Parameters:
-n 8: 8 hits per source (after dedup usually 8-15 papers, enough to triage)-s openalex,semantic: hard constraint — do not use-s all, do not run crossref alone (rationale in references/sources.md)-y <year>: year filter (Semantic Scholar side). Add proactively when the user says "last 3 years" / "latest" / "since 2022". Format2022or2020-2024
Special case: add arxiv when preprints are wanted (-s openalex,semantic,arxiv).
3. De-noise + dedup + IEEE-only filter
Hard filter: keep only papers whose DOI prefix ∈ {10.1109/, 10.23919/}, drop everything else. Rationale — the only reliable full-text path in this skill is ieee-fetch; a non-IEEE paper survives triage but its PDF is unreachable, wasting the user's time.
Concretely, filter the papers[*] array of the paper-search JSON output:
keep iff paper.doi startswith "10.1109/" or "10.23919/"
Then on the survivors:
- Drop off-domain hits (a DAB search must not include Cuk converters or NLP "converter" papers)
- Dedup by DOI (the same IEEE paper may appear once each in openalex + semantic + arxiv; keep any one)
Tell the user: if too much got filtered (>50% of candidates dropped), proactively say "IEEE coverage of this direction is thin — switch to the generic paper-search skill for Elsevier/Springer?"
4. Rank
Priority order:
- Citation count (>50 anchor, >10 active, <10 judge by year)
- Venue tier (top journal > top conference > regular journal > preprint)
- Year (<3 years for SOTA, >5 years for foundational)
- Authors/affiliation (bonus for anchor groups in the field)
Detailed criteria: references/triage.md
5. Card-style presentation (critical — never use tables)
Card format, one per recommended paper:
### [N] Original paper title (keep English)
🔗 https://doi.org/10.1109/xxx
📅 <year> · 📍 <venue short name, e.g. TPEL / IECON> · 📊 citations <N>
👤 <first author; corresponding author (et al.)>
**Abstract (translated)**: <translate the English abstract into the user's
conversation language, 2-4 sentences, keeping method / key novelty /
experimental results / validation scale>
💡 **Verdict**: <must-read / representative / new-method / background / ...>
(one-sentence reason)
---
Requirements:
- List only the recommended ones (already triaged); dropped papers get a one-line dismissal at the end
- Always translate the abstract into the user's conversation language — never paste the raw English abstract
- Link as
https://doi.org/<doi>(directly clickable)
Full template and examples: references/output-template.md
6. Wait for the user to pick
No proactive bulk download. After the cards, ask "which ones do you want in full text / or change keywords?"
7. Fetch full text
Single path: ieee-fetch <arnumber|url>
Downloads to <skill-root>/downloads/ieee-<arnumber>.pdf by default. The script resolves its own location, so this lands beside the skill wherever it is installed; override with $IEEE_FETCH_DIR. It auto-appends a line (time / filename / size) to INDEX.md in the same directory. To see what has been downloaded, read that INDEX.md — never ls the whole PDF pile into context.
Your machine's IP must be inside your institution's IEEE Xplore-registered range (campus network or VPN). Detailed constraints: references/ieee-fetch.md.
Why not
paper-search download: IEEE does not expose PDFs to paper-search's built-in downloader, even behind an institutional VPN.ieee-fetchis a session-warmed curl written specifically for IEEE, ~6 s per paper.For IEEE preprints also hosted on arxiv (search result shows source
arxiv+ DOI10.1109/...), the arxivpdf_urlis a fallback via plain curl (no VPN needed), but the preferred path is stillieee-fetchfor the IEEE version of record.
8. (Optional) Read the PDF
Open the PDF with whatever capability the host agent has, in this order:
- A native PDF reader, if the agent has one (Claude Code:
Read <path>.pdfrenders pages into context) - An installed
pdfskill - Poppler on the command line —
pdftotext <path>.pdf -for text,pdftoppm -png -r 150 <path>.pdf <prefix>to render pages as images
9. Chain into other skills (recommend proactively)
After the PDFs land, check what is actually installed, then ask whether to chain. The rows below are intents to match against the host's skill list, not skills you may assume exist.
| User intent | Look for |
|---|---|
| Extract tables / figures / annotations / references from PDFs | a PDF-processing skill |
| Turn several papers into a survey | a deep-research / literature-review pipeline |
| Write a paper on top of these references | an academic-writing skill |
Ask format: "Downloaded. Continue with — A. / B. / C. something else?" If nothing relevant is installed, just ask what the user wants next. Never name a skill you have not confirmed, and never act silently.
Common pitfalls
See references/failure-modes.md. The three that bite most:
- Searching IEEE topics with crossref alone → all abstracts empty, triage impossible
- Searching with
-s all→ noise explosion (Hindi NLP, Cuk converter, other false hits) - Running ieee-fetch without the institutional VPN → HTTP 502 "Temporarily Unavailable"
Golden case
A full end-to-end run kept as the reference benchmark: references/golden-case-dab-zvs.md ("DAB converter ZVS modulation" → 17 candidates → 12 IEEE papers).