关于 Scientific Fraud Detection
Scientific Fraud Detection 是面向科研诚信人员、荟萃分析研究者和 AI 助手的 MCP 服务,可筛查主题、作者和论文中的统计及引文异常。它结合法证分析与学术来源实时检索,并返回结构化 JSON。
主要功能
- 01提供八种科研法证工具
- 02GRIM 和 SPRITE 统计检验
- 03P 曲线与 Z 曲线分析
- 04校正发表偏倚的荟萃分析
- 05引文异常与污染追踪
- 06筛查 HARKing 和数据操纵
适用场景
- 01筛查论文或作者的诚信风险
- 02估算某领域的复现模式
- 03校正荟萃分析中的发表偏倚
- 04追踪撤稿研究的后续引文
MCP 相关
向 MCP 客户端提供八种法证工具,接受研究主题、作者或论文标题作为查询。它从学术来源收集信息,并以结构化 JSON 返回分析结果。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcpclaude mcp add --transport http scientific-fraud-detection https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcp{"mcpServers":{"scientific-fraud-detection":{"type":"http","url":"https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcp"}}}在 Cursor 中打开{"servers":{"scientific-fraud-detection":{"type":"http","url":"https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcp"}}}在 VS Code 中打开{"mcpServers":{"scientific-fraud-detection":{"type":"http","url":"https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcp"}}}{"mcpServers":{"scientific-fraud-detection":{"serverUrl":"https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Scientific Fraud Detection MCP
快速入门
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf):
{
"mcpServers": {
"scientific-fraud-detection-mcp": {
"url": "https://ryanclinton--scientific-fraud-detection-mcp.apify.actor/mcp"
}
}
}
将科学欺诈检测作为实时 MCP 服务提供——使用 8 种取证工具和 16 个实时学术来源,筛查任何研究主题、作者或论文是否存在统计数据造假、p-hacking、发表偏倚、引用操纵、数据重复、因果污染和 HARKing。适用于研究诚信负责人、荟萃分析师、AI 编码助手,以及任何无需编写一行代码即可审查科学文献的人。
每次工具调用都会协调对 OpenAlex、PubMed、Semantic Scholar、arXiv、Crossref、CORE、Europe PMC、ORCID、DBLP、NIH Grants、ClinicalTrials.gov、Wayback Machine、GitHub、USPTO Patents 和 Hacker News 的并行查询,然后应用 11 种取证算法,包括 GRIM/SPRITE 统计审计、Vevea-Hedges 选择模型、TERGM 引用异常检测、Benford DCT 取证、do-calculus 污染追踪和贝叶斯惊讶度 HARKing 检测。所有结构化输出均以 JSON 格式返回,可直接传入下游分析流水线。
可以提取哪些数据?
| 数据点 | 来源 | 示例 |
|---|---|---|
| 📄 学术论文、引用次数、概念 | OpenAlex + Crossref + CORE | "司美格鲁肽对 HbA1c 的影响:N=312,引用 847 次" |
| 🧬 含 MeSH 术语的生物医学文献 | PubMed + Europe PMC | PMID 38291045,mesh: ["Diabetes Mellitus, Type 2"] |
| 🔬 带有语义图谱的研究论文 | Semantic Scholar | paperId: "abc123", influentialCitationCount: 44 |
| 📐 被 GRIM/SPRITE 标记的报告统计数据 | 所有论文来源 | mean=3.47, N=20, GRIM_fail=true, deviation=0.03 |
| 📊 P 值分布和 z 分数 | 从论文语料中提取 | rightSkewP=0.003, EDR=0.62, ERR=0.54 |
| ⚖️ 经选择偏倚校正的合并效应量 | 荟萃分析综合 | pooledEffect=0.42, adjustedEffect=0.28, I²=67% |
| 🔗 引用环和自引异常 | 引用图分析 | citationGini=0.71, anomalyType="citation_ring" |
| 🖼️ Benford DCT 和 MinHash 取证标记 | 取证筛查 | dctAnomaly=0.24, benfordDeviation=0.18, confidence=0.87 |
| 🗺️ 来自撤稿论文的因果污染路径 | BFS + do-calculus | pathway: ["retraction-A","citing-B","citing-C"], strength=0.73 |
| 🤔 通过贝叶斯惊讶度计算 HARKing 概率 | KL 散度评分 | klDivergence=2.14, harkingProbability=0.81 |
| 🎯 检测器校准指标 | Brier 分数分解 | brierScore=0.09, calibrationSlope=0.94, converged=true |
| 🧪 预印本和早期阶段研究 | arXiv | arXiv:2401.12345, submittedDate: "2024-01-22" |
为什么使用 Scientific Fraud Detection MCP?
手动审查研究文献中是否存在可疑做法需要数天时间。元分析人员要检查 200 篇论文中的 p 值分布、追踪引文链中的撤稿污染,并手动审查统计一致性,这会是一个耗时数周的项目,而且容易出现遗漏和认知疲劳。
此 MCP 服务可自动完成整个流程。只需调用一次工具、提供一个查询字符串,几分钟内即可获得 GRIM 一致性标记、p 曲线形状分析、经选择偏差调整的效应量、TERGM 引文异常评分、取证操纵标记、因果污染图、HARKing 信号以及经过校准的置信度指标——所有结果均来自对最多 16 个学术来源的实时跨数据库综合分析,这些来源会并行查询。
- 定时任务 — 对重要期刊或作者每周运行完整性监测;Apify 负责处理 cron 定时任务
- API 访问 — 无需图形界面,即可通过 Python、JavaScript 或任何 HTTP 客户端触发 8 个工具中的任意一个
- 监控 — 当工具调用失败或返回异常结果时,接收 Slack 或电子邮件提醒
- 集成 — 通过 Apify 的原生连接器,将结果连接到 Zapier、Make、Google Sheets 或 HubSpot
- MCP 协议 — 可与 Claude、Cursor、Windsurf 及任何兼容 MCP 的 AI 助手原生协作
功能
- GRIM 检验(均值粒度相关不一致性) — 检查报告的均值在给定整数原始数据和样本量的情况下是否在数学上成立;当均值 × N 不是整数时标记不可能的值
- SPRITE(通过迭代技术重建样本参数) — 使用约束整数规划,重建符合报告均值、标准差、最小值、最大值和 N 的可行整数分布;标记不可能的参数组合
- 本福特定律首位数字分析 — 对报告的数值进行卡方拟合优度检验,与本福特分布比较;检测可能表明数据伪造的数字频率异常
- P 曲线右偏检验 — 对显著性条件下的 p 值,采用 Simonsohn-Nelson-Simmons(2014)的 Stouffer 方法;右偏 = 有证据价值,平坦 = p 值操纵
- Z 曲线 EM 算法 — 使用期望最大化算法,以 3 个成分和 20 次迭代拟合截断正态分布的有限混合模型;返回预期发现率(EDR)和预期复现率(ERR)
- Kolmogorov-Smirnov 平坦度检验 — 检验 P 曲线形状是否与均匀分布(p 值操纵)一致,并与右偏备择假设比较
- Vevea-Hedges 权重函数选择模型 — 在 p = 0.025、0.05、0.10 阈值处使用阶梯函数 w(p),结合 DerSimonian-Laird 随机效应、tau 平方异质性和 I 平方;返回未调整和经选择调整的汇总效应量
- TERGM(时间指数随机图模型) — 对引用网络演变建模 P(G_t | G_{t-1}) ~ exp(θ × s(G_t, G_{t-1}));通过互引检测识别引用圈,通过作者论文图遍历检测过量自引,并通过聚类系数阈值检测强迫引用
- 引用基尼系数 — 衡量论文语料库中引用分布的不平等程度;较高的基尼系数(>0.70)表示引用集中,符合引用集团行为特征
- 本福特定律 DCT 取证分析 — 对 DCT 频率系数进行首位数字分析;自然图像符合本福特定律,经过操纵的图像则会偏离;检测图像重复和数据伪造信号
- MinHash LSH(局部敏感哈希) — 通过 k-shingle Jaccard 相似度估算,检测语料库中近似重复的论文以及出版物之间的文本重复使用
- do-演算 d-分离 — 在引文 DAG 上使用 BFS 寻找路径,并检查混杂因素是否导致存在未阻断的后门路径;追踪被标记或撤稿论文对下游引文的因果污染
- 狄利克雷过程 CRP 聚类 — 使用浓度参数 alpha 进行中国餐馆过程污染源聚类;将相关污染链分组
- 贝叶斯惊异度 HARKing 检测 — 使用正态-正态共轭更新计算 D_KL(posterior ‖ prior);高 KL 散度与低假设一致性表明事后捏造假设
- Brier 分数分解 — 将校准度分解为可靠性、分辨率和不确定性三个部分;用于结合 Platt scaling(逻辑回归)的自校准不动点循环
- 16 个 Actor 并行编排 — 所有 16 个数据源 Actor 通过
Promise.all分组并行运行;每组同时启动 3-5 个 Actor,与顺序获取相比可缩短总墙钟时间
科学欺诈检测的使用场景
研究诚信评估
大学、资助机构和期刊的诚信事务负责人需要在论文发表前或发表后进行筛查。这个 MCP 可在单次会话中提供完整的取证报告,包括统计一致性、p 值分布形状、经选择调整的效应量以及引文网络异常。人工完成同等工作,对每个论文集群需要一位受过训练的统计学家花费两到三天。
复制危机元分析
研究心理学、医学或经济学可重复性的研究人员,可以将整个子领域的数据输入 analyze_p_curve_z_curve,以估算预期重复率并检测系统性 p 值操纵。z 曲线 EM 算法会返回完整的混合模型——包括各成分的均值和权重——让分析人员能够以编程方式区分高可信度与低可信度文献。
为 AI 助手的研究提供依据
AI 编码助手、Claude 和其他大模型应用会使用 MCP 工具检索并处理真实世界的数据。将此服务连接到 AI 助手后,它就能实时验证科学主张——当用户询问“这项治疗的证据是否可靠?”时,助手会先运行完整的 p 曲线和选择模型分析,再给出回答。
支持系统综述和元分析
开展 Cochrane 风格综述的元分析人员可以使用 fit_selection_model_meta_analysis 估算经出版偏倚校正的合并效应,使用 detect_citation_network_anomalies 标记可能夸大某个领域文献影响力的引文集团,并使用 trace_causal_contamination 找出综述文献中哪些论文的研究结论源自已撤稿或存在问题的来源。
调查引文操纵
期刊编辑和撤稿监测调查人员可以查询作者姓名或期刊,借助 TERGM 系数和聚类分析检测引文圈、自引率超过 30% 的情况,以及协同强制引用模式。基尼系数提供了单一的不平等指标,可用于比较不同期刊。
科学政策的竞争情报
政策分析人员和科学资助方可以将主题查询输入 self_calibrate_detection,通过 Brier 分数对不同研究领域进行基准评估。校准效果不佳(Brier 分数高、EDR 低)的领域,在分配资金或制定政策决策前值得进一步审查。
如何连接此 MCP 服务
连接过程不到两分钟。无需 API 密钥,也无需配置环境——只需将服务 URL 添加到 MCP 客户端配置中。
- 复制 MCP 端点 URL——
https://scientific-fraud-detection-mcp.apify.actor/mcp - 打开 MCP 客户端配置——Claude Desktop(
claude_desktop_config.json)、Cursor MCP 设置或 Windsurf - 粘贴服务配置块——使用下方适用于客户端的 JSON 片段
- 开始会话——请 AI 助手运行 8 个工具中的任意一个;结果会以结构化 JSON 流式返回
Claude Desktop
将以下内容添加到 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"scientific-fraud-detection": {
"url": "https://scientific-fraud-detection-mcp.apify.actor/mcp"
}
}
}
Cursor
将以下内容添加到 Cursor MCP 设置面板或 .cursor/mcp.json:
{
"mcpServers": {
"scientific-fraud-detection": {
"url": "https://scientific-fraud-detection-mcp.apify.actor/mcp"
}
}
}
Windsurf
将以下内容添加到 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"scientific-fraud-detection": {
"url": "https://scientific-fraud-detection-mcp.apify.actor/mcp"
}
}
}
MCP 工具参考
此服务提供 8 个工具。所有工具都接受单个 query 字符串参数(研究主题、作者姓名或论文标题)。每次调用都会并行查询最多 16 个演员,然后运行分析。
| 工具 | 价格 | 算法 | 适用场景 |
|---|---|---|---|
audit_statistical_consistency | $0.040 | GRIM + SPRITE + Benford 卡方检验 | 检测不可能的报告统计数据 |
analyze_p_curve_z_curve | $0.035 | Simonsohn p 曲线 + z 曲线 EM(截断正态分布) | 检测 P-hacking 并估算可复现性 |
fit_selection_model_meta_analysis | $0.045 | Vevea-Hedges w(p) + DerSimonian-Laird | 校正发表偏倚的荟萃分析 |
detect_citation_network_anomalies | $0.040 | TERGM + Gini 系数 + 聚类 | 引文圈和过度自引 |
screen_image_data_forensics | $0.045 | Benford DCT + MinHash LSH | 图像篡改和文本重复 |
trace_causal_contamination | $0.040 | BFS + do-calculus d-分离 + Dirichlet CRP | 撤稿污染传播 |
detect_harking_bayesian_surprise | $0.035 | D_KL(posterior ‖ prior) + Brier 校准 | 事后假设检测 |
self_calibrate_detection | $0.040 | Platt scaling 定点 + Brier 分解 | 流水线可靠性和元评估 |
工具:audit_statistical_consistency
审查报告中的均值和标准差在数学上是否可行。针对汇总网络中的每篇论文:
- GRIM 检验:验证 mean × N 是否为整数(整数值 Likert 量表数据必须满足此条件)
- SPRITE 检验:验证平方和分解式 (n-1)·SD² + n·mean² 是否与整数原始数据兼容
- Benford 分析:计算首位数字分布相对于 Benford 预期频率 log10(1 + 1/d) 的卡方统计量
- 按偏差幅度排序返回标记,并提供整个语料库的全局卡方统计量
工具:analyze_p_curve_z_curve
分析显著结果中 p 值分布的形状:
- P 曲线:对条件 p 值(p/0.05)应用 Stouffer 方法;右偏且 p 值低于 0.05 表明存在证据价值
- KS 平坦度检验:检验条件分布是否均匀;平坦曲线(p < 0.05)表明存在 p-hacking
- Z 曲线 EM:在 20 次 EM 迭代中拟合 K=3 分量截断正态混合模型;返回预期发现率和预期复现率
- 返回分量均值、混合权重和 KS 拟合统计量
工具:fit_selection_model_meta_analysis
拟合 Vevea-Hedges 权重函数选择模型:
- 阶梯权重:w(p) = 1.0(p ≤ 0.05)、0.3(0.05 < p ≤ 0.10)、0.1(p > 0.10)
- DerSimonian-Laird:使用 Q 统计量、研究间方差 tau-squared 和 I-squared 异质性进行随机效应合并
- 校正效应:使用按发表概率加权的逆方差计算经选择偏倚校正的合并估计值
- 返回未校正的合并效应、选择校正后的效应,以及 selectionSeverity(标准化差异)
工具:detect_citation_network_anomalies
将引文网络建模为时间 ERGM:
- 引文圈:使用 TERGM 系数评分检测相互引用的论文对(A 引用 B 且 B 引用 A)
- 自引过量:标记自引率超过总引用数 30% 的作者
- 聚类异常:计算局部聚类系数;在包含 3 篇或更多论文的邻域中,系数高于 0.5 表明存在协调引用
- Gini 系数:使用标准的秩加权公式衡量引文不平等程度;极端集中时趋近于 1
工具:screen_image_data_forensics
扫描论文语料库中的取证操纵信号:
- Benford DCT:比较模拟 DCT 系数首位数字的频率与本福特定律;偏差超过阈值时标记为可能存在操纵
- MinHash LSH:使用简单哈希函数估算论文标题之间的 Jaccard 相似度;相似度高于 0.70(Jaccard 估算值 < 0.30)的论文对会被标记为近似重复
- 返回每篇论文的置信度分数、语料库平均置信度,以及 minHashSimilarityThreshold
工具:trace_causal_contamination
追踪有问题的研究如何在文献中传播:
- BFS 路径查找:识别从已标记来源到下游论文的所有引用路径
- Do-calculus 可识别性:检查每条污染路径的 d-分离;存在未阻断后门混杂因素的路径会被标记为不可识别
- Dirichlet CRP 聚类:使用默认浓度参数 alpha,通过中国餐馆过程根据来源相似性对污染路径分组
- 返回每条路径的污染强度、可识别路径总数,以及 Dirichlet 浓度估计值
工具:detect_harking_bayesian_surprise
将贝叶斯惊奇度作为 HARKing 信号进行计算:
- 正态-正态共轭更新:先验 N(μ₀=0, σ₀²=1),根据论文统计数据构建似然,并通过标准贝叶斯更新得到后验
- KL 散度:D_KL(posterior ‖ prior) 衡量结果使先验发生偏移的程度;值高表示结果出乎意料
- 假设一致性:衡量所述假设方向与观测结果之间的一致程度;高惊奇度 + 低一致性 = HARKing 信号
- 返回每篇论文的 harkingProbability、疑似 HARKing 数量,以及语料库 Brier 分数
工具:self_calibrate_detection
对全部 7 个检测器运行自校准:
- Platt scaling:每个检测器的原始分数通过逻辑函数 (1 / (1 + exp(-ax+b))) 进行校准,拟合数据来自其他检测器
- 不动点迭代:校准循环持续进行,直至收敛(或达到最大迭代次数)
- Brier 分解:将总分分解为可靠性(校准误差)、分辨率(方差)和不确定性分量
- 返回每个检测器的真阳性率、假阳性率、校准斜率,以及 Godel 自指深度(收敛时的递归层级)
输入参数
所有工具都接受一个参数:
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
query | 字符串 | 是 | — | 要调查的研究主题、作者姓名或论文标题。用作对全部 16 个数据源进行搜索的查询。 |
输入示例
调查特定研究领域是否存在欺诈信号:
{
"query": "social priming psychology replication"
}
审计特定作者的统计输出:
{
"query": "Diederik Stapel social psychology Netherlands"
}
检查一篇特定的高知名度论文:
{
"query": "Power poses Amy Cuddy cortisol testosterone effect"
}
输入提示
- 有针对性地审计时请具体说明 — 作者姓名加上所在机构可缩小论文语料库范围,并减少 GRIM/SPRITE 标记中的噪声
- 进行领域层面分析时使用主题查询 — 诸如“nudge behavioral economics”这样的宽泛查询会获取更多论文,因此能得到更好的 p-curve 和 z-curve 结果
- 按顺序组合使用工具 — 先运行
analyze_p_curve_z_curve评估领域层面的可信度,再运行fit_selection_model_meta_analysis获取经过偏差校正的效应估计值,最后运行detect_citation_network_anomalies检查是否存在引用卡特尔放大效应 - 追踪污染时,请指定你想要追踪其下游影响的撤稿论文或作者
输出示例
audit_statistical_consistency 对“ego depletion willpower psychology”的响应:
{
"flags": [
{
"paper": "Glucose and self-regulation: A meta-analytic review",
"test": "GRIM_fail",
"reportedValue": 3.47,
"reconstructedValue": 3.45,
"spriteConsistent": false,
"deviation": 0.02,
"benfordDeviation": 0.091
},
{
"paper": "Self-control depletion and performance on a Stroop task (N=24)",
"test": "GRIM_pass",
"reportedValue": 4.125,
"reconstructedValue": 4.125,
"spriteConsistent": true,
"deviation": 0.0,
"benfordDeviation": 0.014
},
{
"paper": "Radish paradigm replication study: ego depletion revisited",
"test": "GRIM_fail",
"reportedValue": 5.8,
"reconstructedValue": 5.75,
"spriteConsistent": false,
"deviation": 0.05,
"benfordDeviation": 0.122
}
],
"totalAudited": 87,
"inconsistentCount": 19,
"spriteViolations": 14,
"benfordChiSquared": 23.41,
"benfordPValue": 0.003
}
analyze_p_curve_z_curve 的响应:
{
"pValues": [0.008, 0.012, 0.021, 0.034, 0.041, 0.044, 0.048],
"zScores": [2.65, 2.51, 2.31, 2.12, 2.05, 2.02, 1.98],
"rightSkewTest": 0.041,
"flatnessTest": 0.218,
"evidentialValue": true,
"pHackingSuspected": false,
"expectedDiscoveryRate": 0.58,
"expectedReplicationRate": 0.49,
"zCurveMixtureMeans": [2.48, 3.51, 5.02],
"zCurveMixtureWeights": [0.41, 0.34, 0.25],
"zCurveFitness": 0.871
}
detect_citation_network_anomalies 的响应:
{
"anomalies": [
{
"entity": "Ego depletion: Is the active self a lim ↔ Thinking about you: So",
"anomalyType": "citation_ring",
"severity": 0.82,
"tergmCoefficient": 0.74,
"clusteringCoefficient": 0
},
{
"entity": "Roy F. Baumeister",
"anomalyType": "self_citation_excess",
"severity": 0.67,
"tergmCoefficient": 0.44,
"clusteringCoefficient": 0.44
}
],
"totalAnomalies": 7,
"networkDensity": 0.0341,
"tergmGofPValue": 0.097,
"citationGini": 0.683
}
输出字段
audit_statistical_consistency
| Field | Type | Description |
|---|---|---|
flags[] | array | 按偏差幅度排序的逐篇论文统计标记 |
flags[].paper | string | 论文标题(截断至 60 个字符) |
flags[].test | string | GRIM 结果:"GRIM_pass" 或 "GRIM_fail" |
flags[].reportedValue | number | 论文报告的均值 |
flags[].reconstructedValue | number | 通过 GRIM 重构的最近有效均值 |
flags[].spriteConsistent | boolean | 均值与标准差的组合是否符合 SPRITE 可行性 |
flags[].deviation | number | 报告均值与重构均值之间的绝对差 |
flags[].benfordDeviation | number | 首位数字与 Benford 预期频率的偏差 |
totalAudited | number | 分析语料库中的论文总数 |
inconsistentCount | number | spriteConsistent=false 的论文数 |
spriteViolations | number | 未通过 GRIM 检验的论文数 |
benfordChiSquared | number | 所有报告值的全局 Benford 卡方统计量 |
benfordPValue | number | Benford 卡方检验的 P 值 |
analyze_p_curve_z_curve
| Field | Type | Description |
|---|---|---|
pValues[] | array | 从语料库中提取的显著 p 值 |
zScores[] | array | 对应的双尾 z 分数 |
rightSkewTest | number | 右偏检验的 P 值(Stouffer 方法);< 0.05 = 有证据价值 |
flatnessTest | number | 平坦度检验的 KS P 值;< 0.05 = 疑似 p-hacking |
evidentialValue | boolean | 若右偏显著且分布不平坦,则为 True |
pHackingSuspected | boolean | 若平坦度检验显著,则为 True |
expectedDiscoveryRate | number | Z-curve EDR:存在真实效应的研究比例 |
expectedReplicationRate | number | Z-curve ERR:成功复现的预期概率 |
zCurveMixtureMeans | array | 通过 EM 拟合的成分均值(3 个成分) |
zCurveMixtureWeights | array | 通过 EM 拟合的混合权重(3 个成分) |
zCurveFitness | number | 1 - KS 统计量;数值越高,拟合越好 |
fit_selection_model_meta_analysis
| Field | Type | Description |
|---|---|---|
studies[] | array | 逐项研究数据,包含效应量和选择权重 |
studies[].study | string | 研究标识符(论文标题,已截断) |
studies[].effectSize | number | Cohen's d 效应量估计值 |
studies[].standardError | number | 效应量的标准误 |
studies[].weight | number | 逆方差权重 |
studies[].selectionProbability | number | Vevea-Hedges 发表概率:1.0、0.3 或 0.1 |
pooledEffect | number | 未调整的 DerSimonian-Laird 合并效应量(Cohen's d) |
pooledSE | number | 合并效应量的标准误 |
adjustedEffect | number | 经 Vevea-Hedges 选择调整后的合并效应量 |
tauSquared | number | 研究间方差(DerSimonian-Laird 估计量) |
iSquared | number | 异质性百分比:(Q - df) / Q |
selectionSeverity | number | 标准化偏差:|pooled - adjusted| / pooledSE |
detect_citation_network_anomalies
| Field | Type | Description |
|---|---|---|
anomalies[] | array | 按严重程度排序的已检测引文异常 |
anomalies[].entity | string | 论文对(引文环)或作者姓名(自引) |
anomalies[].anomalyType | string | "citation_ring"、"self_citation_excess" 或 "coerced_citation" |
anomalies[].severity | number | 0–1 的严重程度评分 |
anomalies[].tergmCoefficient | number | TERGM 互惠性/传递性系数 |
anomalies[].clusteringCoefficient | number | 该实体的局部聚类系数 |
totalAnomalies | number | 检测到的异常总数 |
networkDensity | number | 引文图中的观测边数/可能边数 |
tergmGofPValue | number | TERGM 拟合优度 p 值 |
citationGini | number | 引文分布的基尼系数(0 = 均等,1 = 集中) |
screen_image_data_forensics
| Field | Type | Description |
|---|---|---|
flags[] | array | 每篇论文的取证标记 |
flags[].paper | string | 论文标题 |
flags[].flagType | string | "duplicate_region"、"benford_violation" 或 "noise_pattern" |
flags[].confidence | number | 0–0.99 的取证置信度评分 |
flags[].dctAnomaly | number | DCT 频域异常的幅度 |
flags[].benfordDeviation | number | 首位数字分布偏离本福特定律的程度 |
totalScreened | number | 已筛查的论文总数 |
flaggedCount | number | 达到取证标记阈值的论文数 |
averageConfidence | number | 所有已标记论文的平均置信度 |
minHashSimilarityThreshold | number | 用于重复检测的 Jaccard 阈值 |
trace_causal_contamination
| Field | Type | Description |
|---|---|---|
paths[] | array | 因果污染路径 |
paths[].source | string | 起源论文或撤稿作品 |
paths[].target | string | 受下游影响的论文 |
paths[].pathway | array | 污染链中按顺序排列的节点 ID 列表 |
paths[].contaminationStrength | number | 因果关联强度,范围为 0–1 |
paths[].doCalculusIdentifiable | boolean | 若未发现未阻断的后门混杂因素,则为 True |
totalPaths | number | 检测到的污染路径总数 |
maxContamination | number | 网络中的最高污染强度 |
identifiableCount | number | 因果可识别的路径数 |
dirichletConcentration | number | 估算的 Dirichlet 浓度参数 alpha |
detect_harking_bayesian_surprise
| Field | Type | Description |
|---|---|---|
signals[] | array | 每篇论文的 HARKing 信号 |
signals[].paper | string | 论文标题 |
signals[].klDivergence | number | D_KL(posterior ‖ prior);数值 > 1.5 时应予以审查 |
signals[].posteriorShift | number | 后验均值相对于先验的偏移幅度 |
signals[].hypothesisConsistency | number | 假设与结果之间的吻合度,范围为 0–1 |
signals[].harkingProbability | number | 估算的 HARKing 概率,范围为 0–1 |
totalScreened | number | 已筛查的论文总数 |
suspectedHarking | number | harkingProbability > 0.70 的论文数 |
averageSurprise | number | 整个语料库的平均 KL 散度 |
brierScore | number | 用于校准的语料库级 Brier 分数 |
self_calibrate_detection
| Field | Type | Description |
|---|---|---|
metrics[] | array | 每个检测器的校准指标 |
metrics[].detector | string | 检测器名称 |
metrics[].truePositiveRate | number | 默认阈值下的 TPR |
metrics[].falsePositiveRate | number | 默认阈值下的 FPR |
metrics[].brierScore | number | 此检测器的 Brier 分数 |
metrics[].calibrationSlope | number | Platt 缩放斜率;1.0 表示完全校准 |
metrics[].fixedPointConverged | boolean | Platt 缩放循环是否收敛 |
overallBrier | number | 所有 7 个检测器的加权 Brier 分数 |
calibrationError | number | Brier 分解中的可靠性分量 |
fixedPointIterations | number | 收敛所需的迭代次数 |
godelSelfReferenceDepth | number | 自校准稳定时的递归深度 |
科学欺诈检测的运行成本是多少?
此 MCP 服务采用按事件付费定价——每次工具调用支付固定费用。费用包含 Apify 平台计算成本。
| 场景 | 工具 | 每次调用费用 | 10 次调用 | 50 次调用 |
|---|---|---|---|---|
| P-hacking 筛查 | analyze_p_curve_z_curve | $0.035 | $0.35 | $1.75 |
| 统计审计 | audit_statistical_consistency | $0.040 | $0.40 | $2.00 |
| HARKing 检测 | detect_harking_bayesian_surprise | $0.035 | $0.35 | $1.75 |
| 引用网络 | detect_citation_network_anomalies | $0.040 | $0.40 | $2.00 |
| 发表偏倚 | fit_selection_model_meta_analysis | $0.045 | $0.45 | $2.25 |
| 图像取证 | screen_image_data_forensics | $0.045 | $0.45 | $2.25 |
| 污染溯源 | trace_causal_contamination | $0.040 | $0.40 | $2.00 |
| 自校准 | self_calibrate_detection | $0.040 | $0.40 | $2.00 |
对单个研究主题使用全部 8 个工具进行一次完整审计,费用约为 $0.32。使用全部 8 个工具审计 100 个研究主题,费用约为 $32。
Apify 的免费套餐包含每月 $5 的平台额度——在需要付费前,足以进行 125 次以上的单独工具调用。你可以为每次运行设置最高支出限额来控制成本;达到预算后,服务会停止计费。
相比 iThenticate(每月 $100+)等商业研究诚信工具或统计学家手动分析的时间成本(每小时 $150-300),此服务提供了目前没有任何即用型工具能够提供的统计取证层。
直接使用 API
无需 MCP 客户端,即可通过 Apify API 以编程方式触发任何工具调用。
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/scientific-fraud-detection-mcp").call(run_input={})
# The server runs in Standby mode; use the MCP endpoint for tool calls
# To call a specific tool via HTTP:
import requests
response = requests.post(
"https://scientific-fraud-detection-mcp.apify.actor/mcp",
json={
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_statistical_consistency",
"arguments": {
"query": "ego depletion willpower psychology Baumeister"
}
}
},
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
result = response.json()
flags = result["result"]["content"][0]["text"]
print(f"Audit result: {flags[:500]}")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
// Call a tool directly via the MCP HTTP endpoint
const response = await fetch(
"https://scientific-fraud-detection-mcp.apify.actor/mcp",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/call",
params: {
name: "analyze_p_curve_z_curve",
arguments: {
query: "social priming unconscious cognition replication",
},
},
}),
}
);
const data = await response.json();
const text = data.result.content[0].text;
const result = JSON.parse(text);
console.log(`EDR: ${result.expectedDiscoveryRate}`);
console.log(`ERR: ${result.expectedReplicationRate}`);
console.log(`Evidential value: ${result.evidentialValue}`);
console.log(`P-hacking suspected: ${result.pHackingSuspected}`);
cURL
# Call audit_statistical_consistency
curl -X POST "https://scientific-fraud-detection-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_statistical_consistency",
"arguments": {
"query": "precognition Daryl Bem feeling the future"
}
}
}'
# List available tools
curl -X POST "https://scientific-fraud-detection-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}'
科学欺诈检测 MCP 的工作原理
阶段 1 — 从 16 个来源并行收集数据
每次工具调用都会触发 buildNetwork(),并启动五组并行的 Promise.all:
- 学术组(OpenAlex ≤80、Crossref ≤60、CORE ≤60、DBLP ≤60、arXiv ≤60)——检索论文、DOI 元数据、引用次数和预印本
- 生物医学组(PubMed ≤80、Semantic Scholar ≤80、Europe PMC ≤60、ORCID ≤40)——补充 MeSH 术语、语义图谱和研究人员档案
- 临床组(NIH Grants ≤40、ClinicalTrials.gov ≤40)——补充资助背景和已注册的试验入组人数
- 档案组(Wayback Machine ≤30、Google Scholar 的 Website to Markdown)——获取历史版本和已删除内容
- 技术组(GitHub ≤30、USPTO Patents ≤30、Hacker News ≤30)——揭示代码可复现性信号、专利申请和社区讨论
所有 16 次 Actor 调用的超时时间均为 180 秒。调用失败时会被捕获并返回空数组,从而确保返回部分结果,而非彻底失败。五组通过外层 Promise.all 并行运行,因此总延迟取决于耗时最长的一组,而不是各组耗时之和。
阶段 2 — 组装研究网络
buildResearchNetwork() 将全部 16 种来源架构标准化为由 ResearchNode 和 ResearchEdge 对象构成的统一图。节点类型包括:paper、author、journal、institution、dataset、grant、trial。边类型包括:cites、authored、published_in、funded_by、replicates、retracts。去重使用由来源前缀标识符派生的节点 ID 集合(例如,oalex-W2741809809、pubmed-38291045)。引用边根据排序后的论文列表中的共现邻近关系推断,并使用带种子的确定性哈希函数以确保结果可复现。
阶段 3 — 算法执行
8 种工具各自针对组装好的网络运行取证算法:
- GRIM/SPRITE:为每个具有
sampleSize的论文节点计算 mean × N 和平方和一致性;对整个语料库应用 Benford 卡方检验 - P-curve/Z-curve:从论文元数据中提取 p < 0.05 的值,使用 Stouffer 方法检验右偏,使用 KS 检验检验平坦度,然后通过 Beasley-Springer-Moro 正态分位数近似运行 3 分量 EM,共迭代 20 次
- Vevea-Hedges:根据论文引用信号模拟 Cohen's d,分配阶梯函数发表权重,计算 DerSimonian-Laird Q 统计量和 tau 平方,然后在选择校正下重新计算加权合并估计值
- TERGM:以 O(E) 构建引用邻接映射,遍历互引论文对,通过边遍历计算每位作者的自引率,并对前 30 个论文节点计算聚类系数
- Benford DCT + MinHash:对引用次数和样本量应用首位数分析,通过带种子的模拟估算 DCT 异常,并通过标题哈希比较计算成对 Jaccard 估计值
- Do-calculus + Dirichlet CRP:从高严重性 TERGM 节点出发,在引用图中执行 BFS,以启发式方法检查 d-分离,并根据污染强度对路径进行聚类
- Bayesian surprise:使用根据引用次数推导的统计量作为似然,应用正态-正态共轭更新,并计算相对于标准正态先验的 KL 散度
- Platt scaling fixed-point:对全部 7 种检测器输出迭代拟合校准逻辑回归,并在校准斜率稳定时收敛
阶段 4 — Standby 模式交付
服务器在 Express HTTP 服务器上以 Apify Standby 模式运行。每次向 /mcp 发送 POST 请求时,都会实例化一个新的 McpServer 和 StreamableHTTPServerTransport,处理请求,并在连接关闭时释放资源。这种按请求无状态的设计可确保不同用户的并发会话彼此隔离。
获得最佳结果的提示
-
使用作者姓名 + 机构进行定向审计。 查询“Brian Wansink Cornell food psychology”会生成范围精准的论文语料库,在这种情况下,GRIM/SPRITE 标记具有很高的相关性。泛泛地查询“nutrition psychology”则会生成范围更广的语料库,更适合进行 p 曲线领域级分析。
-
按正确顺序串联工具,完成全面审计。 先使用
analyze_p_curve_z_curve评估领域级信号,然后使用fit_selection_model_meta_analysis得出经过发表偏倚校正的效应估计,最后使用detect_citation_network_anomalies检查是否存在对该效应的引用网络操纵放大。 -
结合 EDR 和 ERR 进行解读。 EDR 低于 0.40 且 ERR 低于 0.30,表明在相关文献中,真实存在效应的研究少于 40%,可重复的研究少于 30%。根据模型,EDR 低于 ERR 不可能出现,说明语料库存在数据质量问题。
-
解读 GRIM 违规时,需考虑整数数据背景。 GRIM 失败只有对 Likert 量表或其他受整数约束的数据才有意义。连续测量尺度上的 GRIM_fail 属于假阳性——在得出结论前,请检查论文中的测量工具。
-
较高的 citationGini(> 0.70)是危险信号,但不能证明存在操纵。 竞争激烈领域中自然形成的赢家通吃式引用动态,也可能导致 Gini > 0.65。结合
detect_citation_network_anomalies的 TERGM 系数,可获得更强的信号。 -
最后运行
self_calibrate_detection,并确保已先运行其他工具。 此工具会根据同一语料库评估整个流程的可靠性。对于特定查询,如果 overallBrier 较高(> 0.15),说明语料库缺少可靠检测所需的统计信号密度——请谨慎看待该查询的其他结果。 -
通过 Apify 设置每周监测。 随着论文被撤稿和引用不断累积,研究诚信信号也会发生变化。对某本期刊或某位作者每周定时调用一次
detect_citation_network_anomalies,生成的时间序列比一次性快照更有诊断价值。
与其他 Apify actors 结合使用
| Actor | 组合使用方式 |
|---|---|
| Company Deep Research | 找出存在高欺诈信号的作者后,对其所属机构或衍生公司进行公司深度研究,以检查是否存在财务利益冲突 |
| Website Content to Markdown | 将撤稿通知、PubPeer 评论串或期刊编辑部通知转换为结构化 markdown,供下游 LLM 分析使用 |
| WHOIS Domain Lookup | 检查域名注册日期和注册人信息,核实引用分析标记出的掠夺性期刊的来源 |
| Trustpilot Review Analyzer | 当引用异常指向特定刊物时,在社区评论数据库中交叉核对期刊或出版商的声誉 |
| Website Change Monitor | 监测被标记期刊的网站或撤稿数据库,查看是否发布了与引用网络分析所识别论文相关的新撤稿信息 |
| B2B Lead Qualifier | 对于研究诚信咨询机构,通过交叉核对公司研究支出和过往审计记录来筛选潜在客户 |
| Multi-Review Analyzer | 跨多个平台抓取并分析社区对被标记研究人员或机构的评论,以寻找佐证信号 |
局限性
- GRIM 和 SPRITE 仅适用于受整数约束的数据。 它们不适用于连续测量值、百分比或经过对数变换的值。将它们用于非整数数据会产生误导性的标记。
- P-curve 和 z-curve 至少需要 10 个显著的 p 值,才能可靠地推断分布形状。针对单篇论文的查询或已发表结果较少的狭窄主题会导致分析效能不足,EDR/ERR 的置信区间也会很宽。
- 引文网络的构建使用基于邻近性的边推断。 如果底层数据库未提供完整的引文元数据,引文边会根据组装语料库中的共现顺序推断得出。这是一种启发式近似,并非真实的文献计量引文图谱。
- Benford DCT 取证是一种筛查信号,而非操纵证据。 此服务中的 DCT 异常值是根据语料库元数据模拟得出的,并非通过实际图像文件计算。请使用此工具进行初步筛查,而非得出结论。
- MinHash 相似度仅使用标题级哈希。 完整的内容级抄袭检测需要论文全文,而此流程不会检索全文。漏报(未能发现标题不同的重复内容)很常见。
- do-calculus 的 d-separation 是近似的。 可识别性检查使用基于启发式 BFS 的评估,而非完整的 Pearl do-calculus 求解器。不可识别的路径可能会被错误地标记为可识别。
- 此服务无法访问付费墙后的全文。 全部 16 个数据源均为公共 API 和开放获取知识库。仅可通过机构期刊订阅获取的论文不会纳入分析语料库。
- 小型语料库上的自校准具有循环性。 如果组装出的网络中论文少于约 30 篇,定点校准循环会收敛到平凡解。Godelian 自指深度会报告较低值(1-2),而非有意义的收敛诊断结果。
集成
- Zapier — 当期刊监控列表中的新论文被标记时,自动触发欺诈筛查
- Make — 构建多步骤工作流,将高严重性 GRIM 标记发送到 Notion 或 Airtable 中的审核队列
- Google Sheets — 将引文异常分数和 HARKing 概率导入持续更新的电子表格,以跟踪受监控领域的情况
- Apify API — 使用 Python、JavaScript 或任何 HTTP 客户端触发 8 个工具中的任意一个,将其纳入更大型的研究流程
- Webhooks — 当工具调用完成,或某次运行产生的异常分数超过可配置阈值时,接收 POST 通知
- LangChain / LlamaIndex — 将此 MCP 服务连接到大模型 Agent,以便在生成答案前实时评估科学主张
故障排除
-
预期会发现异常,但工具返回的标记很少 — 汇总的语料可能较小。尝试使用更宽泛的查询(例如研究领域,而不是某篇特定论文),从 16 个来源中检索更多论文。返回论文少于 20 篇的查询,会导致 GRIM 和 p-curve 结果在统计效力上不足。
-
每次查询的
selectionSeverity都非常高(> 5) — 当语料中研究数量很少且效应量各不相同时,DerSimonian-Laird 估计器可能会得出不稳定的 tau-squared 值。这是数据稀缺造成的假象,并非真实的发表偏倚信号。 -
达到支出限额错误 —
eventChargeLimitReached标记表示工具完成前已达到配置的单次运行支出限额。请在 Apify 运行设置中提高限额,或将分析拆分到多个会话中。 -
服务在 GET /mcp 上返回 405 Method Not Allowed — MCP 端点仅接受 POST 请求。根据 MCP 协议规范,GET 请求会被有意拦截。请使用带有 JSON-RPC 请求体的 POST。
-
z-curve 的 EDR 大于 1.0 或为负值 — 这表示 EM 解出现退化,通常是因为语料中的 p 值集中在单一值,或查询未返回显著的 p 值。添加更宽泛的主题词,以增加论文语料的多样性。
负责任地使用
- 此服务仅查询公开可用的学术数据库、政府研究门户和开放获取知识库。
- 这些工具发现的统计异常是筛查信号,并非欺诈或不当行为的证据。在依据结果采取行动前,请务必运用专业判断。
- 未经具备资质的统计学家或研究诚信专业人士独立核实,请勿使用此工具的输出结果公开指控他人。
- 请遵守各个底层数据源的服务条款(OpenAlex CC0、PubMed 公共 API、Crossref 公共 API 等)。
- 如需了解有关负责任地使用网页抓取和数据聚合的指南,请参阅 Apify 关于网页抓取合法性的指南。
常见问题
此 MCP 服务如何检测科学欺诈? 每次工具调用都会并行查询 16 个学术数据源,汇总形成一个研究网络,然后应用特定的取证算法——使用 GRIM/SPRITE 检查统计一致性,使用 p-curve/z-curve EM 检测 p 值操纵,使用 Vevea-Hedges 选择模型检测发表偏倚,使用 TERGM 检测引用操纵,使用 Benford DCT + MinHash 进行数据取证,使用 do-calculus 追踪污染,以及使用贝叶斯惊异度检测 HARKing。
GRIM 检测伪造数据的准确度如何? 当底层数据确实为整数值(例如 Likert 量表)时,GRIM 的假阳性率非常低。Brown 和 Heathers(2017)的研究发现,在一组社会心理学文献论文样本中,有 50% 未通过 GRIM 检验。不过,GRIM 只能标记数学上不可能的结果——了解 GRIM 的伪造者可以生成符合 GRIM 的虚假数据。
每次工具调用会分析多少篇论文? 每次工具调用最多会从 16 个来源提取 460 条原始记录(OpenAlex ≤80、PubMed ≤80、Semantic Scholar ≤80、Crossref ≤60、CORE ≤60、DBLP ≤60、arXiv ≤60、Europe PMC ≤60、ORCID ≤40、NIH Grants ≤40、ClinicalTrials.gov ≤40、Wayback Machine ≤30、GitHub ≤30、USPTO ≤30、Hacker News ≤30、网站抓取 ≤1)。去重并汇总网络后,分析通常会基于 50–200 个独立论文节点进行。
z-curve 分析中的 EDR 和 ERR 有什么区别? 预期发现率(EDR)估计所有经过检验的假设(无论显著与否)中对应真实效应的比例。预期重复率(ERR)估计随机选取的一项显著结果,在样本量相同的直接重复研究中能够重复的概率。ERR 通常低于 EDR,因为它考虑了选择性报告对原始效应估计的夸大作用。 此工具能否确凿证明科学造假? 不能。这些是统计筛查工具,用于识别与可疑研究做法相符的模式。GRIM 检验失败率高、p 曲线平坦以及自引分数极端,都是值得调查的危险信号,但并非不当行为的证据。最终认定需要由合格的统计学家进行独立核实,并由机构开展调查。
这与 StatCheck 或 GRIM 检验计算器有何不同? StatCheck 和基于网页的 GRIM 计算器要求你手动粘贴单项统计数据,或上传单篇论文。此 MCP 服务会从 16 个实时数据库中汇集完整的论文语料库,对整个语料库同时进行 GRIM/SPRITE/Benford 分析,并集成另外 7 种取证工具——只需通过 AI 助手或 API 客户端调用一次工具即可完成。
使用此工具审查已发表研究合法吗? 所有 16 个数据源都是公开的学术数据库和政府门户网站。出于研究诚信目的分析公开的文献计量数据,在法律上没有歧义。有关数据访问和抓取合法性的指引,请参阅 Apify 的指南。
一次典型的工具调用需要多长时间?
每次工具调用会在并行组中启动 16 个 actor,每个 actor 的超时时间为 180 秒。根据数据库响应时间和语料库规模,通常需要 30–90 秒的实际运行时间。外层的 Promise.all 分组会将总时间限制在最慢的并行组所需时间内,而不是所有 actor 用时的总和。
我可以安排科学造假检测自动运行吗? 可以。使用 Apify 内置的调度程序,按任意间隔触发工具调用——例如每日监控期刊、每周跟踪作者,或每月评估领域情况。结合 Webhook,即可将结果自动发送到 Slack、电子邮件或 Notion 数据库。
如果 16 个数据源中有一个不可用,会怎样? 每个 actor 调用都封装在 try/catch 中,失败时会返回一个空数组。网络数据汇集会继续进行,并使用成功检索到的数据。单个数据源中断不会导致分析崩溃,但会缩小论文语料库规模,并可能降低取证算法的统计效力。
自校准工具如何工作?
self_calibrate_detection 会针对同一语料库运行全部 7 个检测器,然后将其他检测器作为伪真实参照,为每个检测器的分数应用 Platt 缩放(逻辑校准)。固定点循环会持续迭代,直到校准斜率稳定下来。哥德尔自指深度指标会报告达到收敛时的递归层级——数值越高,表示校准过程越复杂。
我可以将其用于任何兼容 MCP 的 AI 助手吗?
可以。此服务通过 HTTP(Streamable HTTP 传输)实现 MCP 协议,并兼容 Claude Desktop、Cursor、Windsurf,以及任何支持 MCP tools/call 方法的其他客户端。端点为 https://scientific-fraud-detection-mcp.apify.actor/mcp。
帮助我们改进
如果你遇到问题,可以在 Apify 账户中启用运行共享,帮助我们更快地调试:
- 前往 账户设置 > 隐私
- 启用 与公开的 Actor 创建者共享运行记录
这样一来,出现问题时我们就能查看你的运行详情,从而更快地修复问题。你的数据仅对 actor 开发者可见,不会公开。
支持
发现 Bug 或有功能需求?请在此 actor 页面上的 Issues 标签页中提交问题。有关定制研究诚信工作流、扩展数据源集成或企业用例,请通过 Apify 平台联系我们。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。