PoomSchool MCP Server
Helps parents of multicultural or North Korean background primary school children translate and understand school notices, converting them into actionable tasks like preparing items and meeting deadlines.
README
PoomSchool(품스쿨) MCP Server
초등학생 자녀를 둔 다문화가정 및 북한이탈주민·북한배경 가정의 부모를 위한 학교생활 관리
Remote MCP Server입니다. MCP 식별자는 poomschool이며, Streamable HTTP 전송 방식의
Stateless MCP 서버로 구현되어 있습니다.
핵심 사용자는 아이가 아니라 부모입니다. 품스쿨은 학교 안내문을 번역만 하는 것이 아니라 부모가 해야 할 일, 아이에게 알려줄 일, 준비물, 마감일, 비용, 제출 방법 등 실행 가능한 정보로 변환합니다.
기술 스택
- TypeScript 5.9 / Node.js 20+ (Active LTS)
- 공식 MCP TypeScript SDK
@modelcontextprotocol/sdk1.29.0 - Express 5 (SDK와 함께 검증된 Streamable HTTP 전송)
- Zod 3.25
- PostgreSQL + Prisma ORM
6.19.3 - OAuth 2.1 Bearer Token 검증 (jose)
- Pino 구조화 로깅
- Vitest / ESLint / Prettier
- Docker / Docker Compose
프로젝트 구조
src/
index.ts 서버 엔트리포인트
server/ McpServer 팩토리, Streamable HTTP, 프로토콜 버전
tools/ 10개 MCP Tool 구현
services/ 번역/분석/용어집/태스크/마크다운 렌더러, AI Provider
auth/ OAuth 2.1 Resource Server (Bearer 검증, scope, metadata)
database/ Prisma 클라이언트, Repository
security/ Origin 검증, rate limit, 보안 헤더, 로그 마스킹
schemas/ Zod 입력 스키마
config/, errors/, utils/ 환경변수, 오류 처리, 유틸리티
prisma/ schema.prisma, migrations
tests/ unit / integration / security / privacy / multilingual / performance
docs/ OAuth, 개인정보, 다국어 정책, PlayMCP 등록 문서
scripts/ MCP Inspector 실행, 성능 벤치마크
로컬 실행
1) 의존성 설치
npm install
2) PostgreSQL 실행
Docker Compose로 PostgreSQL만 실행할 수도 있고, 로컬에 이미 설치된 PostgreSQL을 사용할 수도 있습니다.
docker compose up -d postgres
3) 환경변수 설정
cp .env.example .env
.env에서 최소한 DATABASE_URL을 로컬 PostgreSQL에 맞게 조정하세요. 로컬 개발에서는
AUTH_DISABLED=true, AI_PROVIDER=mock으로 시작하는 것을 권장합니다.
4) Prisma 마이그레이션
npm run prisma:migrate
5) 개발 서버 실행
npm run dev
기본적으로 http://localhost:3000/mcp에서 서비스됩니다.
테스트 / Lint / Typecheck / Build
테스트는 실제 PostgreSQL(기본값: poomschool_test 데이터베이스)과 MockAiProvider를
사용하며, 실제 Anthropic API를 호출하지 않습니다.
# 테스트용 DB 준비 (최초 1회)
createdb poomschool_test
DATABASE_URL="postgresql://<user>@localhost:5432/poomschool_test?schema=public" npx prisma migrate deploy
npm run lint
npm run typecheck
npm test
npm run build
성능 벤치마크
DATABASE_URL="postgresql://<user>@localhost:5432/poomschool_test?schema=public" npm run benchmark
list_tasks, complete_task, explain_term(용어집 캐시 hit), set_parent_preferences,
analyze_notice(MockAiProvider), translate_notice(MockAiProvider), weekly_brief를 각 100회
호출해 평균/p50/p95/p99/최소/최대/실패율을 출력합니다. p99가 3,000ms를 초과하면 스크립트가
실패(exit code 1)합니다.
주의: 이 벤치마크는 MockAiProvider 기준입니다. 실제 AnthropicAiProvider의 성능은
네트워크 상태와 모델 응답 시간에 따라 달라지며 별도로 측정해야 합니다.
Docker
docker build -t poomschool-mcp .
docker compose up -d
Dockerfile은 multi-stage build, non-root 사용자 실행, healthcheck를 포함합니다. 컨테이너
시작 시 prisma migrate deploy를 실행한 뒤 서버를 시작합니다(단일 인스턴스 배포 기준이며,
다중 인스턴스 운영 시에는 마이그레이션을 별도 단계로 분리하는 것을 권장합니다).
이 개발 환경에는 Docker/Podman CLI가 설치되어 있지 않아 실제
docker build실행 자체는 검증하지 못했습니다(미검증). Dockerfile/구성 파일은 공식 모범 사례를 따르며, Docker가 설치된 환경에서 위 명령으로 검증해야 합니다.
MCP Inspector로 검증하기
npm run dev
# 다른 터미널에서
bash scripts/inspect.sh
Inspector에서 다음을 확인합니다.
- Streamable HTTP 연결 (
http://localhost:3000/mcp) initialize/ protocolVersion negotiation (2025-03-26 ~ 2025-11-25)tools/list: 정확히 10개, 모든 annotations 존재, 모든 description에PoomSchool(품스쿨)포함- 각 Tool 호출 결과가 한국어 Markdown인지 확인
- 잘못된 입력에 대해
isError:true가 반환되는지 확인 AUTH_DISABLED=false일 때 Authorization 헤더 없이 호출하면 401이 반환되는지 확인
OAuth 설정
docs/oauth-setup.md를 참고하세요. issuer, audience, JWKS, scope, PKCE, PlayMCP Redirect URI 설정, 연동 해제 절차를 다룹니다.
PlayMCP 등록
docs/playmcp-registration.md에 등록값과 체크리스트를 정리했습니다.
개인정보 삭제 절차
- 사용자가 삭제를 요청하거나 PlayMCP 연동을 해제하면 운영자는
oauthSubject기준으로UserProfile,SchoolTask,AnalysisCache레코드를 완전히 삭제합니다. - 자세한 내용은 docs/privacy-policy.md와 docs/oauth-setup.md의 "데이터 삭제 절차"를 참고하세요.
다국어 정책
docs/multilingual-policy.md에 언어 자동 감지, BCP-47
사용 규칙, 원문 보존 규칙, 설명 모드(general/multicultural_parent/north_korean_parent)를
정리했습니다.
알려진 제한사항 (MVP 범위)
- 이미지 OCR, 사진 속 가정통신문 자동 인식 미지원
- 카카오톡 대화/알림톡 자동 수집 미지원
- 담임교사에게 메시지를 자동 전송하지 않음 (부모가 직접 확인 후 전송)
- 아이용 챗봇, 숙제 정답 제공 없음
- 학교 포털 자동 로그인, 교육지원 자격 자동 확정 없음
- 학교폭력 여부 판정, 의료/심리 진단, 성적/행동 평가 없음
- 정부 기관 서류 자동 제출 없음
AnthropicAiProvider는 코드상 구현되어 있으나 실제 Anthropic API 키로 호출 검증은 이 환경에서 수행하지 못했습니다(테스트는 MockAiProvider만 사용). 실제 배포 전AI_PROVIDER=anthropic설정으로 별도 검증이 필요합니다.- Docker build 자체는 이 개발 환경에 Docker CLI가 없어 미검증입니다.
운영 장애 대응 (요약)
/healthz: 프로세스 생존 확인/readyz: PostgreSQL 연결 상태 확인 (SELECT 1)- AI Provider 타임아웃(
AI_TIMEOUT_MS, 기본 2500ms) 초과 시 한국어 오류 메시지 반환, 결과를 추측해 반환하지 않음 - AI 응답이 스키마 검증에 실패하면 최대 1회 복구 요청 후 실패 시 안전한 오류 반환
- 구조화 로그(Pino)에 Authorization 헤더, 안내문 원문, 부모 메시지 원문, 아이 별칭을 마스킹하여 기록하지 않음
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。