io.github.lsmman/fetchive
MCP server for extracting links from text dumps, checking duplicates, extracting YouTube transcripts (with fallbacks including speech-to-text), and preparing workspace-ready page payloads for your note-taking or saving tools. It does not write to your workspace; it hands off prepared content to your existing tools.
README
Fetchive
<!-- mcp-name: io.github.lsmman/fetchive -->
Throw links at it. Get workspace-ready pages back.
An MCP server for people who collect more links than they can process. Paste a KakaoTalk export, a Slack dump, or a bare list of URLs, and Fetchive pulls out every link, skips what you already saved, reads what is behind each one — YouTube transcripts, article text — and hands your assistant a ready-to-save payload for each.
Everything it reads stays searchable, so last month's links can answer this month's question.
It does not write to your workspace. It prepares the page and lets whatever you already have connected — Notion, Obsidian, anything — do the saving. No second login, no second place for your data to sit.
Install
uvx fetchive
Or add it to your MCP client:
{
"mcpServers": {
"fetchive": {
"command": "uvx",
"args": ["fetchive"]
}
}
}
For local speech-to-text on videos with no captions:
uvx --with 'fetchive[stt]' fetchive
That extra needs ffmpeg on your PATH (brew install ffmpeg) and downloads a
Whisper model on first use.
Using it
Say this to your assistant:
Here's my link dump from this week, archive it → (paste)
Behind that, one tool call does the work:
archive_batchparses the links, skips what is already saved, extracts transcripts, and starts working in the backgroundget_batch_statusreports progress and returns the finished payloads- Your assistant saves each one with your workspace tool
record_archivedtells Fetchive it landed, so next week's dump skips it
Later, ask it what you saved:
지난달에 RAG 청킹 얘기 어디서 봤더라?
search_archive runs full-text search over every transcript and article body it
has read — not just titles — and Korean works, which the usual word tokenizer
does not manage.
The other tools — ingest_links, extract_youtube_script, check_duplicate,
format_for_notion, forget_archived — are the individual steps, there for when
you want to inspect or repair something rather than run the whole flow.
A link it cannot read fails rather than becoming an empty page. A row that says only "here is a URL I could not open" looks like the work was done.
How transcripts actually get extracted
This is the hard part of the problem, and no single method survives YouTube for long. Fetchive tries four, in order, and stops at the first that returns words:
| Order | Method | Cost | Why it is in the chain |
|---|---|---|---|
| 1 | youtube-transcript-api, direct |
free | Fastest when it works |
| 2 | yt-dlp captions |
free | Different endpoints, so it survives blocks that stop #1 |
| 3 | youtube-transcript-api via proxy |
cheap | For when your IP itself is the problem |
| 4 | yt-dlp audio → local Whisper |
slow | Works on videos with no captions at all |
Every attempt is recorded with a reason it failed — blocked, no_captions,
unavailable, too_long, and so on — so a run tells you not only what came out
but which parts of the pipeline still work. Successful transcripts are cached, so
asking twice is free.
Captions are chosen by what exists, not by what you hoped for: a Korean video with only Korean captions gets its Korean transcript rather than being reported as having none.
Configuration
Everything is optional.
| Variable | Default | What it does |
|---|---|---|
FETCHIVE_DB_PATH |
~/.fetchive/fetchive.db |
Where your archive index and transcript cache live |
FETCHIVE_LANGUAGES |
ko,en |
Preferred caption languages, best first |
WEBSHARE_PROXY_USERNAME / _PASSWORD |
— | Enables the proxy step. Without these it is skipped |
FETCHIVE_ENABLE_STT |
true |
Set to false to never fall back to speech-to-text |
FETCHIVE_WHISPER_MODEL |
base |
Larger is slower and more accurate |
FETCHIVE_MAX_STT_DURATION |
3600 |
Refuse to transcribe anything longer, in seconds |
FETCHIVE_BATCH_WORKERS |
3 |
Concurrent extractions. YouTube dislikes more |
FETCHIVE_QUOTE_WORD_LIMIT |
15 |
Longest verbatim quote allowed out of the server |
FETCHIVE_TRANSPORT |
stdio |
http for a hosted deployment |
About copyright
Transcripts are extracted for your own reading and cached locally. Putting that text into a stored page is a different act, so what Fetchive prepares for your workspace is a summary, a word count, and at most one quote of fifteen words per source — enforced in the payload builder rather than left to whoever is calling. The link to the original always travels with it.
Fetchive is a tool for organising material you have chosen to keep. It is not for republishing anyone's work, and you remain responsible for what you do with what it extracts. If a source's terms do not permit you to store its content, do not archive it.
Your data
Everything stays on your machine, in one SQLite file. Fetchive has no server, no account, and no telemetry. It talks to YouTube to fetch transcripts, and to a proxy only if you configure one. Nothing is ever sent to Fetchive's authors.
To delete everything: rm -rf ~/.fetchive. To remove one item, call
forget_archived with its URL.
Full policy: https://github.com/lsmman/fetchive/blob/main/PRIVACY.md
Development
uv sync
uv run pytest
uv run ruff check src tests
Network tests are deselected by default. To run them against real YouTube:
uv run pytest -m network
MIT licensed.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。