题库MCP服务器
用于使用IRT元数据管理K-12评估题库的MCP服务器。使用完整的Bloom分类法、难度校准和主题标记构建、组织和搜索试题——所有这些都可以通过Claude的自然语言完成。
什么是MCP?
模型上下文协议 (MCP)是一个开放标准,允许像Claude这样的人工智能助手连接到外部工具和数据源。此服务器使Claude能够直接创建、管理和查询题库,而无需复制粘贴或手动数据输入。
特性
- CRUD问题 --使用完整元数据创建、阅读、更新和删除问题
- 问题类型 --多项选择、真/假、简答题和短文
- 分类学 --对所有6个认知水平的问题进行分类(通过创建记住)
- 校准困难 --连续0.0–1.0刻度,带易/中/硬桶
- IRT元数据 —
discrimination_index,times_used,times_correct,avg_time_seconds - 主题层次结构 --将问题组织成银行内部嵌套的主题
- 灵活的标签 --使用任意标签标记问题以进行跨领域分类
- 搜索和筛选 --按类型、难度范围、Bloom级别、主题、标签、状态或自由文本查询
- 批量激活 --在一次通话中将多个问题从草稿移动到活动状态
- AI建议 --在指定的难度和Bloom的级别上获取主题的问题想法
- 银行统计 --按类型、难度、布鲁姆水平和主题进行详细细分
快速开始
1.克隆并安装
git clone https://github.com/woodstocksoftware/question-bank-mcp.git
cd question-bank-mcp
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt2.配置克劳德桌面
增添 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"question-bank": {
"command": "/path/to/question-bank-mcp/venv/bin/python",
"args": ["/path/to/question-bank-mcp/run_server.py"]
}
}
}然后重新启动Claude Desktop。
3.配置克劳德代码
claude mcp add question-bank /path/to/question-bank-mcp/venv/bin/python /path/to/question-bank-mcp/run_server.py4.开始使用它
问克劳德这样的问题:
“为AP生物学创建题库” “添加细胞呼吸主题” “在分析级别创建一个关于克雷布斯循环的多项选择题” “显示所有标记为‘期中’的难题” “我的题库的统计数据是什么?”
工具参考
题库工具
create_question_bank
为课程或学科领域创建一个新的题库。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | yes | 题库名称 |
subject | string | yes | 学科领域(例如,“生物学”、“代数”) |
description | string | no | 银行描述 |
grade_level | string | 否 | 目标年级(例如,“9-12”、“AP”) |
list_question_banks
列出所有题库及其问题和主题数量。没有参数。
get_bank_statistics
获取题库的详细统计数据,包括按问题类型、难度桶、布鲁姆级别和主题的细分。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
bank_id | string | yes | 题库ID |
主题工具
create_topic
添加一个主题来组织银行内的问题。通过以下方式支持分层嵌套 parent_topic_id.
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
bank_id | string | yes | 题库ID |
name | string | yes | 主题名称 |
description | string | 否 | 主题描述 |
parent_topic_id | string | no | 嵌套的父主题ID |
list_topics
在题库中列出所有主题,并注明问题数量。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
bank_id | string | yes | 题库ID |
提问工具
create_question
创建一个包含完整元数据的新问题。问题开始于 draft 状态。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
bank_id | string | yes | -- | 题库ID |
question_type | string | 是 | -- | multiple_choice, true_false, short_answer,或 essay |
stem | string | 是 | -- | 问题文本 |
correct_answer | string | 是 | -- | 正确答案或量规 |
options | 列表 | 否 | -- | 答案选项(多选) |
explanation | string | 否 | -- | 为什么答案是正确的 |
difficulty | float | 否 | 0.5 | 0.0(容易)到1.0(难) |
bloom_level | string | no | -- | Bloom的分类级别 |
estimated_time_seconds | int | 否 | 60 | 预计答复时间 |
points | int | 否 | 1 | 点值 |
topic_ids | 列表 | 否 | -- | 要链接的主题ID |
tags | 列表 | 无 | -- | 分类标签 |
get_question
通过ID和所有元数据检索问题。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
question_id | string | 是 | -- | 问题ID |
show_answer | bool | 否 | true | 是否包含答案 |
update_question
更新现有问题的任何字段,包括更改其状态。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
question_id | string | yes | 问题ID |
| *(任何问题字段)* | -- | 否 | 要更新的字段 |
delete_question
永久删除问题。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
question_id | string | yes | 问题ID |
search_questions
使用多个条件在银行之间搜索和过滤问题。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
bank_id | string | 否 | -- | 按银行筛选 |
topic_id | string | 否 | -- | 按主题筛选 |
question_type | string | 否 | -- | 按类型筛选 |
bloom_level | string | no | -- | 按Bloom级别筛选 |
difficulty_min | float | 否 | -- | 最小难度 |
difficulty_max | float | 否 | -- | 最大难度 |
status | string | 否 | -- | draft, active,或 archived |
tags | list | 否 | -- | 按标签筛选(任何匹配项) |
search_text | string | no | -- | 词干文本搜索和解释 |
limit | int | 否 | 20 | 最大结果 |
activate_questions
批量激活问题,将其从 draft 到 active 状态。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
question_ids | list | yes | 要激活的问题ID列表 |
suggest_questions
根据主题和限制,为要创建的新问题提供人工智能友好的建议。
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
bank_id | string | yes | -- | 题库ID |
topic | string | 是 | -- | 主题或学习目标 |
count | int | 否 | 5 | 建议数量 |
difficulty | string | 否 | "mixed" | easy, medium, hard,或 mixed |
bloom_levels | 列出 | 否 | 所有 | 布鲁姆的目标水平 |
资源
| URI | 描述 |
|---|---|
questionbank://blooms-taxonomy | 布鲁姆分类学参考——6个级别,包括动作动词、示例问题和写作技巧 |
questionbank://question-types | 问题类型指南——何时使用每种类型,最佳实践 |
问题模式
领域
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
id | string | auto | UUID,带 q- 前缀 |
bank_id | string | -- | 父题库 |
question_type | 枚举 | -- | multiple_choice, true_false, short_answer, essay |
stem | string | -- | 问题文本 |
options | 列表 | -- | 答案选项(仅限多选) |
correct_answer | string | -- | 答案或量规 |
explanation | string | -- | 为什么答案是正确的 |
difficulty | 浮子 | 0.5 | 0.0(容易)到1.0(难) |
bloom_level | 枚举 | -- | remember, understand, apply, analyze, evaluate, create |
estimated_time_seconds | int | 60 | 预期应答时间 |
points | int | 1 | 点值 |
status | enum | draft | draft, active, archived |
times_used | int | 0 | 使用计数器 |
times_correct | int | 0 | 正确响应计数器 |
avg_time_seconds | float | -- | 平均响应时间 |
discrimination_index | float | -- | IRT判别参数 |
created_at | 时间戳 | 现在 | 创建时间 |
updated_at | 时间戳 | 现在 | 上次更新时间 |
难度Buckets
| 桶 | 范围 | 描述 |
|---|---|---|
| 简单 | 0.0–0.3 | 回忆和基本理解 |
| 中等 | 0.3-0.7 | 应用与分析 |
| 硬 | 0.7-1.0 | 评估和综合 |
布鲁姆分类水平
| 级别 | 动词示例 |
|---|---|
| 记住 | 定义、列出、命名、识别、回忆 |
| 理解 | 描述、解释、总结、解释 |
| 应用 | 解决、使用、演示、计算 |
| 分析 | 比较、对比、检查、区分 |
| 评估 | 评估、判断、批评、辩护 |
| 创建 | 设计、构建、开发、制定 |
使用示例
建立数学题库
“为10-11年级创建一个名为‘代数2’的题库” “添加多项式、二次方程和指数函数的主题” “在应用级别创建3个关于分解多项式的多项选择题,难度0.4-0.6” “激活我们刚才创建的所有问题”
按难度和布鲁姆级别搜索
“查找评估或创建级别的所有难题” “搜索难度在0.7以上的关于二次曲线的问题” “显示所有标记为“期末考试”的草稿问题”
获取差距建议
“我的代数2库的统计数据是什么?” “建议5个关于指数增长的简单记忆级问题” “我们需要更多的分析级问题——为二次方程提出一些建议”
建筑
┌─────────────────────────────────────────────┐
│ Claude Desktop / Code │
│ (MCP Client) │
└──────────────────┬──────────────────────────┘
│ stdio
┌──────────────────▼──────────────────────────┐
│ run_server.py │
│ └─ src/question_bank/server.py │
│ ├─ 12 tools (@mcp.tool) │
│ ├─ 2 resources (@mcp.resource) │
│ └─ Markdown-formatted responses │
└──────────────────┬──────────────────────────┘
│
┌──────────────────▼──────────────────────────┐
│ src/question_bank/database.py │
│ ├─ question_banks (top-level containers)│
│ ├─ topics (hierarchical) │
│ ├─ questions (content + IRT) │
│ ├─ question_topics (many-to-many) │
│ └─ question_tags (many-to-many) │
└──────────────────┬──────────────────────────┘
│
data/question_bank.db (SQLite)QTI 3.0兼容性
问题模式的设计如下 QTI 3.0 考虑兼容性。数据模型支持QTI导出所需的核心字段(问题类型、正确答案、选项、元数据),但导入/导出尚未实现。这是未来计划中的增强功能。
测试
目前还没有自动化测试套件。要验证数据库层是否正常工作,请执行以下操作:
python -m src.question_bank.database要确认服务器启动,请执行以下操作:
python run_server.py服务器在stdio传输上运行,因此它看起来会挂起(它正在等待MCP客户端输入)。按 Ctrl+C 停止。
贡献
欢迎投稿!该项目尚处于早期开发阶段。需要帮助的领域:
- 自动化测试(pytest)
- QTI 3.0导入/导出
- 其他问题类型
- CI/CD管道
许可证
______________________________________________________________________
由...建造 吉姆威廉斯 |
