A local MCP server that enables IELTS speaking practice by managing training selections, session reviews, practice history, and dashboard data through tools like initialize_ielts_workspace, set_training_selection, save_session_review, and get_dashboard_data, all stored locally on the learner's computer.
Warning. Serious findings were identified. Review the full report before connecting. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
lindsey-labs
Source: Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
M8ven verifies MCPs across every public registry — install directly from whichever one you prefer.
Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.
@modelcontextprotocol/sdk has cross-client data leak via shared server/transport instance reuse
Anthropic's MCP TypeScript SDK has a ReDoS vulnerability
Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default
Electron: Use-after-free in offscreen child window paint callback
Electron: Use-after-free in WebContents fullscreen, pointer-lock, and keyboard-lock permission callbacks
IELTS_SPEAKING_DASHBOARD_PORTIELTS_SPEAKING_DATA_DIRIELTS_SPEAKING_EMBEDDEDIELTS_SPEAKING_SAMPLE_BANK_ONLYAll four hints declared on every tool
9/9 tools missing one or more hints — initialize_ielts_workspace (missing: idempotentHint); set_training_selection (missing: idempotentHint); open_dashboard (missing: idempotentHint), +6 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Tool annotations match behaviour
4 read-only tools perform write/delete/exec — get_training_context (line 70: fs.mkdir(reportsDir, { recursive: true })); list_question_bank (line 70: fs.mkdir(reportsDir, { recursive: true })); list_practice_history (line 70: fs.mkdir(reportsDir, { recursive: true }))
Either remove the readOnlyHint:true annotation, or remove the write/delete call from the tool handler.
Destructive tools are labelled
1 tool perform destructive updates without destructiveHint — open_dashboard deletes at line 670 (fs.unlink(resolved))
Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.
Descriptions match behaviour
3 tools describe read intent but their handlers mutate — get_training_context (line 70: fs.mkdir(reportsDir, { recursive: true })); list_question_bank (line 70: fs.mkdir(reportsDir, { recursive: true })); list_practice_history (line 70: fs.mkdir(reportsDir, { recursive: true }))
Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.
Tool inputs are validated
6/9 tool handlers declare input schemas (67%)
Declare an inputSchema with zod/joi/yup on every tool definition.
Tests exist
No test files found
Add tests that exercise each declared tool.
No eval / new Function
1 eval() or new Function() call — dynamic code execution
Replace eval / Function with explicit parsing or safer alternatives.
Production dependencies are patched
0 critical, 3 high severity in production deps — @modelcontextprotocol/sdk@1.17.5 (high), @modelcontextprotocol/sdk@1.17.5 (high)
Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.
Dev dependencies
4 critical/high in dev-only deps (does not ship to users)
Upgrade dev dependencies when convenient.
Tool description accuracy
3 tools have description/behavior mismatches: get_training_context: description implies read-only but handler writes/deletes/executes; list_question_bank: description implies read-only but handler writes/deletes/executes; list_practice_history: description implies read-only but handler writes/deletes/executes
Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/lindsey-labs-ielts-speaking-coach-t6sjdr)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check