Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Falsification-first citation auditor: existence, metadata, and claim-support checks via MCP.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
CITEGUARD_SOURCES, CITEGUARD_MAILTO필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"citeguard": {
"command": "uvx",
"args": [
"citationguard"
],
"env": {
"CITEGUARD_SOURCES": "your-value",
"CITEGUARD_MAILTO": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add citeguard --env CITEGUARD_SOURCES=your-value --env CITEGUARD_MAILTO=your-value -- uvx citationguard실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"citeguard": {
"command": "uvx",
"args": [
"citationguard"
],
"env": {
"CITEGUARD_SOURCES": "your-value",
"CITEGUARD_MAILTO": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"citeguard": {
"type": "stdio",
"command": "uvx",
"args": [
"citationguard"
],
"env": {
"CITEGUARD_SOURCES": "your-value",
"CITEGUARD_MAILTO": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
CITEGUARD_SOURCES envCITEGUARD_MAILTO env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검
레지스트리 이름이 GitHub 계정 xiaweiyi713 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.1)은 4개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Filesystem MCP
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Filesystem MCP server for AI assistants.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
中文 · English →
CiteGuard 是一个"证伪优先"的引用核验工具:面向 agent 写作工作流,对每条引用核对三件事——这篇论文存不存在、元数据(标题/作者/年份/venue/DOI)对不对、它到底支不支持你写的那句话——直接查询 OpenAlex / Crossref / arXiv / Semantic Scholar 等真实学术库,可作为 MCP 工具被 Claude Code、Codex、Cursor 等主流 agent 直接调用。
LLM 写作助手会幻觉参考文献:编造不存在的论文、拼错真实论文的元数据、引用与论点无关的真论文。CiteGuard 扮演那个"多疑的审稿人":它把每条引用当作 论点 → 引用 → 证据 问题去证伪;拿不准的时候明确说"查不准",而不是猜一个答案。
状态: Alpha(
v0.1.1,已发布至 PyPI 与 MCP 官方 registry)。当前积极开发的产品面是citeguard.*审计包、CLI、MCP server、批量工作流、缓存回放与发布门禁;历史遗留的写作 agent 实验仅保留在源码签出中,不属于发布包。
源码签出场景还可以运行 python3 scripts/demo_verify.py 看实时效果(会真实访问 OpenAlex + arXiv);已安装包场景请优先使用 citeguard / citeguard-mcp 入口。
Verifying 2 citations against OpenAlex + arXiv ...
[OK] VERIFIED (confidence 0.7) Vaswani et al., "Attention Is All You Need", arXiv:1706.03762 sources checked: openalex, arxiv Citation resolves to a real record and the provided metadata matches.
[X] NOT_FOUND (confidence 0.8419) (LLM-fabricated) "Quantum Teleportation of Citation Hallucinations in Synthetic Benchmarks" sources checked: openalex, arxiv Could not be verified in openalex, arxiv.
输出为实时采集,置信度与匹配到的记录会随源数据漂移。
中文文献同样开箱即用(GB/T 7714 解析 + 全球 DOI 注册表兜底,均为真实输出):
$ citeguard extract refs_zh.md # GB/T 7714 中文参考文献
{"title": "迈向第三代人工智能", "authors": ["张钹", "朱军", "苏航"], "venue": "中国科学: 信息科学", "year": 2020, "reference_format": "gbt7714"}
$ citeguard verify --title "迈向第三代人工智能" --doi "10.1360/SSI-2020-0204" verdict: not_found # 开放学术源没有它的元数据…… doi_registration: registered: true # ……但全球 DOI 注册表确认论文真实存在 resolution_url: engine.scichina.com/doi/10.1360/SSI-2020-0204
CiteGuard 对照 OpenAlex、Crossref、arXiv、Semantic Scholar 回答两个问题。
verify_citation / audit_citations 解析引用(标识符优先,否则按标题检索),逐字段比对你提供的元数据:
| 判定 | 含义 |
|---|---|
verified | 论文存在,你提供的元数据全部吻合 |
metadata_mismatch | 论文存在但某字段不符——附修正后的引用建议 |
not_found | 在所查源中无法核实(标记高风险,但不断言伪造) |
ambiguous | 多个候选难以区分——要求提供 DOI / arXiv id 消歧 |
check_claim_support 先解析论文,再用 reranker + NLI 集成判断其摘要与你的论点句的关系:
| 判定 | 含义 |
|---|---|
supported | 摘要蕴含该论点 |
weakly_supported | 有部分/相关证据,但不够强 |
insufficient_evidence | 摘要未涉及该论点——弃权,不等于"不支持" |
contradicted | 摘要与论点相矛盾 |
支撑性结果带机器可读的 evidence_scope 字段,agent 不会把摘要级证据当成全文结论。全文级支撑有两条可选通道:调用方提供合法摘录或本地 text/PDF 文件;或设置 CITEGUARD_OA_FULLTEXT=1,让 CiteGuard 自动拉取源明确标记为开放获取(OA)的论文全文(arXiv 全部适用,PDF 解析需 pip install "citationguard[pdf]")。CiteGuard 不抓取受限源、不绕过付费墙;远程全文仅限 OA 地址且默认关闭。
两条守护原则保证它"诚实":源不可达永远不会升级成"伪造"(只降低置信度,设置 outage_limited=true 并上报 sources_available / sources_failed / source_failure_mode);insufficient_evidence / not_found 一律表述为"无法确认",最终裁决留给人或宿主 agent。此外,标识符是硬裁决:DOI / arXiv id 会先在其权威源(Crossref / arXiv)直查,命中即定音、压过任何同名记录;权威查询失败时结果降级为 ambiguous 并标记 outage_limited,绝不用纯标题匹配冒充高置信结论(输出附 identifier_lookup 字段)。多源查询并发执行,总预算默认 8 秒(CITEGUARD_SOURCE_BUDGET),慢源记为 budget_exceeded 而不拖垮整次核验。
核心验证库运行于 Python ≥ 3.9;Python ≥ 3.10 的基础安装同时携带 MCP SDK,使 registry 的裸包安装可以直接启动 citeguard-mcp。
ℹ️ 包名说明:本项目在 PyPI 的发布名是 [`citationguard`](https://pypi.org/project/citationguard/)——安装用
pip install citationguard,代码里仍然import citeguard,命令行入口也仍是citeguard/citeguard-mcp。PyPI 上的citeguard包是另一个组织的无关项目,请勿混淆。
通过 PyPI 安装:
python -m pip install citationguard # 含 MCP server(Python >= 3.10)
python -m pip install "citationguard[models]" # + 支撑性深度模式的 reranker/NLI 模型栈(较重)
源码签出场景:python -m pip install -e .(extras 同上)。
先检查本地配置,再从命令行核验引用:
citeguard status # 本地就绪状态;加 --check-sources 做实时源探测
citeguard verify \ --title "Attention Is All You Need" \ --author "Ashish Vaswani" \ --year 2017 \ --arxiv-id 1706.03762
citeguard audit examples/citations.json --jobs 4 # 批量:JSON 数组或 .jsonl citeguard audit examples/references.md --high-risk-only # 提取并审计参考文献文件
citeguard support \ --claim "The Transformer relies entirely on attention." \ --title "Attention Is All You Need" \ --arxiv-id 1706.03762
citeguard support-audit examples/claim_citations.json # 批量"论点/引用"对 citeguard support-audit examples/claim_citations.jsonl --high-risk-only citeguard support-set examples/citations.json \ --claim "Citation auditing should verify existence, metadata, and claim support."
citeguard extract examples/references.md # 从文稿中提取引用候选 citeguard counterevidence --claim "The Transformer relies entirely on attention."
提取支持 Markdown/纯文本参考文献、GB/T 7714 中文著录格式([J]/[M]/[C]/[D] 等标记,自动解析出标题/作者/期刊)、LaTeX \bibitem、BibTeX、编译产物 .bbl、LaTeX \bibliography{refs} / \addbibresource{refs.bib} 外链(含 \input{...} / \include{...} 子文件)以及 .docx——全部只用标准库(即 Markdown/LaTeX/BibTeX/BBL/DOCX 引用提取)。提取行保留 source_path / source_locator / 行号范围,审计结果可回指原始参考文献条目。
所有命令输出 JSON,带稳定的 next_action 枚举、风险排序和机器可读错误。完整 CLI 说明(含 cache 检查/导出/清理与离线 fixture 回放)见 docs/cli_reference.md;agent 侧完整字段契约见 docs/agent_output_contract.md。
CiteGuard 已收录进 MCP 官方 registry(io.github.xiaweiyi713/citeguard),支持 registry 浏览的客户端可直接搜索安装。手动安装:
已发布包:
python -m pip install citationguard # MCP server 需要 Python >= 3.10
citeguard-mcp # stdio 传输
源码签出:
python -m pip install -e ".[mcp]"
citeguard-mcp
在任意 MCP 客户端中注册(以 Claude Code 为例):
{
"mcpServers": { "citeguard": { "command": "citeguard-mcp" } } }
| 工具 | 用途 |
|---|---|
citeguard_status_tool | 不做实时查询,检查 MCP/Python 就绪度、缓存、源配置与模型依赖状态 |
verify_citation_tool | 核验单条引用;返回判定、规范记录、逐字段差异、修复建议与所查源 |
audit_citations_tool | 批量核验引用;逐条报告 + 判定计数汇总 |
check_claim_support_tool | 判断某篇论文是否支持某论点句(深度模式) |
check_claim_support_set_tool | 判断一组引用是否共同支持一个论点 |
search_counterevidence_tool | 检索潜在反证线索;仅为复核线索,不构成矛盾判定 |
audit_claim_support_tool | 批量判断"论点/引用"对并汇总支撑判定 |
连接后先调一次 citeguard_status_tool——它在不发起实时查询的前提下报告源健康、缓存与模型就绪状态;详见 docs/mcp_setup.md 与 docs/agent_output_contract.md。
mcp-name: io.github.xiaweiyi713/citeguard
支持 skill 的 agent 客户端可使用 skills/citeguard-verify/SKILL.md,让 CiteGuard 在你写作时主动核验引用(呈现结果而不静默改动你的文本),适用于 Codex、Claude Code、Cursor 等 MCP 客户端。
import os
from citeguard.retrieval.scholarly_clients import build_live_metadata_source from citeguard.verification import parse_citation, verify_citation, check_claim_support
source = build_live_metadata_source(["openalex", "arxiv"], mailto=os.environ["CITEGUARD_MAILTO"])
result = verify_citation(parse_citation(title="Attention Is All You Need", arxiv_id="1706.03762"), source) print(result.verdict.value, result.confidence) # -> verified 0.7
support = check_claim_support("The Transformer relies entirely on attention.", parse_citation(title="Attention Is All You Need", arxiv_id="1706.03762"), source) print(support.verdict.value, support.engine)
| 环境变量 | 默认值 | 用途 |
|---|---|---|
CITEGUARD_SOURCES | openalex,crossref,arxiv | 查询哪些源(另支持 semantic_scholar / s2);未知源名直接报配置错误 |
CITEGUARD_MAILTO | — | OpenAlex/Crossref 礼貌池的真实联系邮箱;未设置则不发送 mailto |
SEMANTIC_SCHOLAR_API_KEY | — | 可选,改善 Semantic Scholar 访问 |
CITEGUARD_CACHE | 系统用户缓存目录 | 本地 SQLite 解析缓存 |
CITEGUARD_FIXTURE_CITATIONS | — | JSON/JSONL 引用 fixture,用于确定性离线运行 |
CITEGUARD_HTTP_TIMEOUT | 10 | 实时学术 API 调用超时(秒) |
CITEGUARD_REMOTE_EVIDENCE | 0 | 设为 1 时额外抓取落地页摘要片段 |
CITEGUARD_OA_FULLTEXT | 0 | 设为 1 时自动拉取开放获取(OA)论文全文用于全文级支撑判定;仅限 OA 地址,绝不绕过付费墙 |
CITEGUARD_RERANKER_MODEL / CITEGUARD_NLI_MODEL | 英文模型 | 支撑性深度模式模型——非英文论点请配置多语模型 |
完整运行时契约(重试/退避、证据超时、缓存路径、远程证据边界)见 docs/configuration.md。
支撑性深度模式首次使用时下载模型权重,可用 citeguard models warmup 预下载。未安装 [models] 时,支撑性检查运行带标注的 heuristic 引擎(永不输出 supported 或 contradicted);citeguard status 会报告 support_models.engine=heuristic_fallback 与 next_action=install_or_configure_dependency。
文本匹配对 CJK 友好(中文字符保留并按字符 bigram 分词,零额外依赖);GB/T 7714 中文参考文献(作者. 标题[J]. 期刊, 年, 卷(期): 页 等)可被自动解析为结构化字段后核验。判定中文论点的支撑性时,请将 CITEGUARD_RERANKER_MODEL / CITEGUARD_NLI_MODEL 指向多语模型。
中文论文的现实边界:中国学者的英文论文(SCI/EI/arXiv)覆盖完整;中文核心期刊多数不在 OpenAlex/Crossref 体系内(其 DOI 注册于中国 DOI/ISTIC),按标题核验通常返回 not_found——这表示"开放源查不到",不构成伪造指控。Crossref 对纯中文标题检索无效,CiteGuard 会自动跳过该查询以省去无效请求。带 DOI 的中文引用有兜底:开放源查不到时,CiteGuard 会查询全球 DOI 注册表(doi.org Handle 系统,覆盖中国 DOI/ISTIC 等所有注册机构),在结果的 doi_registration 字段报告该 DOI 是否真实注册及其官方解析地址——已注册说明"元数据未开放"而非"论文不存在";未注册会进一步降低可信度,但同样不构成伪造证明。可用 CITEGUARD_DOI_REGISTRY=0 关闭。
知网(CNKI)与万方未接入:两者没有开放/免费 API,我们不爬取受限内容。ChinaXiv 可行性调研结论为 NO-GO(其 OAI 端点受访问限制)——见 docs/chinaxiv_spike.md;可插拔的源接口保留,一旦出现开放端点即可添加适配器。
当前能力范围: 存在性 + 元数据核验、摘要级支撑性核验、用户提供的本地全文证据文件、多引用论点检查、多源适配器、SQLite 缓存、Markdown/LaTeX/BibTeX/BBL/DOCX 参考文献提取、MCP server、Claude Code skill、离线 eval。
已知限制
year/venue 上报 metadata_mismatch。请把仅标题匹配下的年份/venue 不符当作"待确认"。insufficient_evidence)常见且符合设计。尚未实现: 对任意或受限来源的自动全文获取、跨论文全文多跳综合、反证判定(counter-evidence verdicting)、大规模人工评审基准。当前仅支持显式开启的开放获取全文和用户授权的本地/摘录证据。见 ROADMAP.md。
python3 -m unittest discover -s tests -v # 完整单测套件;MCP stdio 冒烟在缺 SDK 时自动跳过
python3 scripts/smoke_mcp.py --require-sdk # MCP stdio 冒烟;MCP SDK 需要 Python 3.10+ python3 scripts/eval_verification.py # 离线确定性的存在性/元数据 eval python3 scripts/eval_support.py --report --split test --quality-gate python3 scripts/release_package_gate.py # 开发/契约门禁,不授予发布声明资格 python3 -m pip install -e ".[models]" python3 scripts/automated_release_review.py --output automated-release-review.json python3 scripts/release_package_gate.py --release-claim-mode software --automated-review-report automated-release-review.json --require-build-tools
单测与 eval 全部离线,在 CI 中运行。eval 数据集位于 data/eval/。支撑性 eval 工作流——指标、质量门禁、标注溯源 sidecar、盲评标注包——见 docs/support_eval.md;发布冒烟与发布流程见 docs/release_checklist.md。 生产模型自动评审可放行普通软件版本,但不会、也不能把维护者合成标签升级为人工评审基准;此类声明仍需真实独立标注和裁决。
citeguard/
verification/ # 核心:解析、消解、核验、审计、缓存、支撑性、eval cli.py # 零依赖 citeguard 命令:status/verify/audit runtime.py # 共享的环境、源、缓存与状态配置 mcp/ # FastMCP server,暴露状态 + 核验工具 retrieval/ # 学术源适配器(OpenAlex/Crossref/arXiv/Semantic Scholar)+ 检索器 verifiers/ # 存在性/元数据 + reranker+NLI 支撑性集成 citation/ graph/ au
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요