EngrAmo vs Potto Japan
A side-by-side look at the EngrAmo and Potto Japan MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose EngrAmo for education work over a hosted endpoint; choose Potto Japan for education. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose EngrAmo when
- You need dedicated capabilities in the Education domain.
- You prefer a remote HTTP/SSE transport.
- You have the keys it needs:
ENGRAMO_API_URL, ENGRAMO_API_TOKEN. - You want tools like
activate_learning_path, add_card_to_learning, add_catalog_to_learning.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | P Potto Japan | |
|---|---|---|
| Category | Education | Education |
| Quality signal | 72/100 · Great | 37/100 · Fair |
| Install command | Confirmed | Not confirmed yet |
| Transport | Remote HTTP/SSE | — |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | ENGRAMO_API_URLENGRAMO_API_TOKEN | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 2 | — |
| Directory activity | 1 views 0 installs 0 upvotes | 0 views 0 installs 0 upvotes |
| Tools | 29 | Not listed |
| Full listing | View EngrAmo | View Potto Japan |
Tools & capabilities
EngrAmo tools 29
activate_learning_pathActivate a learning path so its catalogs are included in daily reviews.add_card_to_learningAdd a single card to the learning queue. It will appear in due reviews. A card_id that doesn't exist is reported as "Not found"; one that belongs to another user is reported as a permission error (the API may also report a missing id that way).add_catalog_to_learningAdd all cards in a catalog to the learning queue at once.add_catalog_to_learning_pathAdd a catalog to a learning path so its cards become part of the path. Idempotent: adding a catalog that is already in the path succeeds (no error). A missing path or catalog returns Not found.create_learning_pathCreate a new learning path. It starts empty — use add_catalog_to_learning_path (or pass `catalog_ids` here) to populate it with catalogs. Passing `catalog_ids` adds each one in its own request right after the path is created (non-atomic): the path is never rolled back if a catalog fails to add, and the response then includes `catalogs_added`/`catalogs_failed` so failed ids can be retried.deactivate_learning_pathDeactivate a learning path so its catalogs are excluded from daily reviews.delete_cardDelete a flashcard from a catalog. If the card has learning progress it is archived (it stays in get_due_cards/get_all_learning_cards and remains reviewable, but get_card/update_card then report it as Not found); otherwise hard-deleted. A card_id that doesn't exist, or a catalog_id the card is not in, is reported as "Not found" and nothing is deleted; a card that belongs to another user is reported as a permission error (the API may also report a missing id that way).delete_catalogDelete a catalog. It is archived (not hard-deleted) if it has cards, a cover image, or is in an active learning path; otherwise it is hard-deleted. There is no restore/unarchive tool. Cards also in another live catalog are unaffected (they only lose this membership); cards only in this catalog stay reachable by id via get_card (showing `catalogs: []`) only until backend cleanup archives them; they disappear from search and list_cards immediately, and once archived get_card/update_card report them as Not found (cards with learning progress still appear in get_due_cards). To keep them, move them to another catalog with update_card (catalog_ids) BEFORE deleting. Catalog quota decrements automatically.generate_cardCreate a single styled flashcard. Pass catalog_id to add to an existing catalog; omit for the default catalog. For language-learning cards: translate face.text yourself and set back.text before calling; build a word-level dictionary (word → translation map) yourself and set face.dictionary. rich_text spans (IMPORTANT rules): ALWAYS set face.text and back.text to the full plain sentence — it is the ground truth. Each span's text must be a VERBATIM continuous segment of the original text — never add separator characters, markers, or ANY characters not present in the original sentence. Spans must partition face.text with no gaps; their concatenation must equal face.text exactly. The server validates this and discards richText if spans disagree with text. Styling goes under a nested `style` object on the span, never as flat fields, e.g. {"text":"gracias.","style":{"bold":true,"fontColor":"#27AE60"}}. Use fontFamily='monospace' for code, bold=true for key terms, fontColor='#E74C3C' for warnings, '#27AE60' for correct answers. If no styling needed, omit rich_text entirely and just set text.generate_cardsAdd multiple flashcards to an EXISTING catalog in one batch. Use this instead of calling generate_card N times. WARNING: cards are created one at a time — if one fails, previously created cards in this batch are NOT rolled back. Use generate_catalog_with_cards for atomic creation. For language-learning cards: translate each face.text yourself and set back.text; build a word-level dictionary (word → translation map) yourself and set face.dictionary on each card. rich_text spans (IMPORTANT rules): ALWAYS set face.text and back.text to the full plain sentence — it is the ground truth. Each span's text must be a VERBATIM continuous segment of the original text — never add separator characters, markers, or ANY characters not present in the original sentence. Spans must partition face.text with no gaps; their concatenation must equal face.text exactly. The server validates this and discards richText if spans disagree with text. Styling goes under a nested `style` object on the span, e.g. {"text":"gracias.","style":{"bold":true,"fontColor":"#27AE60"}}. At most 200 cards per call; split larger sets into several calls.generate_catalog_with_cardsCreate a new catalog together with all its flashcards in one atomic call. More efficient than creating cards one by one. For language-learning cards: translate each face.text yourself and set back.text; build a word-level dictionary (word → translation map) yourself and set face.dictionary on each card. rich_text spans (IMPORTANT rules): ALWAYS set face.text and back.text to the full plain sentence — it is the ground truth. Each span's text must be a VERBATIM continuous segment of the original text — never add separator characters, markers, or ANY characters not present in the original sentence. Spans must partition face.text with no gaps; their concatenation must equal face.text exactly. The server validates this and discards richText if spans disagree with text. Styling goes under a nested `style` object on the span, e.g. {"text":"gracias.","style":{"bold":true,"fontColor":"#27AE60"}}. The returned catalog's cardCount reflects the cards created in this call. At most 200 cards per call; split larger sets into several calls.get_all_learning_cardsGet all cards currently in the learning queue (due and future), with pagination. Returns at most 50 items per call; pass the returned `cursor` back to fetch the next page (`cursor: null` means this is the last page). A returned card may be archived (deleted after learning started): it stays reviewable here, but get_card/update_card report it as Not found.- +17 more on the listing page
Potto Japan tools
No tool names declared yet. Check the project README from the listing page.
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
EngrAmo
{
"mcpServers": {
"engramo": {
"command": "npx",
"args": [
"-y",
"@engramo/mcp"
],
"env": {
"ENGRAMO_API_URL": "YOUR_ENGRAMO_API_URL_HERE",
"ENGRAMO_API_TOKEN": "YOUR_ENGRAMO_API_TOKEN_HERE"
}
}
}
}
Potto Japan
No confirmed install command for Potto Japan yet — follow the setup steps linked from its listing page rather than a guessed package name.