vocabit-mcp
vocabit-mcp
Vocabit용 MCP 서버입니다. Vocabit은 플래시카드 앱으로, 이 서버를 통해 AI 어시스턴트가 실제 휴대폰의 실제 앱에 학습 세트를 작성하고, 학습자가 실제로 어떻게 학습했는지 다시 읽어올 수 있습니다.
대부분의 MCP 서버는 API에서 데이터를 읽습니다. 이 서버는 루프를 완성합니다:
flowchart LR
A["Assistant<br/>teaches a topic"] --> B["create_study_set"]
B --> C["Set appears in the<br/>Vocabit app"]
C --> D["Learner works<br/>through it"]
D --> E["get_set_results"]
E -->|weak cards| A흥미로운 도구는 create_study_set이 아닙니다 — 무엇이든 플래시카드를 생성할 수 있으니까요. 핵심은 get_set_results입니다: 학습자가 어려움으로 표시한 카드, 도달하지 못한 카드, 각 카드에 소요된 복습 횟수. 다음 세트는 추측이 아닌 이 데이터를 기반으로 만들어집니다.
30초 만에 사용해 보기
백엔드도, 계정도, API 키도 필요 없습니다:
npx -y vocabit-mcp --demo데모 모드는 두 개의 시드 세트가 있는 인메모리 Vocabit에 대해 동일한 서버를 실행합니다. 세트를 만들고 결과를 요청하면, 결정론적 스탠드인 학습자가 세트를 학습한 결과가 반환됩니다 — 응답에 시뮬레이션된 것으로 표시되므로 실제 데이터로 오인될 일이 없습니다.
UI로 살펴보려면:
npx @modelcontextprotocol/inspector npx -y vocabit-mcp --demoRelated MCP server: EduBase MCP Server
설치
MCP 레지스트리에 io.github.JohnBilousov/vocabit-mcp로 등록되어 있어, 레지스트리를 읽는 클라이언트는 직접 찾을 수 있습니다.
claude mcp add vocabit -- npx -y vocabit-mcp{
"mcpServers": {
"vocabit": {
"command": "npx",
"args": ["-y", "vocabit-mcp"],
"env": {
"VOCABIT_BASE_URL": "https://your-vocabit-backend.example.com",
"VOCABIT_AGENT_KEY": "your-agent-key"
}
}
}
}데모 모드로 실행하려면 env 블록을 제거하세요.
도구
도구 | 기능 |
| 연결 상태와 서버가 어떤 모드인지 확인합니다. |
| 학습자의 앱에 세트를 게시합니다. 기기에서 열리는 딥 링크를 반환합니다. |
| 최신순으로 최근 세트를 나열하며, 각각 진행 상황 요약을 포함합니다. |
| 한 세트의 전체 내용과 어시스턴트가 첨부한 주제 및 메모를 반환합니다. |
| 피드백의 핵심. 카드별 상태, |
| 제목 변경, 태그 변경, 카드 추가 — 일반적으로 결과를 읽은 후의 후속 작업입니다. |
| 세트가 준비되었음을 Telegram으로 알립니다. |
| 앱에서 세트를 제거합니다. 학습 기록은 유지됩니다. |
또한 vocabit://set/{setId} 리소스(JSON 형식의 세트, 목록 조회 가능)와 전체 루프를 안내하는 study-session 프롬프트도 노출됩니다.
카드 상태
진행 상황은 어시스턴트가 아닌 앱의 간격 반복 엔진에서 비롯됩니다:
상태 | 의미 |
| 아직 복습하지 않음. |
| 학습자가 어려움으로 표시. |
| 좋음으로 표시. |
| 쉬움으로 표시. |
new 상태의 카드가 하나도 없으면 세트는 completed: true를 보고합니다.
라이브 모드
에이전트 API가 활성화된 Vocabit 백엔드를 가리키도록 서버를 설정합니다:
export VOCABIT_BASE_URL=https://your-vocabit-backend.example.com
export VOCABIT_AGENT_KEY=... # must match one of AGENT_API_KEYS on the backend
npx -y vocabit-mcp변수 | 용도 |
| 백엔드 기본 URL. |
|
|
| 학습자의 Firebase UID. 선택 사항이며 백엔드에 기본값이 있습니다. |
| 새 세트의 기본 언어(예: |
|
|
| 요청 제한 시간, 기본값 |
|
|
URL과 키를 모두 설정하지 않으면 서버는 데모 모드로 시작합니다. 둘 중 하나만 설정하면 시작을 거부합니다 — 절반만 설정된 구성은 힌트가 아니라 실수입니다.
설계 노트
데모 모드는 스텁이 아닌 일급 클라이언트입니다. HttpVocabitClient와 DemoVocabitClient는 동일한 VocabitClient 인터페이스를 구현하므로, 어떤 도구에도 "지금 흉내 내는 중인가?" 분기가 없습니다. 리뷰어는 자격 증명 없이도 서버를 실행할 수 있고, 테스트 스위트는 SDK를 모킹하는 대신 실제 MCP 전송 위에서 실제 도구 표면을 검증합니다.
오류는 치명적이지 않고 복구 가능합니다. 실패한 호출은 백엔드 자체 메시지와 모델을 위한 힌트가 포함된 isError로 반환됩니다 — 404는 "list_study_sets를 호출하여 어떤 세트가 있는지 확인하세요", 401은 "또는 VOCABIT_DEMO=1로 실행하세요"라고 안내합니다. 상호 배타적인 인수는 추측 대신 설명과 함께 거부됩니다.
출력 스키마는 가장자리에서 느슨하게 유지됩니다. 식별 필드는 필수이고 나머지는 모두 선택 사항이므로, 백엔드에 필드가 추가되어도 작동 중인 도구가 검증 오류가 되지 않습니다.
어노테이션은 정직합니다. delete_study_set은 destructiveHint로, 읽기 도구는 readOnlyHint로 표시됩니다. notify_learner는 실제 사람에게 메시지를 보내며, 설명에는 절제해서 사용하라고 명시되어 있습니다.
개발
git clone https://github.com/JohnBilousov/vocabit-mcp && cd vocabit-mcp
npm install
npm run build
npm test # tool surface + full loop, plus the HTTP client against a mocked fetch
npm run lint # eslint
npm run format # prettier --write
npm run inspect # demo mode in the MCP InspectorCI는 모든 푸시와 풀 리퀘스트에서 typecheck, lint, format:check, test, build를 실행합니다.
src/
index.ts CLI entry, stdio transport
config.ts env → Config, demo-mode resolution
server.ts tool / resource / prompt registration
schemas.ts zod input and output shapes
format.ts human-readable summaries next to structuredContent
client/
types.ts wire types + VocabitClient contract
http.ts live backend
mock.ts in-memory backend for demo mode
test/
server.test.ts tool surface + full loop — over an in-memory MCP transport
client/
http.test.ts query encoding, error-body parsing, timeouts — against a mocked fetch릴리스
배포는 npm의 신뢰할 수 있는 배포(OIDC)를 사용합니다 — NPM_TOKEN 시크릿이 없으므로 유출되거나 만료될 것이 없습니다. npmjs.com에서 패키지의 Settings → Trusted publishing → GitHub Actions에서 일회성 설정을 합니다: 조직 JohnBilousov, 이 저장소, 워크플로 파일 이름 publish.yml.
릴리스를 만들려면: package.json, server.json, src/server.ts의 VERSION을 함께 버전업하고(테스트가 이들이 어긋나지 않음을 검증합니다), 커밋하고, 푸시한 다음 일치하는 vX.Y.Z 태그로 GitHub Release를 게시합니다. 그러면 .github/workflows/publish.yml이 트리거되어 테스트 스위트를 실행하고 출처 증명과 함께 npm에 배포합니다 — 패키지 페이지에는 레지스트리의 이름만이 아니라 이 정확한 커밋과 워크플로 실행으로 연결되는 검증된 링크가 표시됩니다.
로드맵
stdio와 함께 Streamable HTTP 전송 지원
백엔드 기본 UID 없이 다중 학습자 지원
오디오 발음 카드
라이선스
MIT © Ivan Bilousov
Available Tools
8 toolscreate_study_setCreate a study setA
Build a flashcard set and publish it to the learner's Vocabit app. Returns a deep link that opens the set on their device. Prefer one focused topic and 8-15 cards per set — long sets get abandoned. Use the notes field for what you want to check afterwards; the learner never sees it.
| Name | Required | Description | Default |
|---|---|---|---|
| cards | Yes | The flashcards, 1-300. Keep a set to one theme and around 8-15 cards for a single session | |
| notes | No | Your own notes about what to check when reviewing results. Never shown to the learner | |
| title | Yes | Set title as the learner will see it in the app | |
| topic | No | Topic tag used to group sets and to filter them later, e.g. 'church vocabulary' | |
| notify | No | Ping the learner on Telegram that the set is ready | |
| userId | No | Firebase UID of the learner. Omit to use the server default | |
| visibility | No | Defaults to private | |
| description | No | Short description shown under the title | |
| termLanguage | No | Language of the terms, e.g. 'de' | |
| definitionLanguage | No | Language of the definitions, e.g. 'en' |
Output Schema
| Name | Required | Description |
|---|---|---|
| setId | Yes | |
| title | Yes | |
| userId | No | |
| deepLink | Yes | Universal link that opens the set in the app |
| notified | No | |
| cardCount | Yes | |
| visibility | No | |
| appSchemeLink | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral detail beyond the annotations: it states the tool publishes to the learner's app, returns a deep link, and specifically discloses that the notes field is never shown to the learner. This gives the agent solid expectations for side effects and privacy, complementing the readOnlyHint=false and destructiveHint=false annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy: it states the action, the return, then two pieces of practical guidance. Information is front-loaded (action first), and each sentence earns its place without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter creation tool with a rich schema and output schema present, the description covers the core purpose, return behavior, best-practice usage, and a privacy nuance. Nothing essential is missing for an agent to invoke it correctly; the schema handles parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter has a description. The description does not introduce new parameter meaning beyond restating the notes privacy and the card-count advice already present in the schema. It adds no new semantics that the schema doesn't already provide, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Build a flashcard set and publish it') and the resource (flashcard set in Vocabit). It also mentions the return value (deep link), distinguishing it from list/get/update/delete siblings. The verb is specific and the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong best-practice context ('Prefer one focused topic and 8-15 cards per set') but does not explicitly contrast with alternatives like update_study_set or when not to use it. It gives clear context for using the tool effectively but lacks an explicit 'use X instead' routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_study_setDelete a study setADestructiveIdempotent
Remove a set from the learner's app. Study history is kept on the backend, but the set disappears from their device. Ask before calling this.
| Name | Required | Description | Default |
|---|---|---|---|
| setId | Yes | Set id returned by create_study_set or list_study_sets |
Output Schema
| Name | Required | Description |
|---|---|---|
| setId | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only. The description adds context by specifying that study history persists on the backend while the device copy is removed, and instructs to seek permission. This goes beyond the annotation flags, giving the agent a precise understanding of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each adding distinct value: purpose, scope nuance, and usage directive. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter destructive operation with an output schema available, the description covers purpose, scope, and a user-consent requirement. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the sole parameter (setId) with a source reference, and the description adds no additional parameter semantics. With 100% schema coverage, the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (remove) and resource (a set from the learner's app), with further scope clarification (backend history kept, device set removed). It does not explicitly name sibling tools, but the verb distinguishes it from create/update/list, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit directive 'Ask before calling this' and clear context of what removal entails. It lacks explicit exclusions or alternatives, but the usage context is obvious for a deletion task and the consent instruction is a strong behavioral guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_set_resultsGet how the learner didARead-only
Read back real study results for a set: which cards the learner marked hard (weakCards), which they never reached (untouchedCards), and per-card review counts. This is the feedback half of the loop — read it before writing the next set, and build the follow-up out of weakCards.
| Name | Required | Description | Default |
|---|---|---|---|
| setId | Yes | Set id returned by create_study_set or list_study_sets | |
| userId | No | Read progress for a different learner than the set owner |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | No | |
| notes | No | |
| setId | Yes | |
| title | Yes | |
| topic | No | |
| summary | Yes | |
| demoNote | No | |
| completed | Yes | |
| weakCards | Yes | |
| dueCardIds | No | |
| untouchedCards | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, so the description doesn't need to restate safety. It adds value by explaining what the read returns (weakCards, untouchedCards, review counts) and how to use it, which goes beyond the schema. No contradiction is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero fluff. The purpose is front-loaded, and the usage guidance is packed into the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since an output schema exists, return values are covered. The description gives the loop context and the key fields, which is sufficient for an agent to select and call correctly. Minor gaps like pagination or error handling are not critical for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both setId and userId are already documented. The description adds no parameter-level detail beyond what the schema provides, so it doesn't compensate further, but it also doesn't detract. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read back') and identifies the resource ('real study results for a set') with concrete fields (weakCards, untouchedCards, per-card review counts). It clearly distinguishes itself from siblings like get_study_set by focusing on performance results, and explicitly frames this as the 'feedback half of the loop'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'read it before writing the next set' and advises building follow-up from weakCards. This tells the agent exactly when to use this tool and how to act on its output, which is more explicit than most tool definitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_study_setGet study set contentsARead-only
Read the full contents of a set — every card, plus the topic and notes you attached when you created it.
| Name | Required | Description | Default |
|---|---|---|---|
| setId | Yes | Set id returned by create_study_set or list_study_sets |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | Yes | |
| notes | No | |
| setId | Yes | |
| title | Yes | |
| topic | No | |
| deepLink | Yes | |
| cardCount | Yes | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to repeat that it's a read operation. The description adds valuable context beyond the annotation by specifying the exact content returned: 'every card, plus the topic and notes you attached when you created it.' This enriches the agent's understanding of what the tool provides without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that starts with the verb 'Read,' immediately conveying the action. There is no fluff or redundancy. It efficiently conveys the scope of the tool in a way that is easy to scan, earning a full score for conciseness and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (has_output_schema=true) and the single parameter is documented in the schema, the description need not explain return formats or parameter formats. The description covers the necessary contextual information—what data is returned (all cards, topic, notes)—which is sufficient for an agent to call the tool correctly. There is no missing information that would impede correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the parameter setId has a clear description ('Set id returned by create_study_set or list_study_sets'). The tool description adds no additional information about the parameter—it doesn't mention setId at all. Since the schema fully documents the parameter, the description does not need to compensate, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Read') and resource ('full contents of a set'), and specifies exactly what is included (every card, topic, notes). This distinguishes it from sibling tools like list_study_sets (which likely provides summary metadata) and get_set_results (which likely returns performance data). The agent can immediately understand what the tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the tool to use when you need the full contents of a study set, but it does not explicitly mention when not to use it or name alternatives. For example, it doesn't say 'use list_study_sets for a summary' or 'use get_set_results for results.' There is no explicit guidance on choosing among the related collection/read tools, leaving the agent to infer when this one is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_study_setsList study setsARead-only
List the sets you created for this learner, newest first, each with a progress summary. Use it to find a setId, or to see at a glance which sets were never opened.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many sets to return, newest first (default 20) | |
| topic | No | Only sets with this exact topic tag | |
| userId | No | Firebase UID of the learner. Omit to use the server default | |
| includeProgress | No | Attach a progress summary to each set (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
| sets | Yes | |
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so read-only safety is covered. The description adds value beyond that by disclosing the scope (sets created for this learner), the newest-first ordering, and that each set carries a progress summary showing whether it was opened. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose is front-loaded, and the second sentence earns its place by adding the two primary use cases. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, read-only/open-world annotations, and 100% schema coverage, the description doesn't need to explain return values or parameters. It covers purpose, scope, ordering, and use cases well. The only minor gap is that it doesn't explicitly route users to the get_study_set/get_set_results siblings for more detail, and it omits pagination specifics — both minor for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (limit, topic, userId, includeProgress) are already well-documented in the schema itself. Under the rubric, this yields a baseline of 3; the description adds no parameter-specific detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (list), resource (study sets), scope (created for this learner), ordering (newest first), and content (progress summary per set). It also frames concrete use cases — finding a setId and spotting never-opened sets — which make its purpose unmistakable and distinct from the singular get_study_set and get_set_results siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use it to find a setId, or to see at a glance which sets were never opened'). However, it does not name alternatives or state when not to use it, such as pointing to get_set_results for detailed results, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notify_learnerPing the learnerA
Send the learner a Telegram message that a set is waiting. Use sparingly — one ping per set, right after you create it.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Custom message. Omit for the default 'your set is ready' ping | |
| setId | Yes | Set id returned by create_study_set or list_study_sets |
Output Schema
| Name | Required | Description |
|---|---|---|
| setId | Yes | |
| notified | Yes | |
| telegramId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag non-read-only, non-idempotent behavior; the description adds the 'use sparingly / one ping' rule, which reinforces the side-effectful nature beyond what annotations state. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with the purpose first and the guidance second. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple notification tool with an output schema; the description covers what it does and when to call it. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage), and the description adds no additional parameter semantics, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (send a Telegram message) and the resource (learner about a set). Clearly distinguishes from the CRUD siblings—it's a notification tool, not a data operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs sparing use and the exact timing ('right after you create it'), which tells the agent when to invoke it. Lacks explicit 'when not to use' or alternatives, but the constraint is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_study_setUpdate a study setAIdempotent
Change a set in place: retitle it, retag it, or add cards. Pass addCards to append (the usual case after reviewing results) or cards to replace the list wholesale — never both. Replacing the cards resets what the learner has already studied.
| Name | Required | Description | Default |
|---|---|---|---|
| cards | No | Replace the whole card list. Cannot be combined with addCards | |
| notes | No | ||
| setId | Yes | Set id returned by create_study_set or list_study_sets | |
| title | No | ||
| topic | No | ||
| addCards | No | Append cards to the existing list. Cannot be combined with cards | |
| visibility | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| setId | Yes | |
| updated | Yes | Which fields changed, e.g. ['title', 'addCards'] |
| cardCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutability (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds a valuable side effect beyond annotations: 'Replacing the cards resets what the learner has already studied,' which is a behavioral consequence not captured in structured fields. It also warns against combining addCards and cards, adding safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences carry all essential information: the action, the two operational modes, the constraint, and a key side effect. No filler, front-loaded with purpose, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 8 parameters, the description provides enough to call it correctly: it explains the main operational choices, the safety constraint, and the meaningful side effect. The output schema covers return details, and remaining parameters are straightforward. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, so the description must compensate. It does so by explaining the two most ambiguous parameters—addCards (append) and cards (replace)—and their mutual exclusivity, plus the learning-reset consequence. Other parameters (title, topic, visibility) are self-explanatory, and the critical ones are well addressed, bridging the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Change a set in place') and lists concrete operations (retitle, retag, add cards), clearly distinguishing it from create/delete/list siblings. The verb 'change' and resource 'study set' are explicit, and the added detail on cards vs. addCards further sharpens the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on choosing between addCards (append, 'the usual case after reviewing results') and cards (replace wholesale), including the 'never both' constraint. It implies when to use the tool (modifying an existing set) but does not directly contrast with create_study_set for new sets; however, the parameter-level usage is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vocabit_healthCheck Vocabit connectionARead-only
Verify the server can reach Vocabit and report which mode it is in (live backend or in-memory demo). Call this first if anything else fails.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| baseUrl | Yes | |
| defaultUserId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description needn't restate safety. It adds value by disclosing that the tool reports the operational mode (live vs demo), which is beyond the annotations. It doesn't elaborate on failure behavior, but the output schema likely covers that, and the description is sufficient for a health check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states purpose and behavior, the second gives usage guidance. No filler, and the most important information (what it does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only health check with an output schema, the description is complete. It states what it verifies, what it reports, and when to call it. The output schema handles return-value details, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, there is nothing for the description to explain. The baseline for 0 params is 4, and the description appropriately does not invent unnecessary parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb 'Verify' and resource 'Vocabit', and specifies the output (mode: live or in-memory demo). It is immediately distinct from siblings, which all handle study sets and notifications, so an agent can easily tell this is a health-check tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Call this first if anything else fails.' This provides a concrete trigger condition and implies it's a diagnostic first step. No ambiguity about when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.3- First observed
create_study_set - First observed
delete_study_set - First observed
get_set_results - First observed
get_study_set - First observed
list_study_sets - First observed
notify_learner - First observed
update_study_set - First observed
vocabit_health
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: health check, CRUD for study sets, results feedback, and learner notification. Even get_study_set and get_set_results are unambiguously separated—one retrieves content, the other study metrics. No two tools appear to do the same thing.
Most tools follow a verb_noun pattern (create_study_set, list_study_sets, update_study_set, delete_study_set, get_study_set, get_set_results). However, vocabit_health deviates from the verb-first style and notify_learner uses a non-set object, so the pattern is not perfectly uniform but remains predictable.
8 tools is well within the ideal 3-15 range and each earns its place in the set lifecycle. The count matches the server's scope—managing study sets with health check and notification—without redundancy or unnecessary bulk.
The tool surface covers the full lifecycle: create, read, update, delete, list, plus results feedback and learner notification. The feedback loop is closed by get_set_results informing update_study_set. Health check aids debugging. No obvious gaps that would cause agent failures.
Maintenance
Related MCP Connectors
Free: turn your AI chats into spaced-repetition vocabulary. 13 tools, reads and writes.
Spaced-repetition flashcards your AI writes, quizzes you on by voice, and schedules with FSRS.
Create, edit, translate, and export SCORM eLearning modules from a connected AI assistant.
Save vocabulary from any AI chat; see each word in every language you know; review it with FSRS.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA bridge that provides AI assistants with access to WaniKani user data and functionality, enabling them to retrieve learning progress, identify difficult items, and offer personalized Japanese language learning assistance.3-

EduBase MCP Serverofficial
AlicenseBqualityAmaintenanceEnables AI assistants to interact with the EduBase educational platform to create quizzes, upload questions, schedule exams, manage educational content, and analyze user results through natural language.138488 npm28MIT- AlicenseNot gradedqualityDmaintenanceBridge between AI assistants and Anki Desktop, enabling automated flashcard management and study document processing.320 npmMIT
- AlicenseNot gradedqualityBmaintenanceConnects AI assistants like Claude to MindDory to automatically capture new vocabulary and grammar mistakes into spaced-repetition flashcards during language practice conversations.MIT