Purpose
Perform machine verification on a set of reference entries, distinguishing each item among four states: "pass / identifier conflict / not found / temporarily unable to verify", and provide a three-tier disposition conclusion (auto-accept / needs author confirmation / revision recommended), ultimately producing a verification report, revision suggestions, and a structured review conclusion.
Verification principles (must be internalized and reflected item by item in the wording of conclusions):
- Identifier conflict ≠ not found: the DOI resolves but the returned metadata does not match the entry, which often means a mismatched reference—the entry genuinely exists, but the wrong object was cited. This is a more dangerous error than "not found" and must be listed separately as a key item.
- Not found ≠ fabricated: failure to retrieve may stem from database coverage gaps, spelling differences, or the work being too new or too old. It is strictly forbidden to directly conclude "fabricated / forged"; it may only be marked
[待人工核实]and a manual verification path must be provided. - Structured failure: rate limiting and authentication failure mean "verification was not completed this time", not "the entry has a problem"; the two must be presented separately in the report.
- Non-destructive: do not directly modify the user's original file; revision suggestions are written separately and changes are made only after the user confirms.
Pre-checks
- Confirm that the bibverify MCP server is available: the current tool list contains
verify_bib_file/doi_to_bibtex/rank_lookup_sources/explain_update_diff. If unavailable, tell the user to start it withuvx bibverify mcpand register it in the MCP configuration, then retry; when unavailable, do not produce any output that "pretends to verify". - Confirm that the input exists and is readable: a
.bibfile, or a draft containing a "References / References / Bibliography" section (.md/.tex/ plain text). - Confirm that the network is available: verification depends on DOI resolution and literature database queries; in an offline environment, directly state "currently unable to verify online" and terminate; do not cache old conclusions to pass them off as new results.
- Compute the slug: take the verification topic (usually the input filename without its extension) and normalize it— Unicode NFKC normalization, convert to lowercase, trim leading and trailing whitespace, collapse consecutive whitespace into a single space— then take the first 8 characters of the sha1 hexadecimal digest as the artifact directory name.
Procedure
1. Collect entries to be verified
- If the input is a
.bibfile: parse all entries, recording for each the citekey, entrytype, and key fields title / author / year / journal (or booktitle) / doi / url. - If the input is a paper draft: locate the "References / References / Bibliography" section,
and split it entry by entry according to numbered entries (
[1] …) or author-year entries, retaining the original lines as evidence. - If the draft's references section cannot be reliably split (chaotic formatting, a serious mismatch between the number of entries and the number of in-text citations),
record a warn in the report and suggest that the user instead upload a
.bibfile. - If the number of entries is 0, terminate early and report "no verifiable reference entries found".
2. Call verify_bib_file
- Submit the compiled BibTeX entry text to bibverify MCP's
verify_bib_filetool. - When there are many entries (e.g., more than 50), call in batches to avoid a single oversized request triggering rate limiting; pause briefly between batches.
- Save the raw status and evidence fields returned for each entry as the sole source for the report's "Evidence" column; do not fill in evidence from memory.
3. Interpret verification status item by item
| Status | Meaning | Handling stance |
|---|---|---|
verified |
Identifier resolves and metadata is consistent | auto-accept, pass directly |
identifier_conflict |
DOI resolves, but metadata does not match the entry (authors / year / title / journal do not correspond) | List prominently: suspected mismatch, enter "Suggested revision" or "Needs author confirmation" |
no_match |
The entry cannot be found in any source | Mark [待人工核实], strictly forbidden to judge as fabricated; provide a manual verification path |
rate_limited |
Data source rate limiting triggered, verification not completed this time | Retry later; must not be treated as a failure or problem conclusion |
auth_error |
Data source authentication failed (e.g., missing API key) | Prompt to check bibverify configuration; likewise not an entry problem |
For identifier_conflict entries, list conflicts field by field (value claimed by the entry vs value resolved from the identifier),
for example "the entry authors are Zhang et al., but the authors resolved from DOI 10.xxxx are Li et al.",
so the user can see at a glance where the mismatch is.
4. Three-tier handling
- auto-accept:
verifiedentries, no action needed. - Needs author confirmation: minor discrepancies or situations the machine cannot decide—for example, a 1-year difference may simply be the difference between online-first publication and the formal volume/issue, or differences in author abbreviation format. List the discrepancy points and ask the author to judge, without making the decision on their behalf.
- Suggested revision:
identifier_conflictfor cases where the discrepancy is significant and it can basically be determined that the entry is wrong. Usedoi_to_bibtexto fetch the correct BibTeX entry corresponding to that DOI, then useexplain_update_diffto generate a field-level difference description of "old entry → new entry", and write it into the revision suggestion. - Manual verification(
no_match): in the suggestion, provide three manual paths— search Google Scholar by title; search CNKI / Wanfang by title + author (Chinese literature); locate by volume, issue, and page number on the journal's official website. You can userank_lookup_sourcesto rank and recommend query sources for that entry, minimizing the cost of manual verification. - Retry(
rate_limited/auth_error): wait and rerun this skill; if the retry still fails, truthfully mark in the report "could not be verified this time", and do not enter any handling level.
5. Output artifacts
Directory:output/citation-verify/<slug>/latest/(each complete re-verification overwrites latest;
old rounds from multiple iterations are archived by evidence-loop to the <round>/ directory):
report.md: verification report (template see below), with ```review block appended at the end.revision-suggestions.md: revision suggestions, generated only when there are "Suggested revision / Needs author confirmation / Pending manual verification" entries; includes the correct BibTeX entry and field-level diff.review.json: structured conclusion identical to the ```review block content at the end of the report, for programmatic consumption.
6. Non-destructive writing
- Under no circumstances directly rewrite the user's original
.bib/ draft files. - Only after the user explicitly confirms the revision suggestions, write the confirmed entries back to the original file, and append an "applied" record (time, entry, old and new values) to the report.
Output template
Verification report table (main body of report.md)
| # | Entry (citekey) | Verdict | Evidence | Suggestion |
|---|---|---|---|---|
| 1 | zhang2023deep | verified | DOI 10.1000/xyz resolved metadata matches the entry | auto-accept |
| 2 | li2022survey | identifier_conflict | Entry year 2022, DOI resolves to 2021; journal name does not match | Suggest revision (see revision-suggestions.md #2) |
| 3 | wang2020method | no_match | Neither OpenAlex nor Crossref returned a match | [pending manual verification] Google Scholar / CNKI / journal website |
review block (output both at the end of the report and in the final reply)
[
{"level": "ok", "check": "citation", "title": "zhang2023deep 核验通过",
"evidence": "DOI 10.1000/xyz 解析元数据与条目一致", "note": "auto-accept"},
{"level": "error", "check": "citation", "title": "li2022survey 标识符冲突",
"evidence": "条目年份 2022 / DOI 解析 2021,期刊名称不符",
"note": "建议修订,正确条目见 revision-suggestions.md"},
{"level": "warn", "check": "citation", "title": "wang2020method 未检索到",
"evidence": "OpenAlex、Crossref 均无匹配",
"note": "[待人工核实],非伪造结论"}
]
level conventions:identifier_conflict is error;no_match, and if it still
rate_limited / auth_error after retry is warn;verified is ok.
What this skill does not do
- Does not judge
no_matchas fabricated, invented, or academic misconduct—only marks[待人工核实]。 - Does not directly modify the user's
.bibfiles or paper drafts; revision suggestions are written separately and applied only after confirmation. - Does not evaluate the academic value, relevance, or importance of the references (that is for the review and writing stage).
- Does not check whether claims in the body text are supported by citations (leave that to claim-check).
- Does not actively search for new references to complete the evidence chain (leave that to evidence-loop / literature-search).
- Does not draw any conclusion about the entry itself when
rate_limited/auth_error.
Wrap-up and next steps
- Summary statistics: give a summary of no more than 5 lines at the start of the reply with the total count and how many entries are verified / identifier_conflict / no_match / rate_limited / auth_error, and attach the ```review block.
- Point to the artifact path
output/citation-verify/<slug>/latest/。 - Suggested next steps:
- If there are "requires author confirmation / suggested revision" entries → ask the user to confirm before applying revisions, then verify once more;
- If there are
[待人工核实]entries → after manual verification by the user, they can be changed and uploaded as.bibfor re-verification; - If body-text claims also need to be checked → run claim-check or evidence-loop.