Atlas / MCP servers / amos689 / paper-preflight

paper-preflightBLOCK

mcp/amos689/paper-preflight

Pre-submission integrity gate for LaTeX papers: every reference verified against real scholarly records. No LLM guessing.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
—
Transport
stdio
License
MIT
Stars
33
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Check every reference of a LaTeX paper against real scholarly records before you submit. No LLM guessing, no false accusations.

[](https://github.com/amos689/paper-preflight/actions/workflows/ci.yml) [](https://pypi.org/project/paper-preflight/) [](LICENSE) [](https://glama.ai/mcp/servers/amos689/paper-preflight)

[](pyproject.toml) [](#quick-start) [](#how-it-works) [](#design-principles) [](docs/mcp.md)

[](https://github.com/amos689/paper-preflight/actions/workflows/ci.yml) [](README.zh-CN.md)

English · 简体中文 · Quick start · User guide · Releases · Feedback

![paper-preflight checking the demo paper: errors for an undefined citation key, a DOI that belongs to another paper, a reference no source knows, a retracted paper and a duplicate entry key; warnings for a published preprint, two entries for the same work, a wrong year and a LaTeX-escaped DOI](https://

Read from source at commit 9e38e33d0b1aOBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code (pypi)
claude mcp add paper-preflight -- uvx paper-preflight==0.8.0 mcp
03

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (6 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (17)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
evals/real_papers.py:94
HEADERS = {"User-Agent": "paper-preflight-eval (https://github.com/amos689/paper-preflight)"}
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
src/paper_preflight/resolve.py:193
dict(os.environ) ... httpx.
Why it matters. reads secrets in the same file that sends data out
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-hooks.yaml
.pre-commit-hooks.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
evals/support_gold.py:94
packet = hashlib.sha1(json.dumps([ident, work_fields]).encode()).hexdigest()[:10]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/paper_preflight/findings.py:71
return "f-" + hashlib.sha1(basis.encode("utf-8")).hexdigest()[:10]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/paper_preflight/support/evidence.py:254
path = self.folder / "pdf" / f"{hashlib.sha1(url.encode()).hexdigest()}.pdf"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/rule_docs.py:134
"[the project's settings](../../README.md#project-settings).",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/rule_docs.py:138
"也可以在[项目设置](../../README.zh-CN.md#项目设置)中对整个项目关闭。",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_mcp_server.py:101
@pytest.mark.parametrize("path", ["..", "../../etc", "/"])
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_web.py:28
assert not public_url("http://192.168.1.10/data.csv")
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_web.py:30
assert public_url("http://8.8.8.8/")
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
tests/fixtures/sources/datacite/dc_arxiv_attn.json:230
"xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5j
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
tests/fixtures/sources/datacite/dc_arxiv_gelu.json:157
"xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5j
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/paper_preflight/bib/docx.py:197
decoded = base64.b64decode("".join(data.split()), validate=False)
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SECURITY.md:16
- API keys and contact emails are read from environment variables only and must never be
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 9e38e33d0b1afull audit observations/trust-audit/mcp-server/amos689__paper-preflight.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-089e38e33d0b1aBLOCKD69first audit
05

Questions

What is the paper-preflight MCP server?

Pre-submission integrity gate for LaTeX papers: every reference verified against real scholarly records. No LLM guessing.

Is paper-preflight safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does paper-preflight need?

No credential environment variables were found in its source, so it appears to need none.

How does paper-preflight run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as paper-preflight.

How current is this page?

The grade is for one exact copy of the source (9e38e33d0b1a), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement