mcpt链接新鲜
不要让你的公共表面变得陈旧。
mcpt-link-fresh 是一种同步的漂移修复自动化 可变列表 (GitHub元数据、发行说明、README块和面向注册表的链接)返回到您的 永恒的规范真理 (mcptoolshop.com+MarketIR导出的输出)。
它是为单人规模而构建的:你可以运送更多的工具,系统可以保持“前门”的准确性。
______________________________________________________________________
它做什么
同步可编辑内容:
- GitHub仓库 首页, 描述, 话题
- GitHub 发布说明 (添加/刷新“链接+证明”部分)
- 仓库 README块 (通过公关,切勿强行推动)
生成外展队列(可选):
- 漂移事件触发 微广告包 与得分目标配对
- 保守的触发因素:只有经过证实的主张、新的证据、重大的定位变化
- 速率受限、重复数据消除、安静时间意识
- 生产
outreach-queue.json+outreach-queue.md供人类审查 - 从不发送任何东西 --纯粹的咨询
标记需要版本发布的内容:
- 无法就地更新的npm/PyPI元数据会打开一个 仅元数据补丁发布PR (可选模式)
从不更改核心代码。它更新的是表面,而不是功能。
______________________________________________________________________
典型真相来源
mcpt-link-fresh 将这些视为权威:
https://mcptoolshop.com/presskit//presskit.json
(机器可读工具真相:定位、声明、证据、GitHub事实快照、跟踪链接)
https://mcptoolshop.com/links.json
(规范跟踪go链接+UTM参数)
https://mcptoolshop.com/tools//和/press//
(面向人类的常青页)
为了推广,它还从营销网站的本地文件系统中读取:
- MarketIR工具定义(
data/marketir/data/tools/.json) - 受众角色(
data/marketir/data/audiences/*.json) - 目标列表(
public/targets//targets.json) - 外联模板(
public/outreach//*.md) - Go链接注册表(
data/links.json)
它所写的一切都来自这些来源,并带有时间戳。
______________________________________________________________________
安全栏杆(不可协商)
- 仅允许列表: 它只会触摸明确配置的repos。
- 先进行试运行: 在应用更改之前生成一个计划(JSON+Markdown)。
- 最低特权: 工作流要求最低限度的GitHub权限。
- 输出中没有秘密: 从不写入令牌,从不记录敏感的环境变量。
- 软故障: 部分权限(例如流量指标)永远不会中断同步。
- 无HTML注入: 所有派生文本都经过净化;URL是允许的(http/https)。
- 组织冻结:
freeze.disallowOwnersblocks写入特定的GitHub组织/用户。 - 域分配列表:
rules.allowedDomains将规范URL限制为受信任的域。 - 不发送: 外展队列仅供参考。零代码路径发送电子邮件、DM或发布任何内容。
- 仅经证实的声明: 外联项目从不提及有抱负或被弃用的主张。
______________________________________________________________________
它是如何运作的(决策模型)
它将每个“表面”视为三种动作类型之一:
- 直接更新(安全): GitHub元数据(描述/主页/主题)
- 需要PR(审查): README编辑
- 需要发布(版本): 注册表元数据更改(可选模式)
当启用外展功能时,漂移事件会被额外分类:
- 外展触发器: 添加经证实的声明、添加证据、发布发布或材料定位更改
______________________________________________________________________
快速入门(本地)
您通常通过计划的工作流运行此操作,但支持本地运行。
npm ci
node src/index.mjs --dry-run --config sync.config.json要应用更改,请执行以下操作:
node src/index.mjs --apply --config sync.config.json要应用单个目标,请执行以下操作:
node src/index.mjs --apply --config sync.config.json --target zip-meta-map配置
创建 sync.config.json:
{
"version": "1.0.0",
"canonical": {
"presskitBaseUrl": "https://mcptoolshop.com/presskit",
"linksUrl": "https://mcptoolshop.com/links.json",
"toolPageBase": "https://mcptoolshop.com/tools",
"pressPageBase": "https://mcptoolshop.com/press"
},
"targets": [
{
"slug": "zip-meta-map",
"repo": "mcp-tool-shop-org/zip-meta-map",
"enabled": true,
"mode": "github-only",
"topicsMax": 12
}
],
"rules": {
"appendReleaseNotesSection": true,
"openReadmePR": true,
"registryDriftPR": false,
"allowedDomains": ["mcptoolshop.com"]
},
"freeze": {
"disallowOwners": []
},
"marketingSitePath": "",
"outreach": {
"enabled": false,
"maxPerToolPerWeek": 3,
"dedupeWindowDays": 14,
"quietHours": { "start": "22:00", "end": "08:00", "tz": "America/New_York" },
"topTargetsPerItem": 3
}
}配置字段
| 字段 | 类型 | 描述 |
|---|---|---|
canonical.presskitBaseUrl | string | presskit.json文件的基本URL |
canonical.linksUrl | string | 规范链接注册表的URL |
canonical.toolPageBase | string | 工具详细信息页面的基本URL |
canonical.pressPageBase | string | 新闻页面的基本URL |
targets[].slug | string | 工具段(与presskit文件名匹配) |
targets[].repo | 字符串 | owner/repo 在GitHub上 |
targets[].enabled | boolean | 是否处理此目标 |
targets[].mode | 字符串 | github-only 或 full |
targets[].topicsMax | number | GitHub主题的最大数量(默认12) |
rules.appendReleaseNotesSection | boolean | 将托管部分添加到最新版本 |
rules.openReadmePR | boolean | 打开PR以获取README块更新 |
rules.registryDriftPR | boolean | 计划注册表元数据补丁(默认禁用) |
rules.allowedDomains | string\[\] | 只允许来自这些主机名的规范URL |
freeze.disallowOwners | string\[\] | 阻止对这些用户/组织拥有的存储库的写入 |
marketingSitePath | string | 本地营销网站结账路径(用于外展) |
outreach.enabled | boolean | 启用外展队列生成 |
outreach.maxPerToolPerWeek | number | 每个工具每7天的最大队列项目数 |
outreach.dedupeWindowDays | number | 在此窗口内抑制重复的触发器+目标组合 |
outreach.quietHours | object | 在这段时间内抑制所有项目 |
outreach.topTargetsPerItem | number | 每个队列项的最大目标数(默认值3) |
模式:
github-only(默认):GitHub元数据+发布+README PRfull:如果启用,还计划注册表漂移PR(npm/PyPI)
外联需要:
outreach.enabled: truemarketingSitePath设置为有效路径
如果缺少其中任何一个,则默认跳过外展步骤。
外展队列
启用后,外联队列会根据漂移事件生成微活动数据包。
触发规则(保守)
| 类别 | 条件 | 优先级 |
|---|---|---|
claim-change | 添加了经证实的索赔或更改了声明文本 | high |
evidence-added | 现有已证实索赔的新证据 | normal |
release-published | 发行说明漂移+元数据更改 | normal |
presskit-material | 标记线、valueProps或oneLiner已更改 | normal |
从不触发: 主题重新排序、仅空白更改、主页尾部斜线规范化、README块注入、有抱负的声明。
基线运行: 首次运行时,如果没有之前的presskit快照,则不会产生任何触发。
队列项目内容
每个队列项目包括:
- 触发器类别和摘要
- 最适合的受众(关键字与painPoints重叠)
- 蛞蝓目标列表中得分最高的3个目标
- 建议模板(基于目标类型)
- 主题行建议(确定性,无LLM)
- 前往链接CTA
- 使用的索赔(包括状态和声明)
- 资源链接(新闻资料袋、宣传资料包)
费率限制
maxPerToolPerWeek:每7天每塞物品的硬上限dedupeWindowDays:相同{slug, category, target}组合在窗口内被抑制quietHours:在指定时间内抑制的所有项目- 跟踪历史
reports/outreach-history.json(仅追加,修剪至90天)
工作流
每周漂移报告(预定)
每周一08:00 UTC运行。检测所有目标的漂移并上传报告工件。未进行任何更改。
应用漂移修复(手动)
通过触发 workflow_dispatch 可选 target_slug 输入。先运行模拟运行,然后在后面应用修复程序 link-fresh-apply 需要手动批准的环境门。
输出
每次运行都会生成一个确定性报告:
reports//plan.json
reports//plan.md
reports//outreach-queue.json (when outreach enabled)
reports//outreach-queue.md (when outreach enabled)
reports//results.json (when --apply)
reports/presskit-snapshots/.json
reports/outreach-history.json每个更改都包括:检测到了什么漂移,使用了什么源字段,应用/提出了什么更新,时间戳和来源。
计划可解释性
每一个动作 plan.md 显示:
- 安全标签:“自动应用安全”(API)或“需要审查”(PR)
- API终点:将调用的确切GitHub API路由
- 当前vs规范:将过时值与预期值进行并排比较
- 摘要:安全、所需审查和手动发布操作的计数
错误代码
| 代码 | 含义 | 修复 |
|---|---|---|
MKT.SYNC.NO_CONFIG | 未找到配置文件或JSON无效 | 检查 --config 路径 |
MKT.SYNC.NO_TARGET | --target 配置中找不到slug | 检查slug拼写 |
MKT.SYNC.FROZEN_OWNER | 目标回购所有者在 freeze.disallowOwners | 从冻结列表中删除或禁用目标 |
MKT.SYNC.DOMAIN_BLOCKED | 规范URL主机名不在 rules.allowedDomains | 将主机名添加到allowlist |
MKT.SYNC.FETCH_FAILED | 获取presskit、链接或GitHub数据时发生网络错误 | 检查连接和URL |
MKT.SYNC.NO_PRESSKIT | 找不到目标slug的presskit.json | 生成新闻工具包并部署站点 |
MKT.SYNC.API_DENIED | GitHub API返回403/401 | 检查GitHub_TOKEN权限 |
MKT.SYNC.OUTREACH_SKIP | 没有slug的MarketIR数据 | 确保营销网站中存在JSON工具 |
MKT.SYNC.OUTREACH_NO_TARGETS | slug没有targets.json | 为此slug运行gen-targets.mjs |
MKT.SYNC.OUTREACH_NO_CLAIMS | 工具没有经过验证的声明 | 添加经过验证的有证据的声明 |
MKT.SYNC.OUTREACH_DOMAIN | Go链接URL主机名不在允许的域中 | 检查Go链接URL或添加主机名 |
MKT.SYNC.QUEUE_RATE_LIMITED | 由于每周上限而被抑制的项目 | 等待或增加maxPerToolPerWeek |
MKT.SYNC.QUEUE_DEDUP | 由于最近重复而被抑制的项目 | 等待数据消除窗口过期 |
MKT.SYNC.QUEUE_QUIET | 由于安静时间而被抑制的项目 | 在安静时间之外运行 |
测试
npm test # unit tests (98 tests)
npm run test:e2e # integration tests with golden snapshots (22 tests)
npm run test:queue # outreach-specific tests only
npm run test:all # all tests (120 tests)文档
- docs/SYNC-SPEC.md --规范字段、漂移规则和动作类型
- docs/RUNBOOK.md --常见故障和修复
安全和数据范围
| 方面 | 细节 |
|---|---|
| 数据已触摸 | GitHub回购元数据(通过API)、README文件(读/写)、营销网站数据 |
| 数据未被触碰 | 没有存储用户凭据,没有数据库,没有遥测 |
| 权限 | API访问所需的GitHub令牌(读取转发、写入元数据) |
| 网络 | 仅限GitHub API |
| 遥测 | 未收集或发送 |
看 安全.md 用于漏洞报告。
记分卡
| 类别 | 分数 |
|---|---|
| A.安全 | 10 |
| B.错误处理 | 10 |
| C.操作员文档 | 10 |
| D.航运卫生 | 10 |
| E.身份(软) | 10 |
| 总体 | 50/50 |
全面审计: 发货日期.md · SCORECARD.md
许可证
麻省理工学院
