io.github.woowoeth/ourword is an MCP server that search Chinese deep-reads of 190+ podcasts; every point and quote has an audio timestamp. Its tool list has not been published yet over stdio, requires no API key, and scores 60/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"io-github-woowoeth-ourword": {
"args": [
"certifi"
],
"command": "uvx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Search Chinese deep-reads of 190+ podcasts; every point and quote has an audio timestamp.
Run this in your terminal to verify the server starts. Then let us know if it worked - your result helps other developers.
uvx 'certifi' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories - click any category to see the underlying evidence.
certifi bundles emSign root CAs with compromised intermediate CA keys
Certifi versions before 2026.10.18 include the `emSign ECC Root CA - G3` root certificate in their bundled CA store. Eight eMudhra intermediate CA certificates that chain to this root have compromised private keys and the CA has revoked them. An attacker with one of the compromised keys can issue valid-looking certificates for any hostname. If the attacker is also on-path, they can intercept or modify TLS traffic from clients that trust the certifi bundle. Examples include `requests`, `urllib3
certifi bundles emSign root CAs with compromised intermediate CA keys
Certifi versions before 2026.10.18 include the `emSign ECC Root CA - G3` root certificate in their bundled CA store. Eight eMudhra intermediate CA certificates that chain to this root have compromised private keys and the CA has revoked them. An attacker with one of the compromised keys can issue valid-looking certificates for any hostname. If the attacker is also on-path, they can intercept or modify TLS traffic from clients that trust the certifi bundle. Examples include `requests`, `urllib3
PYSEC-2024-230
Certifi is a curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts. Certifi starting in 2021.05.30 and prior to 2024.07.4 recognized root certificates from `GLOBALTRUST`. Certifi 2024.07.04 removes root certificates from `GLOBALTRUST` from the root store. These are in the process of being removed from Mozilla's trust store. `GLOBALTRUST`'s root certificates are being removed pursuant to an investigation which iden
PYSEC-2023-135
Certifi 2023.07.22 removes root certificates from "e-Tugra" from the root store. These are in the process of being removed from Mozilla's trust store. e-Tugra's root certificates are being removed pursuant to an investigation prompted by reporting of security issues in their systems.
PYSEC-2022-42986
Certifi is a curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts. Certifi 2022.12.07 removes root certificates from "TrustCor" from the root store. These are in the process of being removed from Mozilla's trust store. TrustCor's root certificates are being removed pursuant to an investigation prompted by media reporting that TrustCor's ownership also operated a business that produced spyware. Conclusions of Mozi
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in entertainment
The official MCP Server for the Mux API
Give Claude the ability to watch and understand videos — Claude Code plugin with frame extraction and multimodal audio analysis
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
MCP server for *arr media suite - Sonarr, Radarr, Lidarr, Readarr, Prowlarr
MCP Security Weekly
Get CVE alerts and security updates for io.github.woowoeth/ourword and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
世界太吵,来原声听播客。 每天从 54 档中英文播客里挑出值得记住的判断。要点和金句都带时间戳,点一下就回到 它在原声里被说出的那一秒;金句逐字校验过、数字回原文核对过——查不到出处的, 一律不上站。
线上: https://ourword.ai/podcast/ · RSS · 信源清单
同类站点(如 onepod.site)的做法是:抓 21 个 YouTube 频道的自动字幕,让模型写一篇散记发出来。三个问题:
| 只抓 YouTube 自动字幕 | 本项目 | |
|---|---|---|
| 信源 | 21 个 YouTube 频道,纯音频节目整块缺失 | 54 档,以 Apple Podcasts 官方 RSS 为主干,Acquired / Odd Lots / Invest Like the Best / 中文播客都在 |
| 文稿 | 一层:YouTube 自动字幕,抓不到就发降级篇 | 五层回退,最好的一层是节目自己发布的官方逐字稿(带说话人) |
| 可信度 | 金句无法核对,时间戳没有 | 金句逐字比对逐字稿,对不上当场删;数字回原文核对;时间戳可点击跳原声 |
| 失败时 | 发一篇写着"本机字幕脚本依赖环境异常"的稿子 | 不发。宁可当天零产出 |
第三行是重点。这个仓库里没有"尽力而为"这个选项——pipeline/lib/gate.py 验不过的记录不会变成页面。
pipeline/lib/transcript.py)按质量从高到低试,第一个通过密度校验的胜出:
feed — 节目在 RSS 里发布的 <podcast:transcript>(VTT / SRT / JSON)。Odd Lots、TBPN、Practical AI、Think Fast、Acquired 有。JSON 那种还自带说话人分离。notes — feed 条目本身就是全文。Substack 系(Latent Space、Interconnects)习惯把整份逐字稿贴进 content:encoded,格式是 Joon [00:31:12]: …,于是说话人归属和精确时间戳都是免费的。page — show notes 里的 transcript 链接,或节目页。抓下来必须通过标题特征词校验确认是这一集,否则丢弃(否则会抓到节目的归档页)。youtube — yt-dlp 拉自动字幕。会做滚动重复裁剪(YouTube 的字幕是"上一条尾部 + 新内容",直接拼接会把每句说两遍)。asr — 下载音频送 Whisper 兼容接口转写,带 segment 时间戳。长音频用 ffmpeg 切片。每一层都要过语速校验:英文 70–300 wpm,中文 110–520 字/分。低于下限说明拿到的是 show notes 冒充逐字稿;高于上限说明抓错了文档。两种情况都当作"没有文稿"。
pipeline/lib/gate.py)| 检查 | 不通过时 |
|---|---|
金句在逐字稿里逐字存在(允许 … 省略,保留的每段都要命中) | 删掉该条金句 |
facts 里的数字能在逐字稿里找到 | 删掉该条数字 |
时间戳落在 0 ~ 时长+180s 之间 | 删掉该条 |
| 出现管线元信息(yt-dlp / 本机 / 脚本依赖 / 环境异常 / 转写失败…) | 整篇拒绝 |
| 出现空话套话(值得一听 / 干货满满 / 这期节目讨论了…) | 记入日志 |
| 要点 ≥ 5 条、校验通过的金句 ≥ 2 条、标题是中文 | 整篇拒绝 |
剔除了什么、为什么剔除,都写进 run log(Actions artifact 保留 14 天),页面侧栏也会显示"质检剔除 N 处"。
同一集经常同时出现在 RSS 和节目的 YouTube 频道。指纹 = 归一化标题 + 时长按 2 分钟分桶,命中就跳过。(对照站点没做这个,同一集出现过两次。)
踩过的坑都在 POSTMORTEM.md,按错误类型分组,每条写清现象、根因、 以及现在靠什么防住。前三类各自重复发生过三到四次(失败却报成功、基础设施抖动被当成 内容缺失、校验规则误杀真内容),改这个项目之前值得先读一遍。
能自动化的都变成了检查:tests/test_guards.py 直接断言那些教训——推送重试循环必须
检查结果、评审失灵必须拦下而选题失灵必须放行、移除信源需连续失败(一次抖动不算)、
评分不许全挤在及格线上、理由与分数必须一致、信源 id 不许因中文名塌成 42/src、
字符串相似度四版失败用例全部保留、判据必须承认"判断与框架"这种价值形态、
每页恰好一个 h1、cron 还开着、本机脚本含提交推送。纯文档防不住重犯。
python3 -m unittest discover -s tests # 87 项
有两条路,看你能不能拿到 key。
两条线同时在跑,分工由 IP 决定,互不重复:
| 跑什么 | 频率 | |
|---|---|---|
| 云端 GitHub Actions | 45 档(官方逐字稿 / feed 全文 / 官网文稿页 / RSS 音频转写) | 每天三班 cron |
| 本机 launchd | 16 档(YouTube 与 Substack,机房 IP 抓不到);云端深读关着时全站都管 | 每天 10:30 与 21:30,没跑成每小时补 |
state.json 在 git 里,本机跑前先 git pull,所以不会重复发同一集。
A · 本机定时(已装,不需要任何 key)
用本机已登录的 claude CLI 生成。不产生 API 账单,但会花 Claude 订阅额度,
所以刻意压小:每天 2 篇、模型 sonnet、跳过超过 2 万词的超长集,约 5 万
input tokens/天。
cp scripts/com.ourword.podcast.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.ourword.podcast.plist
正点班次是每天 10:30 与 21:30(--only-residential,每次上限 6 篇;云端深读关着时本机接班、全站都管),
完整链路并推送。launchd 每小时 :30 拉一次,由 pipeline/slot.py 判断:最近一班跑成了就什么都不做,
没跑成(睡着、关机、重启打断、claude CLI 登录过期、订阅额度用完)就补 —— 模型用不了的每小时探一次
(只花一次 haiku 调用,同一个原因只推一次心跳、弹一次通知),别的失败每班最多试 3 次。
每个整点的判断记在 .cache/logs/slot.log,跑批日志在 .cache/logs/日期.log。
手动跑直接 bash scripts/local-daily.sh(已经有一轮在跑就拒绝);launchctl kickstart 走的是定时那条路,
班次跑完了它就不跑。停掉用 launchctl unload。
转写用本机模型,不需要任何 key:mlx-whisper(Apple Silicon)+ imageio-ffmpeg
自带的静态 ffmpeg。它返回逐句真实时间码,比云端 SenseVoice 那条更准(后者只给整段
文本,得按字数插值)。~/.config/podcast/env 里若放了 Claude 的 LLM_API_KEY(用
scripts/set-local-key.sh 写)就走 API 账单,否则用本机已登录的 claude CLI(花订阅额度,
因此刻意压小篇数)。
B · GitHub Actions 云端日更(只用 Claude)
2026-09-25 起模型只用 Claude,不再用 DeepSeek 或其他 OpenAI 兼容端点。工作流里写死了
LLM_PROVIDER=anthropic 和型号,只要一个 secret:
| secret | 内容 |
|---|---|
ANTHROPIC_API_KEY | Anthropic 控制台的 API key(sk-ant-api…),或 claude setup-token 生成的 token(自动走 Bearer) |
型号分工(写在工作流里,不是 secret):
| 角色 | 型号 | 为什么 |
|---|---|---|
| 选题初筛、分段抽 |