arapodcho/mcp_server_neis_api
If you are the rightful owner of mcp_server_neis_api and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The MCP-Server for 나이스 교육정보 개방 포털 provides access to educational information through APIs.
mcp_server_neis_api
NEIS(나이스) 교육정보 개방 포털 API를 Model Context Protocol(MCP) Server로 노출하는 SSE 기반 서버입니다.
특징
- 전송 방식: Server-Sent Events(SSE)
- 기본 포트:
8000 - 제공 도구(Tools):
get_school_info(school_name): 학교 기본 정보(학교명/학교코드/교육청 등)get_school_schedule(school_code, org_code, from_date, to_date): 학교코드+교육청코드 기반 일정(학사일정)get_school_schedule_by_name(school_name, from_date, to_date, grade=[1,2,3], target_org=None): 학교명으로 바로 일정 조회 (학년 필터 포함)
- 환경변수에 NEIS 서비스 키가 없으면 강등(degraded) 모드로 동작: 각 조회 결과를 최대 5개까지만 반환
환경 설정 (.env)
.env 파일(또는 환경변수)에 다음을 지정하세요:
NEIS_SERVICE_KEY=당신의_서비스_키
대안 변수명: SERVICE_KEY (둘 중 하나만 있어도 됨)
키가 없으면:
- 결과는 최대 5개로 제한되고
message필드에Success (degraded mode: key missing, limited to 5)가 표시됩니다. - 교육청/학교 일정 API 호출 파라미터에서 페이지 크기(
pSize)가 5로 강제됩니다.
설치 & 실행
git clone <repo-url>
cd mcp_server_neis_api
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt # (requirements.txt가 있다면)
python src/server.py # 기본 8000 포트에서 SSE 서버 시작
서버 실행 시 출력 예:
Start MCP server
기본 포트는 FastMCP 내부에서 8000으로 구동됩니다(별도 설정 없을 경우).
MCP Inspector로 테스트하기
MCP Inspector를 사용해 서버를 직접 탐색할 수 있습니다.
시작 명령:
npx @modelcontextprotocol/inspector python ./server.py
그 후 Inspector UI에서 SSE로 연결되어 툴 목록 및 호출을 직접 확인할 수 있습니다.
클라이언트 설정 JSON 예시
MCP 클라이언트(예: VS Code 확장 또는 커스텀 런처)에서 사용할 설정 예시:
{
"mcpServers": {
"neis_org": {
"type": "python",
"command": "python",
"args": ["./src/server.py"],
"transport": {
"type": "sse",
"port": 8000
},
"env": {
"NEIS_SERVICE_KEY": "${env:NEIS_SERVICE_KEY}"
}
}
}
}
port를 생략하면 기본값(8000)을 사용합니다. 환경변수는 OS 또는 런처 설정에서 주입하도록 구성하세요.
툴 상세
get_school_info
입력: school_name (예: 진관초등학교)
반환: { valid, message, school_num, school_name[], school_code[], org_name[], org_code[] }
get_school_schedule
입력: school_code, org_code, from_date, to_date (YYYYMMDD)
반환: { valid, message, schedule_num, event_date[], event_name[], event_type[], event_content[], valid_grade[6][] }
get_school_schedule_by_name
입력: school_name, from_date, to_date, 선택 grade(기본 [1,2,3]), 선택 target_org
반환: 일정 항목 리스트 [ { school_name, event_date, event_name, event_type, event_content, grade } ... ]
강등 모드(degraded)에서 school_info와 schedule 관련 조회 모두 최대 5개 결과만 반환합니다.
날짜 형식
현재 서버 함수는 입력 날짜(from_date, to_date)를 그대로 NEIS API에 전달하므로 YYYYMMDD 형식 사용을 권장합니다.
에러 처리
- NEIS API 오류 시
valid=False와 함께message필드에 원인 메시지 반환 - 파싱 오류 시
Error parsing ...메시지
개발 팁
.env변경 후 서버를 재시작해야 새 키가 반영됩니다.- 향후 확장: 캐시 적용, 일정 중복 제거, 타임아웃/리트라이 로직 추가 가능
라이선스
본 프로젝트의 라이선스는 저장소 내 LICENSE 파일을 참조하세요.