学习辅助协议服务器

一个专为学习任务设计的模型上下文协议(MCP)服务器,提供抽认卡生成、Zotero集成、Obsidian连接和数学验证工具。

  • by xstraven
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 davhin/mcp-server-learning

使用说明

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用户ID
  • group_id:组库的Zotero组ID
  • local_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:用于生成卡片的集合ID
  • card_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:项目URL
  • abstract:摘要/总结
  • 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集成:

  1. 安装 AnkiConnect Anki中的插件
  2. 启用插件启动Anki
  3. 使用 upload_to_anki 或 check_anki_connection 工具

Zotero集成

要使用Zotero集成:

选项1:本地数据库(推荐)

  1. 安装Zotero桌面应用程序
  2. 使用 connect_zotero 具有本地访问权限的工具
  3. 无需额外设置

选项2:Web API

  1. 从获取Zotero API密钥 zotero.org/settings/keys
  2. 从您的Zotero个人资料URL中查找您的用户ID
  3. 使用 connect_zotero 具有API证书的工具

黑曜石融合

要使用黑曜石集成:

  1. 找到您的黑曜石保险库目录
  2. 使用 connect_obsidian 具有vault路径的工具
  3. 连接器将自动扫描并索引您的笔记

发展

运行测试

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证书

  1. API密钥首选 zotero.org/settings/keys 并创建新的私钥
  2. 用户ID首选 zotero.org/settings/keys -您的用户ID显示在顶部
  3. 组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
  1. 在端口8000本地运行套件:
./scripts/run_learning_suite.sh
  1. 安装并验证cloudflared:
brew install cloudflared
cloudflared tunnel login
  1. 创建一个命名隧道:
cloudflared tunnel create learning-suite-mcp
  1. 从模板创建Cloudflare配置并填充占位符:
mkdir -p ~/.cloudflared
cp scripts/cloudflared-config.example.yml ~/.cloudflared/config.yml
  1. 创建指向稳定主机名的DNS路由:
cloudflared tunnel route dns learning-suite-mcp mcp.<your-domain>
  1. 运行隧道:
cloudflared tunnel --config ~/.cloudflared/config.yml run learning-suite-mcp
  1. 使隧道在重新启动后保持持久:
sudo cloudflared service install
  1. 验证公共终结点:
./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/

验证检查表

  1. 本地服务器启动并记录 Starting Learning MCP Suite ... /mcp.
  2. 远程URL通过隧道响应(verify_remote_mcp.sh 成功)。
  3. ChatGPT桌面列出前缀工具(flashcard_*, zotero_*, obsidian_*, math_*).
  4. 停止本地服务器会导致预期故障;重新启动可恢复工具访问权限。

贡献

欢迎投稿!请随时提交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与黑曜石的交叉参考检测
  • 支持多媒体闪卡
  • 导出到其他闪卡平台
  • 协作学习功能