TOEIC Speaking MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TOEIC Speaking MCP ServerLet's start TOEIC speaking practice."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π― TOEIC Speaking MCP Server
ν μ΅ μ€νΌνΉ λ§λ₯λ¬Έμ₯ μκΈ° ν μ€νΈλ₯Ό μν MCP μλ²μ λλ€. Claude Desktop μ±κ³Ό μ°λνμ¬ μμ±μΌλ‘ ν μ΅ μ€νΌνΉ λ¬Έμ₯μ νμ΅νκ³ μ¦μ νΌλλ°±μ λ°μ μ μμ΅λλ€.
μΆμ²: μ νλΈ μκ³ν λΌμ λμ€
π λͺ©μ°¨
Related MCP server: mcp-server-pronunciation
β¨ μ£Όμ νΉμ§
π€ μμ± νμ΅: Claude Desktop μμ± μΈμμΌλ‘ μμ°μ€λ¬μ΄ νμ΅
π§ μ μν μΆμ : mastery_score κΈ°λ° μ·¨μ½ λ¬Έμ₯ μ°μ μΆμ
β‘ μ¦μ νΌλλ°±: ν€μλ λ§€μΉ λΆμμΌλ‘ μ€μκ° νμ΅ ν¨κ³Ό νμΈ
π μλ μ μ κ΄λ¦¬: λ΅λ³ μ νλμ λ°λ₯Έ μλ μ μ μ λ°μ΄νΈ (0-100)
π νμ μμ μ±: TypeScript strict λͺ¨λ + Zod μ€ν€λ§ κ²μ¦
ποΈ κΈ°μ μ€ν
Framework: NestJS 11 + TypeScript 5 (strict mode)
Protocol: Model Context Protocol (MCP) SDK
Database: Supabase PostgreSQL
Validation: Zod schema validation
Architecture: Domain-driven layered architecture
π μ€μΉ λ° μ€μ
1. μμ‘΄μ± μ€μΉ
npm install2. νκ²½ λ³μ μ€μ
.env νμΌ νμΈ:
SUPABASE_URL=your_supabase_url
SUPABASE_ANON_KEY=your_supabase_anon_key3. λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ
Supabase SQL Editorμμ migrate.sql μ€ν:
-- mastery_score, last_reviewed_at, review_count μ»¬λΌ μΆκ°
-- μΈλ±μ€ μμ±4. μν λ°μ΄ν° μ½μ (μ ν μ¬ν)
node seed.js5. λΉλ
npm run build6. Claude Desktop μ€μ
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"toeic-speaking": {
"command": "node",
"args": ["/μ λ/κ²½λ‘/dist/main.js"],
"env": {
"SUPABASE_URL": "your_url",
"SUPABASE_ANON_KEY": "your_key"
}
}
}
}β οΈ κ²½λ‘λ₯Ό μ€μ νλ‘μ νΈ κ²½λ‘λ‘ μμ ν Claude Desktop μ¬μμ
π οΈ MCP λꡬ
1. get_quiz_sentence - λ¬Έμ μΆμ
νλΌλ―Έν°:
mode(μ ν):'weak_first'|'random'(κΈ°λ³Έ:'weak_first')part(μ ν): ννΈ λ²νΈ νν°
μλ΅:
{
"id": "uuid",
"sentence_ko": "μ΄ μ¬μ§μ 곡μμμ μ°ν μ¬μ§μ
λλ€.",
"part": 2,
"current_mastery": 0
}2. verify_answer - λ΅λ³ κ²μ¦
νλΌλ―Έν° (νμ):
sentence_id: λ¬Έμ₯ IDuser_answer: μ¬μ©μ λ΅λ³ (μμ΄ λ¬Έμ₯)
μλ΅:
{
"success": true,
"original_sentence": "This is a picture taken at a park.",
"matched_keywords": ["picture", "taken", "park"],
"missing_keywords": [],
"match_rate": "100.0%",
"score_change": 10,
"feedback": "Perfect! All keywords matched. Score increased by 10 points."
}μ μ κ·μΉ:
λ§€μΉλ₯ | μ μ λ³ν |
100% | +10 |
70-99% | +5 |
50-69% | 0 |
0-49% | -5 |
π¬ μ¬μ© μμ
π€ "ν μ΅ μ€νΌνΉ μ°μ΅ μμν κ²μ"
π€ [get_quiz_sentence νΈμΆ]
λ¬Έμ : "μ΄ μ¬μ§μ 곡μμμ μ°ν μ¬μ§μ
λλ€."
(νμ¬ μλ ¨λ: 0μ )
π€ [μμ±] "This is a picture taken at a park"
π€ [verify_answer νΈμΆ]
β
μλ²½ν©λλ€!
- ν¬ν¨λ ν€μλ: picture, taken, park (3/3)
- λ§€μΉλ₯ : 100.0%
- μ μ λ³ν: +10μ π νλ‘μ νΈ κ΅¬μ‘°
src/
βββ main.ts # MCP μλ² μνΈλ¦¬ν¬μΈνΈ
βββ app.module.ts # λ£¨νΈ λͺ¨λ
βββ config/
β βββ supabase.config.ts # Supabase DI Provider
βββ types/
β βββ sentence.interface.ts # TypeScript μΈν°νμ΄μ€
βββ mcp/
β βββ mcp.module.ts
β βββ mcp.service.ts # MCP λꡬ μ μ + Zod κ²μ¦
βββ quiz/ # Quiz λλ©μΈ
β βββ quiz.module.ts
β βββ quiz.service.ts # λ¬Έμ μΆμ λ‘μ§
β βββ quiz.repository.ts # DB 쿼리
βββ answer/ # Answer λλ©μΈ
βββ answer.module.ts
βββ answer.service.ts # ν€μλ λ§€μΉ μκ³ λ¦¬μ¦
βββ answer.repository.ts # μ μ μ
λ°μ΄νΈμν€ν μ²:
Claude Desktop (stdio)
β
MCP Layer (Zod κ²μ¦)
β
Domain Layer (Quiz/Answer)
β
Supabase PostgreSQLποΈ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§
μ»¬λΌ | νμ | μ€λͺ |
| uuid | PK |
| integer | TOEIC ννΈ λ²νΈ |
| text | μμ΄ μλ¬Έ (μ λ΅) |
| text | νκ΅μ΄ λ²μ (λ¬Έμ ) |
| text[] | ν΅μ¬ ν€μλ λ°°μ΄ |
| integer | νμ΅ μλ ¨λ (0-100) |
| timestamptz | λ§μ§λ§ λ³΅μ΅ μκ° |
| integer | μ΄ λ³΅μ΅ νμ |
μΈλ±μ€:
idx_mastery_score: mastery_scoreidx_part_mastery: (part, mastery_score)
π§ νΈλ¬λΈμν
MCP μλ²κ° 보μ΄μ§ μλ κ²½μ°
λΉλ νμΈ:
npm run buildνμΌ νμΈ:
ls dist/main.jsμλ μ€ν:
node dist/main.jsClaude Desktop λ‘κ·Έ νμΈ:
View > Toggle Developer Tools > ConsoleClaude Desktop μμ ν μ¬μμ
λ°μ΄ν°λ² μ΄μ€ μ°κ²° μ€λ₯
claude_desktop_config.jsonμenvμΉμ νμΈstdio νκ²½μμλ
.envνμΌ λμ μ€μ νμΌμ νκ²½ λ³μ νμSupabase νλ‘μ νΈ νμ± μν νμΈ
migrate.sqlμ€ν νμΈ
νμ μλ¬
rm -rf node_modules package-lock.json
npm install
npm run buildπ οΈ κ°λ° λͺ λ Ήμ΄
# λΉλ
npm run build
# κ°λ° λͺ¨λ
npm run start:dev
# μ€ν
npm start
# μν λ°μ΄ν°
node seed.js
# νμ
체ν¬
npx tsc --noEmitπ νμ΅ ν
λ§€μΌ 10-15λΆ κΎΈμ€ν μ°μ΅
weak_first λͺ¨λ νμ©μΌλ‘ μ·¨μ½ λ¬Έμ₯ μ§μ€ 곡λ΅
ν€μλ μ€μ¬ νμ΅ (μ 체 λ¬Έμ₯λ³΄λ€ ν΅μ¬ ν€μλ λ¨Όμ μκΈ°)
μμ± μ λ ₯ μ¬μ©μΌλ‘ λ°μ μ°μ΅ λ³ν
μ μ 80μ μ΄μ λλ©΄ μλμΌλ‘ λ€λ₯Έ λ¬Έμ₯ μΆμ
π ν₯ν κ³ν
187κ° μ 체 λ¬Έμ₯ λ°μ΄ν° μΆκ°
Part 3, 4, 5 μ§μ
νμ΅ ν΅κ³ λμ보λ
μ¬μ©μλ³ νμ΅ κΈ°λ‘
λ°μ νκ° API μ°λ
π μ°Έκ³ μλ£
π λΌμ΄μ μ€
ISC
Version: 1.0.0 | Last Updated: 2026-03-15
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/doy00/mcp-toeic-speaking-sentences'
If you have feedback or need assistance with the MCP directory API, please join our Discord server