English | 中文 | 日本語 | 한국어 | Français | Deutsch
Ebook-MCP 是一个强大的模型上下文协议(MCP)服务器,用于处理电子书。基于 模型上下文协议,它提供了一组标准化的API,实现LLM应用程序与电子书处理能力之间的无缝集成。目前支持EPUB和PDF格式。
Ebook-MCP 改变了您与数字书籍互动的方式,通过自然语言对话与您的阅读材料进行交互。它无缝地与现代AI驱动的IDE如Cursor和Claude集成,允许您:
通过弥合传统电子书与AI能力之间的差距,Ebook-MCP帮助读者通过直观、基于对话的交互从他们的数字图书馆中提取更多价值。
快速演示 - 使用DeepSeek运行(请检查mcp-client-example文件夹下的所有Claude/OpenAI示例)
查询:请检查我下载文件夹中的所有epub书籍。用户ID是onebird。
......
查询:你能问几个问题来测试我对这本书的理解吗?
答案:当然!这里有关于Walter Isaacson写的Elon Musk的五道题来测试你对这本书的理解。请根据你的知识作答——我会在每个回答后提供反馈并补充细节。
问题1:
马斯克的童年和家庭背景如何塑造了他后来的性格和事业?
(提示:他与父亲的关系,成长于南非等)
问题2:
Zip2和X.com(后来成为PayPal)是马斯克的早期创业公司。它们解决了哪些问题?马斯克是如何最终退出这些公司的?
(提示:Zip2的商业模式,X.com与Confinity的合并等)
问题3:
2008年,SpaceX和特斯拉都濒临破产。马斯克是如何拯救这两家公司的?
(提示:Falcon 1的第四次发射,NASA合同,特斯拉的最后时刻救援等)
问题4:
围绕马斯克的管理风格有哪些争议?书中具体哪些事件说明了他的“强硬”或“极端”的工作文化?
(提示:弗里蒙特工厂的“生产地狱”,推特裁员等)
问题5:
马斯克对人工智能(AI)的态度是什么?为什么他会同时支持OpenAI和Neuralink,这两个目标似乎相冲突的组织?
(提示:AI作为生存威胁,脑机接口愿景等)
请逐一回答这些问题。我会提供反馈,并补充细节或纠正任何误解!(如果某个问题不清楚,请随时问我。)
查询:
问题1:他父亲的虐待态度使他对他人缺乏同情心。
问题2:Zip2解决了电子地图和在线黄页的问题。X.com解决了在线支付的问题。
问题3:他获得了NASA的合同。特斯拉通过在中国建厂解决了生产问题。
问题4:我不知道。请帮我回答。
问题5:他认为开源技术对于确保AI的安全和开放性是必要的。
答案:你的回答捕捉到了书中的关键点。让我补充细节,纠正一些不准确之处,并为第4和第5题提供进一步的背景:
问题1 — 更正与补充
父亲的影响:
马斯克的父亲Errol确实非常严厉——例如,强迫年轻的Elon跪着数小时的米粒。书中强调,这种情感麻木使马斯克成为一个极其目标导向的人——对他人的痛苦漠不关心,但对他的目标执着。
反作用力:
这并不是说马斯克没有同理心——而是选择性的。例如,他可能对员工冷淡,但会亲自研究医疗设备以解决儿子X的健康问题。
问题2 — 更正与补充
Zip2:
本质上是一个在线黄页+地图导航服务(帮助报纸上线)。马斯克自己编写了许多早期代码,并睡在办公室里。最终,康柏以3.07亿美元收购了Zip2(马斯克获得了2200万美元)。
X.com:
不仅仅是在线支付——这是马斯克尝试创建的全面金融平台(旨在取代银行)。后来与Confinity(PayPal的前身)合并。由于内部冲突,马斯克被排挤出去,但当eBay收购PayPal时,马斯克赚得了1.8亿美元。(注:马斯克后来回购了X.com域名——现在是Twitter母公司名称)。
问题3 — 更正与补充
SpaceX:
2008年,Falcon 1在第四次发射成功(前三次失败耗尽了资金)。紧接着,SpaceX获得了一份价值16亿美元的NASA货物补给合同——这对公司来说是一条生命线。
特斯拉:
2008年,特斯拉通过戴姆勒的5000万美元投资和美国能源部的贷款得以生存。在中国建设Gigafactory(2019年)是在多年之后。最初几年的生存依赖于Model S(2012)的推出和马斯克个人的赌注——出售所有房产来资助特斯拉。
问题4 — 解释:关于其管理风格的争议
“强硬”文化:
在SpaceX/Tesla:马斯克要求员工每周工作80多个小时,甚至在工厂睡觉。“如果你不在这里,你的替代者就会在这里。”
收购Twitter后:他立即解雇了75%的员工,并要求剩余员工签署“强硬承诺”——同意长时间高强度的工作。
极端案例:
在弗里蒙特工厂:在Model 3的“生产地狱”期间,马斯克睡在生产线旁,并曾对员工大喊,称他们“比狗还差”(他后来道歉)。
解雇高管:马斯克曾当场解雇一位特斯拉高级高管,因为他们在PowerPoint演示中的字体大小不够大。
问题5 — 更正与补充
AI威胁理论:
马斯克认为AI可能会摧毁人类(“比核武器更危险”)。因此:
OpenAI:他最初支持它,以促进安全、开源的AI(但由于控制权的争执,他后来离开了)。
Neuralink:他希望通过脑机接口将人类与AI融合——以防止人类落后。
矛盾:
在警告AI风险的同时,马斯克正在推动特斯拉的完全自动驾驶(FSD)技术,并成立了xAI来研究通用人工智能(AGI)。
总体评价:
✅ 你准确地捕捉到了关键事件,但需要加强细节(如时间线和具体数据)。
🔍 推荐进一步研究的领域:马斯克的多线程管理风格(同时运营五家公司)以及他在媒体操纵方面的技能(通过推特治理)。
git clone https://github.com/yourusername/ebook-mcp.git
cd ebook-mcp
uv安装依赖:uv pip install -e .
在开发模式下运行服务器:
uv run mcp dev src/ebook_mcp/main.py
您可以访问http://localhost:5173/进行测试和调试目的 您也可以安装检查器进行测试。
npx @modelcontextprotocol/inspector uv --directory . run src/ebook_mcp/main.py
运行服务器:
uv run src/ebook_mcp/main.py
在Cursor中添加以下配置
"ebook-mcp":{
"command": "uv",
"args": [
"--directory",
"/Users/onebird/github/ebook-mcp/src/ebook_mcp/",
"run",
"main.py"
]
}
# 获取目录中的所有EPUB文件
epub_files = get_all_epub_files("/path/to/books")
# 获取EPUB元数据
metadata = get_metadata("/path/to/book.epub")
# 获取目录
toc = get_toc("/path/to/book.epub")
# 获取特定章节的内容(以Markdown格式)
chapter_content = get_chapter_markdown("/path/to/book.epub", "chapter_id")
# 获取目录中的所有PDF文件
pdf_files = get_all_pdf_files("/path/to/books")
# 获取PDF元数据
metadata = get_pdf_metadata("/path/to/book.pdf")
# 获取目录
toc = get_pdf_toc("/path/to/book.pdf")
# 获取特定页面的内容
page_text = get_pdf_page_text("/path/to/book.pdf", 1)
page_markdown = get_pdf_page_markdown("/path/to/book.pdf", 1)
# 获取特定章节的内容
chapter_content, page_numbers = get_pdf_chapter_content("/path/to/book.pdf", "Chapter 1")
get_all_epub_files(path: str) -> List[str]获取指定目录中的所有EPUB文件。
get_metadata(epub_path: str) -> Dict[str, Union[str, List[str]]]从EPUB文件中获取元数据。
get_toc(epub_path: str) -> List[Tuple[str, str]]从EPUB文件中获取目录。
get_chapter_markdown(epub_path: str, chapter_id: str) -> str以Markdown格式获取章节内容。
get_all_pdf_files(path: str) -> List[str]获取指定目录中的所有PDF文件。
get_pdf_metadata(pdf_path: str) -> Dict[str, Union[str, List[str]]]从PDF文件中获取元数据。
get_pdf_toc(pdf_path: str) -> List[Tuple[str, int]]从PDF文件中获取目录。
get_pdf_page_text(pdf_path: str, page_number: int) -> str获取特定页面的纯文本内容。
get_pdf_page_markdown(pdf_path: str, page_number: int) -> str获取特定页面的Markdown格式内容。
get_pdf_chapter_content(pdf_path: str, chapter_title: str) -> Tuple[str, List[int]]按章节标题获取章节内容及其对应的页码。
主要依赖项包括:
┌────────────────────────────┐
│ Agent 层 │
│ - 翻译策略 │
│ - 风格一致性检查 │
│ - LLM 调用与交互 │
└────────────▲─────────────┘
│ 工具调用
┌────────────┴─────────────┐
│ MCP 工具层 │
│ - 提取章节 │
│ - 写入翻译章节 │
│ - 生成EPUB │
└────────────▲─────────────┘
│ 系统/IO调用
┌────────────┴─────────────┐
│ 系统基础层 │
│ - 文件读取 │
│ - ebooklib 解析 │
│ - 文件路径存储/检查 │
└────────────────────────────┘
我们欢迎Issue和Pull Request!
有关最近更改的详细信息,请参阅CHANGELOG.md。