MCP server for learning tools including flashcard generation, Zotero library management, Obsidian vault integration, and mathematical expression verification
The Learning MCP Suite presents 35 tools across four domains (flashcard/Anki, Zotero, Obsidian, math verification). Tool naming is consistently verb-based and clear (flashcard_create_cards, zotero_search_items, obsidian_list_notes, math_verify_equivalence). Descriptions are present for all tools and generally explain purpose and prerequisites. However, parameter schemas show critical gaps: many parameters lack formal type constraints (enums for restricted choices), and output schemas are not visible in the code sample. Error handling is mentioned conceptually (AnkiConnector includes try-catch blocks) but recovery guidance in error messages is not demonstrated. The codebase shows good practices (input validation setup, timeout handling, secret injection via API key params, though this is a security concern), but the provided sample is incomplete. Overall, the server exhibits foundational quality with room for improvement in schema completeness and output structure documentation.
Verify that Anki is running and AnkiConnect addon is accessible
Create spaced-repetition flashcards from study material with automatic LaTeX to MathJax conversion for Anki compatibility
Delete Anki notes by their IDs
Move flashcards to a different Anki deck
Preview generated flashcards before uploading to Anki without committing them
Search for existing Anki cards by query string
Synchronize Anki collection with AnkiWeb
Output schemas not visible in code; responses are described in prose (success/data/message/error structure) but not formally documented with field types and nesting for LLM parsing
Parameters 'style', 'item_type', 'search_in' lack explicit enum constraints in schema; descriptions mention allowed values but JSON Schema enums are not visible, forcing LLMs to guess at valid options
No per-item success/failure reporting for batch operations (flashcard_upload_cards, flashcard_delete_notes); if one item fails, agent has no way to know which succeeded and must retry all
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 63 | - | v1 |
Update an existing Anki note's content and tags
Upload previously created flashcards to Anki deck
Check if a mathematical identity holds by verifying both sides are equal
Simplify a mathematical expression with detailed step-by-step reduction
Verify a derivative computation. Compares the computed derivative against expected result
Verify if two mathematical expressions are equivalent by comparing them symbolically
Verify an integral computation. For indefinite integrals, compares derivatives; for definite integrals, compares results directly
Validate a multi-step mathematical proof by checking each step's logical validity
Extract all block references (^blockid) from a note for granular content linking
Extract all headers from a note and return them as a hierarchical structure for navigation and content extraction
Find all notes that contain a [[wikilink]] to the specified note. Useful for discovering related content and knowledge connections
Extract content from a note optimized for flashcard generation, removing boilerplate and formatting for question-answer pairs
Retrieve full content and metadata for a specific Obsidian note, including markdown body, YAML frontmatter, wikilinks, headers, and content blocks
Get all outgoing [[wikilinks]] from a specific note. Shows what other notes this note references
Get all notes with a specific tag (from frontmatter or inline #tags). Case-insensitive matching, with or without the # prefix
Find notes that have no incoming or outgoing [[wikilinks]]. These may need to be connected to the rest of the knowledge graph
Get statistics about the Obsidian vault: total note count, all tags, note types, and total size
List all notes in the vault, sorted by modification date (newest first). Supports pagination for large vaults
Search for notes in the vault by content, title, or tags. Uses case-insensitive substring matching
Add an item to a Zotero collection
Create a new bibliographic item in the Zotero library
Create a note attached to an existing Zotero item
Get all items in a specific Zotero collection
Get full details for a specific Zotero item including title, abstract, authors, date, URL, and DOI
Get all notes attached to a Zotero item
Get available item templates for creating new Zotero items
List all collections (folders) in the Zotero library
Search for items in the Zotero library by title, author, or content
Destructive operations (flashcard_delete_notes, zotero tools that delete) lack confirmation/dry-run pattern; agents can permanently delete without user approval
Error messages in AnkiConnector include generic 'Request failed' strings; should return specific, actionable recovery steps (e.g., 'Anki not running on localhost:8765, try restarting Anki or check AnkiConnect settings')
Parameters like 'assumptions' (math_verify_equivalence) lack detailed format specification; unclear if 'x is real' is the canonical format or if 'x ∈ ℝ' or other syntaxes are valid
Response chaining incomplete: Anki search (flashcard_search_notes) returns query results but unclear if note_id is always present in results, which downstream tools (flashcard_update_note, flashcard_delete_notes) require
Pagination parameters present (limit, offset) but no total count or next_cursor returned; LLM cannot know if more results exist or how many items matched the query