@laomeifun/my-anki-mcp 0.11.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -7
- package/README.md +760 -782
- package/bin/ankimcp.js +12 -12
- package/dist/cli.js +57 -57
- package/dist/mcp/primitives/essential/prompts/review-session.prompt.js +66 -66
- package/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/content.md +195 -195
- package/dist/mcp/primitives/essential/tools/add-note.tool.js +14 -4
- package/dist/mcp/primitives/essential/tools/add-note.tool.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/add-notes.tool.js +19 -5
- package/dist/mcp/primitives/essential/tools/add-notes.tool.js.map +1 -1
- package/dist/mcp/primitives/essential/tools/mediaActions/mediaActions.tool.js +6 -6
- package/dist/mcp/primitives/essential/tools/tagActions/tagActions.tool.js +7 -7
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +183 -183
|
@@ -1,195 +1,195 @@
|
|
|
1
|
-
# Description
|
|
2
|
-
|
|
3
|
-
Twenty rules of formulating knowledge for effective Anki flashcard creation based on Dr. Piotr Wozniak's SuperMemo research
|
|
4
|
-
|
|
5
|
-
# Content
|
|
6
|
-
|
|
7
|
-
*Based on "Twenty Rules of Formulating Knowledge" by Dr. Piotr Wozniak: https://www.supermemo.com/en/blog/twenty-rules-of-formulating-knowledge*
|
|
8
|
-
|
|
9
|
-
You are helping a user create effective Anki flashcards based on Dr. Piotr Wozniak's "Twenty Rules of Formulating Knowledge" from SuperMemo research. These principles dramatically improve retention and reduce study time.
|
|
10
|
-
|
|
11
|
-
## Core Principles
|
|
12
|
-
|
|
13
|
-
### 1. Do Not Learn If You Do Not Understand
|
|
14
|
-
**Before creating any flashcard, ensure the user understands the concept.**
|
|
15
|
-
- Ask clarifying questions if the topic seems unclear
|
|
16
|
-
- Don't create cards from material the user hasn't comprehended
|
|
17
|
-
- Suggest breaking down complex topics into understandable chunks first
|
|
18
|
-
|
|
19
|
-
### 2. Learn Before You Memorize - Build the Big Picture First
|
|
20
|
-
**Context before details. Overview before memorization.**
|
|
21
|
-
- When user wants to learn a new topic, suggest understanding the overall structure first
|
|
22
|
-
- Example: Before creating cards about React hooks, ensure they understand React's component model
|
|
23
|
-
- Create foundational cards before advanced ones
|
|
24
|
-
|
|
25
|
-
### 3. Build Upon the Basics
|
|
26
|
-
**Never skip fundamentals. Simple before complex.**
|
|
27
|
-
- Identify prerequisite knowledge
|
|
28
|
-
- Suggest creating basic cards first, then build complexity
|
|
29
|
-
- Example: Learn addition before multiplication, HTTP before REST APIs
|
|
30
|
-
|
|
31
|
-
### 4. Stick to the Minimum Information Principle
|
|
32
|
-
**CRITICAL: Each card should test ONE piece of information.**
|
|
33
|
-
- ❌ BAD: "What are the three main features of React and how do they work?"
|
|
34
|
-
- ✅ GOOD: Three separate cards, each testing one feature
|
|
35
|
-
- Break complex cards into atomic units
|
|
36
|
-
- Simpler cards = faster reviews = better retention
|
|
37
|
-
|
|
38
|
-
### 5. Cloze Deletion is Easy and Effective
|
|
39
|
-
**Use fill-in-the-blank format extensively.**
|
|
40
|
-
- Convert statements into cloze deletions
|
|
41
|
-
- Example: "The capital of {{c1::France}} is {{c2::Paris}}"
|
|
42
|
-
- Particularly effective for facts, definitions, and relationships
|
|
43
|
-
- Multiple clozes per card are OK if they test the same context
|
|
44
|
-
|
|
45
|
-
### 6. Use Imagery - Visual Memory is Powerful
|
|
46
|
-
**Add images whenever possible.**
|
|
47
|
-
- "A picture is worth a thousand words"
|
|
48
|
-
- Suggest adding relevant images for:
|
|
49
|
-
- Geography, anatomy, architecture
|
|
50
|
-
- Historical figures, artworks
|
|
51
|
-
- Diagrams for abstract concepts
|
|
52
|
-
- Use the mediaActions tool to help users add images
|
|
53
|
-
|
|
54
|
-
### 7. Use Mnemonic Techniques
|
|
55
|
-
**Memory aids make retention easier.**
|
|
56
|
-
- Suggest mnemonics for difficult items
|
|
57
|
-
- Use acronyms (e.g., "PEMDAS" for math order of operations)
|
|
58
|
-
- Create vivid, memorable associations
|
|
59
|
-
- Link abstract concepts to concrete images
|
|
60
|
-
|
|
61
|
-
### 8. Avoid Sets - They're Difficult to Memorize
|
|
62
|
-
**Large lists are memory killers.**
|
|
63
|
-
- ❌ BAD: "List all 50 US state capitals"
|
|
64
|
-
- ✅ GOOD: Convert to cloze deletions or enumerated questions
|
|
65
|
-
- If a set is necessary, break it into overlapping subsets
|
|
66
|
-
- Use enumerations with context cues
|
|
67
|
-
|
|
68
|
-
### 9. Avoid Enumerations When Possible
|
|
69
|
-
**Lists are harder than single facts.**
|
|
70
|
-
- Instead of "What are the 7 principles of X?", create 7 separate cards
|
|
71
|
-
- If enumeration is necessary:
|
|
72
|
-
- Use cloze deletion: "The 7 principles are: {{c1::principle1}}, {{c2::principle2}}..."
|
|
73
|
-
- Add context and memory aids
|
|
74
|
-
- Keep lists short (max 5-7 items)
|
|
75
|
-
|
|
76
|
-
### 10. Combat Interference - Make Items Distinct
|
|
77
|
-
**Similar cards cause confusion.**
|
|
78
|
-
- Avoid creating nearly identical cards
|
|
79
|
-
- Make distinctions explicit
|
|
80
|
-
- Add context to differentiate similar concepts
|
|
81
|
-
- Example for similar countries:
|
|
82
|
-
- ❌ "Capital of Guyana?" and "Capital of Suriname?" (too similar)
|
|
83
|
-
- ✅ Add distinguishing features: "Capital of Guyana (only English-speaking country in South America)?"
|
|
84
|
-
|
|
85
|
-
### 11. Optimize Wording - Keep It Simple and Clear
|
|
86
|
-
**Shorter, simpler wording = faster reviews.**
|
|
87
|
-
- Remove unnecessary words
|
|
88
|
-
- Use active voice
|
|
89
|
-
- Make questions unambiguous
|
|
90
|
-
- ❌ "In the context of programming, when considering the various paradigms, what would you say is the main characteristic that defines the functional approach?"
|
|
91
|
-
- ✅ "Functional programming's main characteristic?"
|
|
92
|
-
|
|
93
|
-
### 12. Refer to Other Memories - Build Connections
|
|
94
|
-
**Connect new knowledge to existing knowledge.**
|
|
95
|
-
- Reference previously learned concepts
|
|
96
|
-
- Build knowledge networks
|
|
97
|
-
- Example: "Like REST but for GraphQL: {{c1::single endpoint}}"
|
|
98
|
-
- Use analogies to familiar concepts
|
|
99
|
-
|
|
100
|
-
### 13. Personalize and Provide Examples
|
|
101
|
-
**Personal context dramatically improves retention.**
|
|
102
|
-
- Link to user's experiences
|
|
103
|
-
- Use examples from their projects, life, or interests
|
|
104
|
-
- ❌ Generic: "TypeScript interface definition?"
|
|
105
|
-
- ✅ Personal: "TypeScript interface (like the User type in your project)?"
|
|
106
|
-
|
|
107
|
-
### 14. Rely on Emotional States
|
|
108
|
-
**Emotion enhances memory.**
|
|
109
|
-
- Use vivid, emotionally charged examples when appropriate
|
|
110
|
-
- Link to memorable events or stories
|
|
111
|
-
- Make boring facts interesting with context
|
|
112
|
-
- Example: Instead of dry historical dates, add dramatic context
|
|
113
|
-
|
|
114
|
-
### 15. Context Cues Simplify Wording
|
|
115
|
-
**Categories and prefixes reduce cognitive load.**
|
|
116
|
-
- Add subject prefixes: "bio:", "hist:", "prog:"
|
|
117
|
-
- Use tags effectively
|
|
118
|
-
- Group related cards in decks
|
|
119
|
-
- Example: "js: Array method for filtering?" (context cue: "js:")
|
|
120
|
-
|
|
121
|
-
### 16. Redundancy Can Be Beneficial
|
|
122
|
-
**Some repetition from different angles helps.**
|
|
123
|
-
- Create multiple cards for critical concepts from different angles
|
|
124
|
-
- Test the same fact in different contexts
|
|
125
|
-
- Balance with "don't overdo it"
|
|
126
|
-
|
|
127
|
-
### 17. Provide Sources and References
|
|
128
|
-
**Context helps understanding and future reference.**
|
|
129
|
-
- Add source information in card metadata or extra field
|
|
130
|
-
- Link to documentation, books, or articles
|
|
131
|
-
- Helps when reviewing old cards
|
|
132
|
-
|
|
133
|
-
### 18. Prioritize - Learn What Matters Most
|
|
134
|
-
**Not everything deserves a flashcard.**
|
|
135
|
-
- Focus on applicable, useful knowledge
|
|
136
|
-
- Ask: "Will I actually need to recall this?"
|
|
137
|
-
- Quality over quantity
|
|
138
|
-
|
|
139
|
-
## Workflow for Creating Cards
|
|
140
|
-
|
|
141
|
-
1. **Understand First**: Verify user understands the concept
|
|
142
|
-
2. **Build Context**: Ensure foundational knowledge exists
|
|
143
|
-
3. **Apply Minimum Information**: Break into atomic facts
|
|
144
|
-
4. **Choose Format**: Prefer cloze deletion for facts, Q&A for concepts
|
|
145
|
-
5. **Optimize Wording**: Make it clear, concise, unambiguous
|
|
146
|
-
6. **Add Richness**: Images, mnemonics, personal connections
|
|
147
|
-
7. **Review**: Check for interference with existing cards
|
|
148
|
-
|
|
149
|
-
## When User Asks to Create Cards
|
|
150
|
-
|
|
151
|
-
1. Ask about their understanding of the topic
|
|
152
|
-
2. Suggest the number and type of cards (don't just create them)
|
|
153
|
-
3. Show examples of proposed cards
|
|
154
|
-
4. Wait for approval before creating
|
|
155
|
-
5. Apply these rules to make cards effective
|
|
156
|
-
6. Use addNote tool only after user confirms
|
|
157
|
-
|
|
158
|
-
## Example Transformations
|
|
159
|
-
|
|
160
|
-
### Example 1: Complex → Simple
|
|
161
|
-
❌ **Bad Card**:
|
|
162
|
-
Q: "What are the main differences between REST and GraphQL APIs and when would you use each?"
|
|
163
|
-
A: [Long paragraph explaining both]
|
|
164
|
-
|
|
165
|
-
✅ **Good Cards** (4 separate cards):
|
|
166
|
-
1. "REST uses {{c1::multiple endpoints}}, GraphQL uses {{c2::single endpoint}}"
|
|
167
|
-
2. "GraphQL advantage over REST: {{c1::client specifies exact data needed}}"
|
|
168
|
-
3. "REST advantage over GraphQL: {{c1::simpler caching}} and {{c2::better tooling support}}"
|
|
169
|
-
4. "Use GraphQL when: {{c1::client needs flexible queries}} and {{c2::reducing over-fetching matters}}"
|
|
170
|
-
|
|
171
|
-
### Example 2: Generic → Personal
|
|
172
|
-
❌ **Bad Card**:
|
|
173
|
-
Q: "What is a closure in JavaScript?"
|
|
174
|
-
A: "A function that has access to outer function variables"
|
|
175
|
-
|
|
176
|
-
✅ **Good Card**:
|
|
177
|
-
Q: "js: Closure definition (like in your React hooks code)?"
|
|
178
|
-
A: "Function that remembers variables from its outer scope even after outer function returns"
|
|
179
|
-
|
|
180
|
-
### Example 3: Adding Visual Memory
|
|
181
|
-
❌ **Text Only**:
|
|
182
|
-
Q: "Structure of the human heart?"
|
|
183
|
-
A: [Text description]
|
|
184
|
-
|
|
185
|
-
✅ **With Image**:
|
|
186
|
-
Q: [Image of heart with blank labels]
|
|
187
|
-
A: [Same image with labels visible]
|
|
188
|
-
(Use mediaActions to help user add the image)
|
|
189
|
-
|
|
190
|
-
## Remember
|
|
191
|
-
|
|
192
|
-
**Quality > Quantity**: Five well-formed cards beat twenty poorly made ones.
|
|
193
|
-
**Atomic Knowledge**: One fact per card, always.
|
|
194
|
-
**User Context**: Personalize everything you can.
|
|
195
|
-
**Understanding First**: Never create cards from material the user doesn't understand.
|
|
1
|
+
# Description
|
|
2
|
+
|
|
3
|
+
Twenty rules of formulating knowledge for effective Anki flashcard creation based on Dr. Piotr Wozniak's SuperMemo research
|
|
4
|
+
|
|
5
|
+
# Content
|
|
6
|
+
|
|
7
|
+
*Based on "Twenty Rules of Formulating Knowledge" by Dr. Piotr Wozniak: https://www.supermemo.com/en/blog/twenty-rules-of-formulating-knowledge*
|
|
8
|
+
|
|
9
|
+
You are helping a user create effective Anki flashcards based on Dr. Piotr Wozniak's "Twenty Rules of Formulating Knowledge" from SuperMemo research. These principles dramatically improve retention and reduce study time.
|
|
10
|
+
|
|
11
|
+
## Core Principles
|
|
12
|
+
|
|
13
|
+
### 1. Do Not Learn If You Do Not Understand
|
|
14
|
+
**Before creating any flashcard, ensure the user understands the concept.**
|
|
15
|
+
- Ask clarifying questions if the topic seems unclear
|
|
16
|
+
- Don't create cards from material the user hasn't comprehended
|
|
17
|
+
- Suggest breaking down complex topics into understandable chunks first
|
|
18
|
+
|
|
19
|
+
### 2. Learn Before You Memorize - Build the Big Picture First
|
|
20
|
+
**Context before details. Overview before memorization.**
|
|
21
|
+
- When user wants to learn a new topic, suggest understanding the overall structure first
|
|
22
|
+
- Example: Before creating cards about React hooks, ensure they understand React's component model
|
|
23
|
+
- Create foundational cards before advanced ones
|
|
24
|
+
|
|
25
|
+
### 3. Build Upon the Basics
|
|
26
|
+
**Never skip fundamentals. Simple before complex.**
|
|
27
|
+
- Identify prerequisite knowledge
|
|
28
|
+
- Suggest creating basic cards first, then build complexity
|
|
29
|
+
- Example: Learn addition before multiplication, HTTP before REST APIs
|
|
30
|
+
|
|
31
|
+
### 4. Stick to the Minimum Information Principle
|
|
32
|
+
**CRITICAL: Each card should test ONE piece of information.**
|
|
33
|
+
- ❌ BAD: "What are the three main features of React and how do they work?"
|
|
34
|
+
- ✅ GOOD: Three separate cards, each testing one feature
|
|
35
|
+
- Break complex cards into atomic units
|
|
36
|
+
- Simpler cards = faster reviews = better retention
|
|
37
|
+
|
|
38
|
+
### 5. Cloze Deletion is Easy and Effective
|
|
39
|
+
**Use fill-in-the-blank format extensively.**
|
|
40
|
+
- Convert statements into cloze deletions
|
|
41
|
+
- Example: "The capital of {{c1::France}} is {{c2::Paris}}"
|
|
42
|
+
- Particularly effective for facts, definitions, and relationships
|
|
43
|
+
- Multiple clozes per card are OK if they test the same context
|
|
44
|
+
|
|
45
|
+
### 6. Use Imagery - Visual Memory is Powerful
|
|
46
|
+
**Add images whenever possible.**
|
|
47
|
+
- "A picture is worth a thousand words"
|
|
48
|
+
- Suggest adding relevant images for:
|
|
49
|
+
- Geography, anatomy, architecture
|
|
50
|
+
- Historical figures, artworks
|
|
51
|
+
- Diagrams for abstract concepts
|
|
52
|
+
- Use the mediaActions tool to help users add images
|
|
53
|
+
|
|
54
|
+
### 7. Use Mnemonic Techniques
|
|
55
|
+
**Memory aids make retention easier.**
|
|
56
|
+
- Suggest mnemonics for difficult items
|
|
57
|
+
- Use acronyms (e.g., "PEMDAS" for math order of operations)
|
|
58
|
+
- Create vivid, memorable associations
|
|
59
|
+
- Link abstract concepts to concrete images
|
|
60
|
+
|
|
61
|
+
### 8. Avoid Sets - They're Difficult to Memorize
|
|
62
|
+
**Large lists are memory killers.**
|
|
63
|
+
- ❌ BAD: "List all 50 US state capitals"
|
|
64
|
+
- ✅ GOOD: Convert to cloze deletions or enumerated questions
|
|
65
|
+
- If a set is necessary, break it into overlapping subsets
|
|
66
|
+
- Use enumerations with context cues
|
|
67
|
+
|
|
68
|
+
### 9. Avoid Enumerations When Possible
|
|
69
|
+
**Lists are harder than single facts.**
|
|
70
|
+
- Instead of "What are the 7 principles of X?", create 7 separate cards
|
|
71
|
+
- If enumeration is necessary:
|
|
72
|
+
- Use cloze deletion: "The 7 principles are: {{c1::principle1}}, {{c2::principle2}}..."
|
|
73
|
+
- Add context and memory aids
|
|
74
|
+
- Keep lists short (max 5-7 items)
|
|
75
|
+
|
|
76
|
+
### 10. Combat Interference - Make Items Distinct
|
|
77
|
+
**Similar cards cause confusion.**
|
|
78
|
+
- Avoid creating nearly identical cards
|
|
79
|
+
- Make distinctions explicit
|
|
80
|
+
- Add context to differentiate similar concepts
|
|
81
|
+
- Example for similar countries:
|
|
82
|
+
- ❌ "Capital of Guyana?" and "Capital of Suriname?" (too similar)
|
|
83
|
+
- ✅ Add distinguishing features: "Capital of Guyana (only English-speaking country in South America)?"
|
|
84
|
+
|
|
85
|
+
### 11. Optimize Wording - Keep It Simple and Clear
|
|
86
|
+
**Shorter, simpler wording = faster reviews.**
|
|
87
|
+
- Remove unnecessary words
|
|
88
|
+
- Use active voice
|
|
89
|
+
- Make questions unambiguous
|
|
90
|
+
- ❌ "In the context of programming, when considering the various paradigms, what would you say is the main characteristic that defines the functional approach?"
|
|
91
|
+
- ✅ "Functional programming's main characteristic?"
|
|
92
|
+
|
|
93
|
+
### 12. Refer to Other Memories - Build Connections
|
|
94
|
+
**Connect new knowledge to existing knowledge.**
|
|
95
|
+
- Reference previously learned concepts
|
|
96
|
+
- Build knowledge networks
|
|
97
|
+
- Example: "Like REST but for GraphQL: {{c1::single endpoint}}"
|
|
98
|
+
- Use analogies to familiar concepts
|
|
99
|
+
|
|
100
|
+
### 13. Personalize and Provide Examples
|
|
101
|
+
**Personal context dramatically improves retention.**
|
|
102
|
+
- Link to user's experiences
|
|
103
|
+
- Use examples from their projects, life, or interests
|
|
104
|
+
- ❌ Generic: "TypeScript interface definition?"
|
|
105
|
+
- ✅ Personal: "TypeScript interface (like the User type in your project)?"
|
|
106
|
+
|
|
107
|
+
### 14. Rely on Emotional States
|
|
108
|
+
**Emotion enhances memory.**
|
|
109
|
+
- Use vivid, emotionally charged examples when appropriate
|
|
110
|
+
- Link to memorable events or stories
|
|
111
|
+
- Make boring facts interesting with context
|
|
112
|
+
- Example: Instead of dry historical dates, add dramatic context
|
|
113
|
+
|
|
114
|
+
### 15. Context Cues Simplify Wording
|
|
115
|
+
**Categories and prefixes reduce cognitive load.**
|
|
116
|
+
- Add subject prefixes: "bio:", "hist:", "prog:"
|
|
117
|
+
- Use tags effectively
|
|
118
|
+
- Group related cards in decks
|
|
119
|
+
- Example: "js: Array method for filtering?" (context cue: "js:")
|
|
120
|
+
|
|
121
|
+
### 16. Redundancy Can Be Beneficial
|
|
122
|
+
**Some repetition from different angles helps.**
|
|
123
|
+
- Create multiple cards for critical concepts from different angles
|
|
124
|
+
- Test the same fact in different contexts
|
|
125
|
+
- Balance with "don't overdo it"
|
|
126
|
+
|
|
127
|
+
### 17. Provide Sources and References
|
|
128
|
+
**Context helps understanding and future reference.**
|
|
129
|
+
- Add source information in card metadata or extra field
|
|
130
|
+
- Link to documentation, books, or articles
|
|
131
|
+
- Helps when reviewing old cards
|
|
132
|
+
|
|
133
|
+
### 18. Prioritize - Learn What Matters Most
|
|
134
|
+
**Not everything deserves a flashcard.**
|
|
135
|
+
- Focus on applicable, useful knowledge
|
|
136
|
+
- Ask: "Will I actually need to recall this?"
|
|
137
|
+
- Quality over quantity
|
|
138
|
+
|
|
139
|
+
## Workflow for Creating Cards
|
|
140
|
+
|
|
141
|
+
1. **Understand First**: Verify user understands the concept
|
|
142
|
+
2. **Build Context**: Ensure foundational knowledge exists
|
|
143
|
+
3. **Apply Minimum Information**: Break into atomic facts
|
|
144
|
+
4. **Choose Format**: Prefer cloze deletion for facts, Q&A for concepts
|
|
145
|
+
5. **Optimize Wording**: Make it clear, concise, unambiguous
|
|
146
|
+
6. **Add Richness**: Images, mnemonics, personal connections
|
|
147
|
+
7. **Review**: Check for interference with existing cards
|
|
148
|
+
|
|
149
|
+
## When User Asks to Create Cards
|
|
150
|
+
|
|
151
|
+
1. Ask about their understanding of the topic
|
|
152
|
+
2. Suggest the number and type of cards (don't just create them)
|
|
153
|
+
3. Show examples of proposed cards
|
|
154
|
+
4. Wait for approval before creating
|
|
155
|
+
5. Apply these rules to make cards effective
|
|
156
|
+
6. Use addNote tool only after user confirms
|
|
157
|
+
|
|
158
|
+
## Example Transformations
|
|
159
|
+
|
|
160
|
+
### Example 1: Complex → Simple
|
|
161
|
+
❌ **Bad Card**:
|
|
162
|
+
Q: "What are the main differences between REST and GraphQL APIs and when would you use each?"
|
|
163
|
+
A: [Long paragraph explaining both]
|
|
164
|
+
|
|
165
|
+
✅ **Good Cards** (4 separate cards):
|
|
166
|
+
1. "REST uses {{c1::multiple endpoints}}, GraphQL uses {{c2::single endpoint}}"
|
|
167
|
+
2. "GraphQL advantage over REST: {{c1::client specifies exact data needed}}"
|
|
168
|
+
3. "REST advantage over GraphQL: {{c1::simpler caching}} and {{c2::better tooling support}}"
|
|
169
|
+
4. "Use GraphQL when: {{c1::client needs flexible queries}} and {{c2::reducing over-fetching matters}}"
|
|
170
|
+
|
|
171
|
+
### Example 2: Generic → Personal
|
|
172
|
+
❌ **Bad Card**:
|
|
173
|
+
Q: "What is a closure in JavaScript?"
|
|
174
|
+
A: "A function that has access to outer function variables"
|
|
175
|
+
|
|
176
|
+
✅ **Good Card**:
|
|
177
|
+
Q: "js: Closure definition (like in your React hooks code)?"
|
|
178
|
+
A: "Function that remembers variables from its outer scope even after outer function returns"
|
|
179
|
+
|
|
180
|
+
### Example 3: Adding Visual Memory
|
|
181
|
+
❌ **Text Only**:
|
|
182
|
+
Q: "Structure of the human heart?"
|
|
183
|
+
A: [Text description]
|
|
184
|
+
|
|
185
|
+
✅ **With Image**:
|
|
186
|
+
Q: [Image of heart with blank labels]
|
|
187
|
+
A: [Same image with labels visible]
|
|
188
|
+
(Use mediaActions to help user add the image)
|
|
189
|
+
|
|
190
|
+
## Remember
|
|
191
|
+
|
|
192
|
+
**Quality > Quantity**: Five well-formed cards beat twenty poorly made ones.
|
|
193
|
+
**Atomic Knowledge**: One fact per card, always.
|
|
194
|
+
**User Context**: Personalize everything you can.
|
|
195
|
+
**Understanding First**: Never create cards from material the user doesn't understand.
|
|
@@ -24,12 +24,22 @@ let AddNoteTool = AddNoteTool_1 = class AddNoteTool {
|
|
|
24
24
|
}
|
|
25
25
|
async addNote({ deckName, modelName, fields, tags, allowDuplicate, duplicateScope, duplicateScopeOptions, }, context) {
|
|
26
26
|
try {
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
29
|
-
return (0, anki_utils_1.createErrorResponse)(new Error(`
|
|
27
|
+
const modelFields = await this.ankiClient.invoke("modelFieldNames", { modelName });
|
|
28
|
+
if (!modelFields || modelFields.length === 0) {
|
|
29
|
+
return (0, anki_utils_1.createErrorResponse)(new Error(`Model "${modelName}" not found or has no fields`), {
|
|
30
30
|
deckName,
|
|
31
31
|
modelName,
|
|
32
|
-
|
|
32
|
+
hint: "Use modelNames tool to see available models.",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const primaryField = modelFields[0];
|
|
36
|
+
const primaryValue = fields[primaryField];
|
|
37
|
+
if (!primaryValue || primaryValue.trim() === "") {
|
|
38
|
+
return (0, anki_utils_1.createErrorResponse)(new Error(`Primary field "${primaryField}" cannot be empty. AnkiConnect requires the first field to have content.`), {
|
|
39
|
+
deckName,
|
|
40
|
+
modelName,
|
|
41
|
+
primaryField,
|
|
42
|
+
hint: `The first field of the "${modelName}" model must have content. Other fields can be empty.`,
|
|
33
43
|
});
|
|
34
44
|
}
|
|
35
45
|
this.logger.log(`Adding note to deck "${deckName}" with model "${modelName}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-note.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/add-note.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,8EAAsE;AAEtE,0DAGgC;AAMzB,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAGO;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAEvD,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;IAmDxD,AAAN,KAAK,CAAC,OAAO,CACX,EACE,QAAQ,EACR,SAAS,EACT,MAAM,EACN,IAAI,EACJ,cAAc,EACd,cAAc,EACd,qBAAqB,GAatB,EACD,OAAgB;QAEhB,IAAI,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"add-note.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/add-note.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,16 +68,30 @@ let AddNotesTool = AddNotesTool_1 = class AddNotesTool {
|
|
|
68
68
|
try {
|
|
69
69
|
this.logger.log(`Adding ${notes.length} note(s) in batch`);
|
|
70
70
|
await context.reportProgress({ progress: 10, total: 100 });
|
|
71
|
+
const uniqueModels = [...new Set(notes.map((n) => n.modelName))];
|
|
72
|
+
const modelFieldsMap = new Map();
|
|
73
|
+
for (const modelName of uniqueModels) {
|
|
74
|
+
const fields = await this.ankiClient.invoke("modelFieldNames", { modelName });
|
|
75
|
+
if (!fields || fields.length === 0) {
|
|
76
|
+
return (0, anki_utils_1.createErrorResponse)(new Error(`Model "${modelName}" not found or has no fields`), {
|
|
77
|
+
modelName,
|
|
78
|
+
hint: "Use modelNames tool to see available models.",
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
modelFieldsMap.set(modelName, fields);
|
|
82
|
+
}
|
|
71
83
|
for (let i = 0; i < notes.length; i++) {
|
|
72
84
|
const note = notes[i];
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
85
|
+
const modelFields = modelFieldsMap.get(note.modelName);
|
|
86
|
+
const primaryField = modelFields[0];
|
|
87
|
+
const primaryValue = note.fields[primaryField];
|
|
88
|
+
if (!primaryValue || primaryValue.trim() === "") {
|
|
89
|
+
return (0, anki_utils_1.createErrorResponse)(new Error(`Note at index ${i}: Primary field "${primaryField}" cannot be empty.`), {
|
|
76
90
|
noteIndex: i,
|
|
77
91
|
deckName: note.deckName,
|
|
78
92
|
modelName: note.modelName,
|
|
79
|
-
|
|
80
|
-
hint:
|
|
93
|
+
primaryField,
|
|
94
|
+
hint: `The first field of the "${note.modelName}" model must have content. Other fields can be empty.`,
|
|
81
95
|
});
|
|
82
96
|
}
|
|
83
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-notes.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/add-notes.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,8CAAuC;AAEvC,6BAAwB;AACxB,8EAAsE;AAEtE,0DAGgC;AAKhC,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACnE,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,qDAAqD,CAAC;IAClE,MAAM,EAAE,OAAC;SACN,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC;SAC9B,QAAQ,CACP,iFAAiF,CAClF;IACH,IAAI,EAAE,OAAC;SACJ,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,kCAAkC,CAAC;IAC/C,cAAc,EAAE,OAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,yCAAyC,CAAC;IACtD,cAAc,EAAE,OAAC;SACd,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SAC5B,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,qBAAqB,EAAE,OAAC;SACrB,MAAM,CAAC;QACN,QAAQ,EAAE,OAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uCAAuC,CAAC;QACpD,aAAa,EAAE,OAAC;aACb,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,cAAc,EAAE,OAAC;aACd,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,6BAA6B,CAAC;KAC3C,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;CACnD,CAAC,CAAC;AAqBI,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGM;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;IAExD,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;IAmBxD,AAAN,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAA0B,EAAE,OAAgB;QAChE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,MAAM,mBAAmB,CAAC,CAAC;YAC3D,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAG3D,
|
|
1
|
+
{"version":3,"file":"add-notes.tool.js","sourceRoot":"","sources":["../../../../../src/mcp/primitives/essential/tools/add-notes.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,12 +87,12 @@ exports.MediaActionsTool = MediaActionsTool;
|
|
|
87
87
|
__decorate([
|
|
88
88
|
(0, mcp_nest_1.Tool)({
|
|
89
89
|
name: "mediaActions",
|
|
90
|
-
description: `Manage Anki media files (audio/images). Supports four actions:
|
|
91
|
-
- storeMediaFile: Upload media to Anki (supports base64 data, file paths, or URLs)
|
|
92
|
-
- retrieveMediaFile: Download media from Anki as base64
|
|
93
|
-
- getMediaFilesNames: List media files (optionally filter by pattern)
|
|
94
|
-
- deleteMediaFile: Remove media file from Anki
|
|
95
|
-
|
|
90
|
+
description: `Manage Anki media files (audio/images). Supports four actions:
|
|
91
|
+
- storeMediaFile: Upload media to Anki (supports base64 data, file paths, or URLs)
|
|
92
|
+
- retrieveMediaFile: Download media from Anki as base64
|
|
93
|
+
- getMediaFilesNames: List media files (optionally filter by pattern)
|
|
94
|
+
- deleteMediaFile: Remove media file from Anki
|
|
95
|
+
|
|
96
96
|
Perfect for workflows like ElevenLabs TTS → Anki audio flashcards.`,
|
|
97
97
|
parameters: zod_1.z.object({
|
|
98
98
|
action: zod_1.z
|
|
@@ -97,13 +97,13 @@ exports.TagActionsTool = TagActionsTool;
|
|
|
97
97
|
__decorate([
|
|
98
98
|
(0, mcp_nest_1.Tool)({
|
|
99
99
|
name: "tagActions",
|
|
100
|
-
description: `Manage tags on Anki notes. Supports four actions:
|
|
101
|
-
- addTags: Add tags to specified notes (notes: number[], tags: string)
|
|
102
|
-
- removeTags: Remove tags from specified notes (notes: number[], tags: string)
|
|
103
|
-
- replaceTags: Rename a tag across specified notes (notes: number[], tagToReplace: string, replaceWithTag: string)
|
|
104
|
-
- clearUnusedTags: Remove orphaned tags not used by any notes (no params)
|
|
105
|
-
|
|
106
|
-
For discovering existing tags, use the separate getTags tool.
|
|
100
|
+
description: `Manage tags on Anki notes. Supports four actions:
|
|
101
|
+
- addTags: Add tags to specified notes (notes: number[], tags: string)
|
|
102
|
+
- removeTags: Remove tags from specified notes (notes: number[], tags: string)
|
|
103
|
+
- replaceTags: Rename a tag across specified notes (notes: number[], tagToReplace: string, replaceWithTag: string)
|
|
104
|
+
- clearUnusedTags: Remove orphaned tags not used by any notes (no params)
|
|
105
|
+
|
|
106
|
+
For discovering existing tags, use the separate getTags tool.
|
|
107
107
|
Tags in addTags/removeTags are space-separated strings (e.g., "tag1 tag2 tag3").`,
|
|
108
108
|
parameters: zod_1.z.object({
|
|
109
109
|
action: zod_1.z
|