使用说明
MCP服务器学习
一种模型上下文协议(MCP)服务器,旨在帮助完成学习和教育任务。包括闪卡生成、Zotero集成、黑曜石连接和数学验证工具。
特性
闪存卡服务器
闪卡服务器提供用于创建、管理和导出各种格式的闪卡的工具:
- 多种卡类型:支持前后卡、完形填空删除卡和图表卡
- LaTeX支持:生成支持数学符号的LaTeX格式的抽认卡
- Anki集成:使用AnkiConnect插件直接上传到Anki
- HTML 预览:生成精美的抽认卡HTML预览
- 图表支持:处理ASCII艺术、TikZ图表和流程图
数学验证服务器
用于验证数学表达式和证明的综合服务器:
- LaTeX输入:对LaTeX数学符号的原生支持
- 多步验证:逐步验证完整的证明
- 微积分支持:导数、积分、极限和级数
- 线性代数:矩阵运算和向量空间
- 表达式简化:通过逐步解释自动简化复杂表达式
- 身份检查:验证数学恒等式(毕达哥拉斯、三角函数等)
安装
此项目使用 紫外线 用于依赖性管理。
# Clone the repository
git clone <repository-url>
cd mcp-server-learning
# Install dependencies
uv sync
# Install in development mode
uv pip install -e .
用法
运行服务器
为每台服务器提供FastMCP入口点:
# Flashcards / Anki
uv run fastmcp-flashcard-server
# Zotero
export ZOTERO_API_KEY=... \
ZOTERO_LIBRARY_ID=... \
ZOTERO_LIBRARY_TYPE=user # or group
uv run fastmcp-zotero-server
# Obsidian
export OBSIDIAN_VAULT_PATH="/path/to/your/Obsidian/Vault"
uv run fastmcp-obsidian-server
# Mathematical Verification
uv run fastmcp-math-server
可用工具
create_flashcards
将文本内容转换为LaTeX闪卡。
参数:
content(必填):要转换的文本内容card_type:“前-后”或“完形填空”(默认:“前后”)title:卡片组的标题(默认:“抽认卡”)full_document:是否返回完整的LaTeX文档(默认值:true)
示例输入格式:
Q: What is the capital of France?
A: Paris
---
What is 2 + 2?
4
对于完形填空卡:
The capital of {{France}} is {{Paris}}.
create_single_card
制作一张抽认卡。
参数:
- 对于前后卡:
front,back - 对于完形填空卡:
cloze_text card_type:“前后”或“完形填空”
create_diagram_card
用图表制作一张抽认卡。
参数:
diagram:图表内容explanation:图表说明diagram_type:“ascii”、“tikz”或“流程图”
upload_to_anki
将抽认卡直接上传到Anki。
参数:
content:要转换和上传的内容card_type:要创建的卡片类型deck_name:Anki牌组名称(默认:“MCP生成的卡”)tags:要添加的标签数组anki_api_key:AnkiConnect的可选API密钥
check_anki_connection
检查与Anki的连接,并列出可用的甲板/型号。
preview_cards
生成抽认卡的HTML预览。
参数:
content:要预览的内容card_type:卡片类型title:预览标题tags:要显示的标签
Zotero集成工具
connect_zotero
使用Web API或本地数据库连接到您的Zotero库。
参数:
api_key:Zotero Web API密钥(本地访问可选)user_id:个人图书馆的Zotero用户IDgroup_id:组库的Zotero组IDlocal_profile_path:本地Zotero配置文件的路径(可选)prefer_local:是否更喜欢本地数据库而不是Web API
search_zotero
在您连接的Zotero库中搜索项目。
参数:
query:搜索词limit:最大结果数(默认值:20)
get_zotero_collections
列出Zotero库中的所有收藏。
create_flashcards_from_zotero
从Zotero的物品或收藏品中生成抽认卡。
参数:
item_keys:要使用的特定Zotero项目密钥collection_id:用于生成卡片的集合IDcard_types:要创建的卡片类型(citation,summary,definition)citation_style:引文格式(apa)
Zotero MCP服务器
一个FastMCP服务器,用于使用pyzotero包与Zotero库进行交互。
可用工具
search_zotero_items
在Zotero库中搜索项目。
参数:
query(必填):搜索词limit:最大结果(默认值:50)item_type:按类型筛选(例如,“书籍”、“日记文章”)
get_zotero_item
获取特定项目的详细信息。
参数:
item_key(必填):Zotero项目密钥
get_item_notes
获取与项目关联的所有笔记。
参数:
item_key(必填):Zotero项目密钥
list_zotero_collections
列出图书馆的所有藏书。
get_collection_items
从特定收藏中获取物品。
参数:
collection_key(必填):收集密钥limit:最大结果(默认值:50)
create_zotero_item
在库中创建新项目。
参数:
item_type(必填):项目类型(“书籍”、“期刊文章”等)title(必填):项目标题creators:创建者对象数组date:出版日期url:项目URLabstract:摘要/总结tags:标记字符串数组extra_fields:其他特定类型的字段
create_item_note
向现有项目添加注释。
参数:
parent_item_key(必填):父项的密钥note_content(必填):HTML格式的笔记内容
add_item_to_collection
将项目添加到集合中。
参数:
item_key(必填):项目密钥collection_key(必填):收集密钥
get_item_templates
获取用于创建不同项目类型的模板。
黑曜石MCP服务器
用于与黑曜石金库和降价笔记交互的FastMCP服务器。
可用工具
get_vault_stats
获取有关黑曜石金库的全面统计数据。
list_vault_notes
列出vault中的所有笔记,并可选择分页。
参数:
limit:可退回的最大钞票数offset:要跳过的笔记数(用于分页)refresh_cache:是否刷新笔记缓存
search_obsidian_notes
按内容、标题或标签搜索笔记。
参数:
query(必填):搜索词search_in:要搜索的字段(内容、标题、标签)limit:最大结果数
get_obsidian_note
获取特定笔记的详细信息。
参数:
note_name(必填):注释名称(不带.md扩展名)
get_notes_by_tag
获取所有带有特定标签的笔记。
参数:
tag(必填):要搜索的标签
get_note_backlinks
查找链接到特定笔记的所有笔记。
参数:
note_name(必填):要查找反向链接的注释名称
get_orphaned_notes
查找没有传入或传出链接的笔记。
get_note_links
从特定笔记中获取所有维基链接。
参数:
note_name(必填):要从中获取链接的注释的名称
extract_note_headers
从笔记中提取结构化标题。
参数:
note_name(必填):要从中提取标题的注释名称
extract_note_blocks
从笔记中提取内容块(段落、列表、引号、代码)。
参数:
note_name(必填):从中提取块的注释名称block_types:要提取的块类型(段落、列表、引用、代码、标题)
get_notes_for_flashcards
从笔记中提取适合抽认卡生成的内容。
参数:
note_names:要处理的特定注释的名称tag_filter:仅处理带有此标签的备注content_types:要提取的内容类型(标题、定义、列表、引号)
黑曜石集成工具
connect_obsidian
连接到黑曜石保险库。
参数:
vault_path:黑曜石保管库目录的路径
search_obsidian
在连接的黑曜石保险库中搜索笔记。
参数:
query:搜索词search_in:要搜索的字段(content,title,tags)limit:最大结果数(默认值:20)
get_obsidian_vault_stats
获取黑曜石金库的统计数据(钞票数量、标签等)。
create_flashcards_from_obsidian
从黑曜石笔记中生成抽认卡。
参数:
note_names:要处理的特定注释名称tag_filter:仅处理带有此标签的备注content_types:要提取的内容类型(headers,definitions,lists,quotes)card_type:要生成的抽认卡类型(front-back,cloze)
数学验证MCP服务器
FastMCP服务器,用于使用SymPy验证数学表达式和多步证明。专注于微积分、分析和线性代数,支持LaTeX输入。
可用工具
verify_step
用适当的理由验证单个数学步骤。
参数:
expression(必填):LaTeX格式的数学表达式(例如。,\frac{d}{dx}(x^2))expected_result(必填):LaTeX格式的预期结果(例如。,2x)assumptions:可选的假设列表(例如。,["x is real"])operation:操作类型-"equality","derivative","integral",或"limit"
示例:
verify_step("x^2 + 2x + 1", "(x+1)^2", operation="equality")
verify_step("x^2", "2x", operation="derivative")
verify_proof
验证一个多步骤的数学证明。
参数:
steps(必填):验证步骤列表。每个步骤应包含:expression:数学表达式(LaTeX)justification:此步骤的原因result(可选):此步骤后的预期结果
assumptions:关于变量的可选假设列表
例子:
steps = [
{
"expression": r"\int x dx",
"result": r"\frac{x^2}{2} + C",
"justification": "Power rule for integration"
},
{
"expression": r"\frac{d}{dx}(\frac{x^2}{2} + C)",
"result": "x",
"justification": "Differentiate with respect to x"
}
]
simplify_expression
简化数学表达式,并可选择显示步骤。
参数:
expression(必填):LaTeX格式的数学表达式show_steps:是否显示中间简化步骤(默认值:true)
例子:
simplify_expression(r"\frac{x^2 - 1}{x - 1}", show_steps=True)
verify_equivalence
验证两个数学表达式是否等价。
参数:
expr1(必填):LaTeX格式的第一个表达式expr2(必填):LaTeX格式的第二个表达式assumptions:关于变量的可选假设列表
例子:
verify_equivalence("x^2 - 1", "(x-1)(x+1)")
check_identity
检查数学恒等式是否成立。
参数:
identity_expr(必填):要检查的身份(例如。,sin(x)^2 + cos(x)^2 - 1)variable:标识中的变量(默认值:'x')test_values:要测试的特定值的可选列表
例子:
check_identity(r"\sin^2(x) + \cos^2(x) - 1", variable="x")
verify_derivative
验证导数计算。
参数:
expression(必填):用于区分的表达式(LaTeX格式)variable(必填):用于区分的变量expected_derivative(必填):预期导数结果(LaTeX格式)
例子:
verify_derivative(r"\sin(x) \cos(x)", "x", r"\cos^2(x) - \sin^2(x)")
verify_integral
验证积分计算。
参数:
expression(必填):要集成的表达式(LaTeX格式)variable(必填):要整合的变量expected_integral(必填):预期积分结果(LaTeX格式)is_definite:这是否是一个定积分(默认值:false)lower_limit:定积分的下限(LaTeX格式或数字)upper_limit:定积分的上限(LaTeX格式或数字)
示例:
verify_integral("x", "x", r"\frac{x^2}{2} + C", is_definite=False)
verify_integral("x", "x", r"\frac{1}{2}", is_definite=True, lower_limit="0", upper_limit="1")
LaTeX输入格式
服务器接受标准的LaTeX数学符号:
- 内联数学:
x^2,\frac{1}{2},\sin(x) - 函数:
\sin(x),\cos(x),\ln(x),\exp(x) - 分数:
\frac{numerator}{denominator} - 权力:
x^2,e^{x} - 希腊字母:
\alpha,\beta,\pi - 特殊符号:
\cdot(乘法),\int(积分),\frac{d}{dx}(衍生品)
集成设置
Anki集成
要使用Anki集成:
- 安装 AnkiConnect Anki中的插件
- 启用插件启动Anki
- 使用
upload_to_anki或check_anki_connection工具
Zotero集成
要使用Zotero集成:
选项1:本地数据库(推荐)
- 安装Zotero桌面应用程序
- 使用
connect_zotero具有本地访问权限的工具 - 无需额外设置
选项2:Web API
- 从获取Zotero API密钥 zotero.org/settings/keys
- 从您的Zotero个人资料URL中查找您的用户ID
- 使用
connect_zotero具有API证书的工具
黑曜石融合
要使用黑曜石集成:
- 找到您的黑曜石保险库目录
- 使用
connect_obsidian具有vault路径的工具 - 连接器将自动扫描并索引您的笔记
发展
运行测试
uv run pytest
代码格式化
uv run black src/
uv run isort src/
类型检查
uv run mypy src/
使用Claude Desktop进行配置
闪存卡服务器
添加到您的Claude Desktop配置中:
{
"mcpServers": {
"learning": {
"command": "uv",
"args": ["run", "fastmcp-flashcard-server"],
"cwd": "/path/to/mcp-server-learning"
}
}
}
Zotero服务器
配置Zotero FastMCP服务器:
{
"mcpServers": {
"zotero": {
"command": "uv",
"args": ["run", "fastmcp-zotero-server"],
"cwd": "/path/to/mcp-server-learning",
"env": {
"ZOTERO_API_KEY": "your-zotero-api-key",
"ZOTERO_LIBRARY_ID": "your-library-id",
"ZOTERO_LIBRARY_TYPE": "user"
}
}
}
}
黑曜石服务器
配置黑曜石FastMCP服务器:
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": ["run", "fastmcp-obsidian-server"],
"cwd": "/path/to/mcp-server-learning",
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/your/Obsidian/Vault"
}
}
}
}
Zotero环境变量
您需要为Zotero服务器设置以下环境变量:
- ZOTERO_API_键:您的Zotero Web API密钥(从 zotero.org/settings/keys)
- ZOTERO_LIBRARY_ID:您的Zotero库ID
- 对于个人图书馆:您的用户ID(在您的Zotero个人资料URL中找到)
- 对于组库:组ID
- ZOTERO_LIBRARY_TYPE:个人库为“用户”,组库为“组”
获取您的Zotero证书
- API密钥首选 zotero.org/settings/keys 并创建新的私钥
- 用户ID首选 zotero.org/settings/keys -您的用户ID显示在顶部
- 组ID:对于组库,ID位于zotero.org上的组URL中
黑曜石服务器
对于独立的Obsidian服务器,请将以下内容添加到您的Claude Desktop配置中:
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": ["run", "obsidian-mcp-server"],
"cwd": "/path/to/mcp-server-learning",
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}
黑曜石环境变量
您需要为Obsidian服务器设置此环境变量:
- 黑曜石:黑曜石保管库目录的完整路径(包含.md文件和黑曜岩文件夹的文件夹)
数学验证服务器
在Claude Desktop中配置数学验证服务器:
{
"mcpServers": {
"math-verification": {
"command": "uv",
"args": ["run", "fastmcp-math-server"],
"cwd": "/path/to/mcp-server-learning"
}
}
}
此服务器不需要环境变量,安装后即可立即使用。
使用ChatGPT桌面进行配置
ChatGPT桌面需要远程HTTPS MCP端点。不直接支持本地MCP服务器,因此请运行 您的计算机上的套件,并通过隧道或云部署将其公开。
选择曝光模式
| 选项 | 安装工作 | URL稳定性 | 最适合 |
|---|---|---|---|
| ngrok快速通道 | 非常低 | 重启时的变化 | 快速测试 |
| ngrok保留域(付费) | 低 | 稳定 | 简单管理的稳定URL |
| Cloudflare快速隧道 | 低 | 重启时的更改 | 无需DNS设置即可快速试用 |
| Cloudflare命名隧道+DNS | 中等(一次性) | 稳定 | 日常使用(推荐) |
| 始终在云主机上(铁路/飞行/渲染/VPS) | 中高 | 稳定 | 笔记本电脑关闭时端点保持正常 |
推荐:Cloudflare命名隧道+自定义子域
如果您计划使用Zotero或Obsidian,请设置环境变量:
- 佐特罗:
ZOTERO_API_KEY,ZOTERO_LIBRARY_ID,ZOTERO_LIBRARY_TYPE - 黑曜石:
OBSIDIAN_VAULT_PATH
- 在端口8000本地运行套件:
./scripts/run_learning_suite.sh
- 安装并验证cloudflared:
brew install cloudflared
cloudflared tunnel login
- 创建一个命名隧道:
cloudflared tunnel create learning-suite-mcp
- 从模板创建Cloudflare配置并填充占位符:
mkdir -p ~/.cloudflared
cp scripts/cloudflared-config.example.yml ~/.cloudflared/config.yml
- 创建指向稳定主机名的DNS路由:
cloudflared tunnel route dns learning-suite-mcp mcp.<your-domain>
- 运行隧道:
cloudflared tunnel --config ~/.cloudflared/config.yml run learning-suite-mcp
- 使隧道在重新启动后保持持久:
sudo cloudflared service install
- 验证公共终结点:
./scripts/verify_remote_mcp.sh https://mcp.<your-domain>/mcp/
ChatGPT桌面MCP设置
在ChatGPT桌面中添加新的MCP服务器:
- 网址:
https://mcp.<your-domain>/mcp/ - 认证:
None - 姓名:
learning-suite(或您喜欢的任何标签)
在ChatGPT URL中使用尾随斜线以避免额外的重定向跳转。
工具按前缀命名: flashcard_*, zotero_*, obsidian_*, math_*.
快速替代方案
ngrok快速隧道
./scripts/run_learning_suite.sh
ngrok http 8000
用途: https://<ngrok-host>/mcp/
ngrok保留域名(付费)
ngrok http --url=<reserved-subdomain>.ngrok.app 8000
用途: https://<reserved-subdomain>.ngrok.app/mcp/
Cloudflare快速隧道(临时URL)
cloudflared tunnel --url http://localhost:8000
用途: https://<random>.trycloudflare.com/mcp/
验证检查表
- 本地服务器启动并记录
Starting Learning MCP Suite ... /mcp. - 远程URL通过隧道响应(
verify_remote_mcp.sh成功)。 - ChatGPT桌面列出前缀工具(
flashcard_*,zotero_*,obsidian_*,math_*). - 停止本地服务器会导致预期故障;重新启动可恢复工具访问权限。
贡献
欢迎投稿!请随时提交pull请求或打开bug和功能请求的问题。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
使用示例
基本闪存卡创建
# Create flashcards from text
create_flashcards(content="Q: What is Python? A: A programming language", card_type="front-back")
# Create cloze deletion cards
create_flashcards(content="Python is a {{programming language}} used for {{web development}}.", card_type="cloze")
未来功能
- 高级引用风格(MLA、芝加哥、IEEE)
- 批量处理大型收款
- 空间重复调度集成
- Zotero与黑曜石的交叉参考检测
- 支持多媒体闪卡
- 导出到其他闪卡平台
- 协作学习功能
