Question Bank MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Question Bank MCP ServerCreate a question bank for AP Biology"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Question Bank MCP Server
An MCP server for managing K-12 assessment question banks with IRT metadata. Build, organize, and search test questions with full Bloom's taxonomy classification, difficulty calibration, and topic tagging — all through natural language with Claude.
What is MCP?
Model Context Protocol (MCP) is an open standard that lets AI assistants like Claude connect to external tools and data sources. This server gives Claude the ability to create, manage, and query question banks directly — no copy-pasting or manual data entry.
Related MCP server: DocuMCP
Features
Question CRUD — Create, read, update, and delete questions with full metadata
Question types — Multiple choice, true/false, short answer, and essay
Bloom's taxonomy — Classify questions across all 6 cognitive levels (remember through create)
Difficulty calibration — Continuous 0.0–1.0 scale with easy/medium/hard bucketing
IRT metadata —
discrimination_index,times_used,times_correct,avg_time_secondsTopic hierarchy — Organize questions into nested topics within banks
Flexible tagging — Tag questions with arbitrary labels for cross-cutting categorization
Search and filter — Query by type, difficulty range, Bloom's level, topic, tags, status, or free text
Bulk activation — Move multiple questions from draft to active in one call
AI suggestions — Get question ideas for a topic at specified difficulty and Bloom's levels
Bank statistics — Detailed breakdowns by type, difficulty, Bloom's level, and topic
Quick Start
1. Clone and install
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. Configure Claude Desktop
Add to ~/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"]
}
}
}Then restart Claude Desktop.
3. Configure Claude Code
claude mcp add question-bank /path/to/question-bank-mcp/venv/bin/python /path/to/question-bank-mcp/run_server.py4. Start using it
Ask Claude things like:
"Create a question bank for AP Biology"
"Add a topic for Cellular Respiration"
"Create a multiple choice question about the Krebs cycle at the Analyze level"
"Show me all hard questions tagged as 'midterm'"
"What are the statistics for my question bank?"
Tool Reference
Question Bank Tools
create_question_bank
Create a new question bank for a course or subject area.
Parameter | Type | Required | Description |
| string | yes | Name of the question bank |
| string | yes | Subject area (e.g., "Biology", "Algebra") |
| string | no | Description of the bank |
| string | no | Target grade level (e.g., "9-12", "AP") |
list_question_banks
List all question banks with their question and topic counts. No parameters.
get_bank_statistics
Get detailed statistics for a question bank, including breakdowns by question type, difficulty bucket, Bloom's level, and topic.
Parameter | Type | Required | Description |
| string | yes | The question bank ID |
Topic Tools
create_topic
Add a topic to organize questions within a bank. Supports hierarchical nesting via parent_topic_id.
Parameter | Type | Required | Description |
| string | yes | The question bank ID |
| string | yes | Topic name |
| string | no | Topic description |
| string | no | Parent topic ID for nesting |
list_topics
List all topics in a question bank with question counts.
Parameter | Type | Required | Description |
| string | yes | The question bank ID |
Question Tools
create_question
Create a new question with full metadata. Questions start in draft status.
Parameter | Type | Required | Default | Description |
| string | yes | — | The question bank ID |
| string | yes | — |
|
| string | yes | — | The question text |
| string | yes | — | Correct answer or rubric |
| list | no | — | Answer choices (for multiple choice) |
| string | no | — | Why the answer is correct |
| float | no |
| 0.0 (easy) to 1.0 (hard) |
| string | no | — | Bloom's taxonomy level |
| int | no |
| Expected time to answer |
| int | no |
| Point value |
| list | no | — | Topic IDs to link |
| list | no | — | Categorization tags |
get_question
Retrieve a question by ID with all metadata.
Parameter | Type | Required | Default | Description |
| string | yes | — | The question ID |
| bool | no |
| Whether to include the answer |
update_question
Update any field on an existing question, including changing its status.
Parameter | Type | Required | Description |
| string | yes | The question ID |
(any question field) | — | no | Fields to update |
delete_question
Permanently delete a question.
Parameter | Type | Required | Description |
| string | yes | The question ID |
search_questions
Search and filter questions across banks with multiple criteria.
Parameter | Type | Required | Default | Description |
| string | no | — | Filter by bank |
| string | no | — | Filter by topic |
| string | no | — | Filter by type |
| string | no | — | Filter by Bloom's level |
| float | no | — | Minimum difficulty |
| float | no | — | Maximum difficulty |
| string | no | — |
|
| list | no | — | Filter by tags (any match) |
| string | no | — | Text search in stem and explanation |
| int | no |
| Maximum results |
activate_questions
Bulk-activate questions, moving them from draft to active status.
Parameter | Type | Required | Description |
| list | yes | List of question IDs to activate |
suggest_questions
Get AI-friendly suggestions for new questions to create, based on topic and constraints.
Parameter | Type | Required | Default | Description |
| string | yes | — | The question bank ID |
| string | yes | — | Topic or learning objective |
| int | no |
| Number of suggestions |
| string | no |
|
|
| list | no | all | Bloom's levels to target |
Resources
URI | Description |
| Bloom's Taxonomy reference — 6 levels with action verbs, example questions, and writing tips |
| Question type guide — when to use each type, best practices |
Question Schema
Fields
Field | Type | Default | Description |
| string | auto | UUID with |
| string | — | Parent question bank |
| enum | — |
|
| string | — | The question text |
| list | — | Answer choices (multiple choice only) |
| string | — | Answer or rubric |
| string | — | Why the answer is correct |
| float |
| 0.0 (easy) to 1.0 (hard) |
| enum | — |
|
| int |
| Expected answer time |
| int |
| Point value |
| enum |
|
|
| int |
| Usage counter |
| int |
| Correct response counter |
| float | — | Average response time |
| float | — | IRT discrimination parameter |
| timestamp | now | Creation time |
| timestamp | now | Last update time |
Difficulty Buckets
Bucket | Range | Description |
Easy | 0.0 – 0.3 | Recall and basic comprehension |
Medium | 0.3 – 0.7 | Application and analysis |
Hard | 0.7 – 1.0 | Evaluation and synthesis |
Bloom's Taxonomy Levels
Level | Example Verbs |
Remember | define, list, name, identify, recall |
Understand | describe, explain, summarize, interpret |
Apply | solve, use, demonstrate, calculate |
Analyze | compare, contrast, examine, differentiate |
Evaluate | evaluate, judge, critique, defend |
Create | design, construct, develop, formulate |
Usage Examples
Build a math question bank
"Create a question bank called 'Algebra 2' for grades 10-11"
"Add topics for Polynomials, Quadratic Equations, and Exponential Functions"
"Create 3 multiple choice questions about factoring polynomials at the Apply level, difficulty 0.4–0.6"
"Activate all the questions we just created"
Search by difficulty and Bloom's level
"Find all hard questions at the Evaluate or Create level"
"Search for questions about quadratics with difficulty above 0.7"
"Show me all draft questions tagged 'final-exam'"
Get suggestions for gaps
"What are the statistics for my Algebra 2 bank?"
"Suggest 5 easy Remember-level questions about exponential growth"
"We need more Analyze-level questions — suggest some for Quadratic Equations"
Architecture
┌─────────────────────────────────────────────┐
│ 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 Compatibility
The question schema is designed with QTI 3.0 compatibility in mind. The data model supports the core fields needed for QTI export (question types, correct answers, options, metadata), but import/export is not yet implemented. This is a planned future enhancement.
Testing
No automated test suite yet. To verify the database layer works correctly:
python -m src.question_bank.databaseTo confirm the server starts:
python run_server.pyThe server runs on stdio transport, so it will appear to hang (it's waiting for MCP client input). Press Ctrl+C to stop.
Contributing
Contributions are welcome! This project is in early development. Areas that could use help:
Automated tests (pytest)
QTI 3.0 import/export
Additional question types
CI/CD pipeline
License
Built by Jim Williams | GitHub
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/woodstocksoftware/question-bank-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server