korea-university-mcp
The server integrates Korean university public data APIs into a single MCP interface, allowing you to discover, describe, execute, and diagnose access to datasets. Key capabilities:
Discover datasets: Search available university information datasets and operations by keyword (e.g., "재학생 충원율", "장학금", "교원") or domain categories (basic info, school, major, student, faculty/research, education conditions, finance, industry-academia cooperation).
Describe operations: Get official source, base URL, and descriptions for specific datasets or operations.
Execute API calls: Run actual Public Data Portal API operations with custom parameters, with optional raw XML debugging output.
Diagnose connectivity: Use the built-in
doctortool to check service key configuration, registry status, and optionally probe a live API call.Flexible deployment: Run as a local STDIO server, a remote stateless HTTP server, deploy to Cloudflare Workers, or use the command-line interface.
Secure key management: Pass API keys per request via headers or query parameters in stateless modes, without logging sensitive data.
Structured error reporting: Receive MCP error codes, user-friendly explanations, solutions, retry status, and Public Data Portal status codes.
Click on "Deploy 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., "@korea-university-mcpFind datasets about university student dropout rates."
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.
korea-university-mcp
대학알리미와 공공데이터포털의 분야별 대학정보 API를 하나의 MCP 서버와 CLI로 통합하는 프로젝트입니다.
현재 버전은 데이터 접근 기반 구축용 MVP입니다. 정원조정, 평가등급, 정책판단 등의 업무 로직은 포함하지 않습니다.
현재 지원 범위
대학 기본정보
대학 및 전문대학정보
대학별 학과정보
학생 현황
교원·연구 현황
교육여건 현황
재정 현황
산학협력 현황
공공데이터포털 서비스키는 한 번만 설정하며, 각 분야 API의 승인 상태는 공공데이터포털에서 별도로 관리합니다.
Related MCP server: sbinfo
설치
npm install
npm run build환경변수:
DATA_GO_KR_SERVICE_KEY=발급받은키MCP 서버 실행
npx korea-university-mcp또는 개발 중:
npm run devRemote MCP 실행
기존 STDIO 및 MCPB와 별도로 stateless Streamable HTTP 서버를 실행할 수 있습니다.
npm run build
npm run start:httpRemote MCP 엔드포인트는 http://localhost:3000/mcp이고, 상태 확인 주소는 http://localhost:3000/health입니다. 각 사용자는 자신의 공공데이터포털 서비스키를 요청마다 전달합니다.
커스텀 헤더를 설정할 수 있으면 다음 방식이 권장됩니다.
x-data-go-kr-service-key: 발급받은키Korean Law 방식과 같은 apikey 헤더도 지원합니다. 커스텀 헤더를 설정할 수 없는 커넥터에서는 다음 URL을 사용할 수 있습니다.
https://example.com/mcp?serviceKey=발급받은키짧은 별칭인 ?key=도 지원합니다. 쿼리 방식은 브라우저 기록이나 리버스 프록시 접근 로그에 남을 수 있으므로, 배포 환경에서도 URL 쿼리를 마스킹하도록 설정해야 합니다. 이 서버는 요청 URL이나 헤더를 로그에 기록하지 않습니다. Authorization 헤더는 MCP 서버 인증용으로 예약하며 공공데이터포털 서비스키로 사용하지 않습니다.
Remote 요청에 사용자 키가 없으면 STDIO/MCPB용 DATA_GO_KR_SERVICE_KEY로 되돌아가지 않습니다. 이 경우 데이터 검색·설명 도구는 사용할 수 있지만, 실제 API 호출은 키 누락 오류를 반환합니다.
Cloudflare Workers 무료 배포
0.1.3부터 별도 서버 요금 없이 Cloudflare Workers 무료 플랜에 stateless Remote MCP를 배포할 수 있습니다. 기존 STDIO·MCPB·Node HTTP 실행 방식은 그대로 유지됩니다.
npm install
npm run worker:check
npx wrangler login
npm run worker:deploy배포가 끝나면 Wrangler가 표시하는 workers.dev 주소에 /mcp를 붙여 사용합니다.
https://korea-university-mcp.<계정-subdomain>.workers.dev/mcpCloudflare에는 DATA_GO_KR_SERVICE_KEY를 비밀값이나 환경변수로 등록하지 않습니다. 각 사용자가 자신의 키를 매 요청에 전달하며, 서버는 키·요청 URL·요청 헤더를 출력하지 않습니다. 가능하면 URL 쿼리보다 x-data-go-kr-service-key 헤더를 사용하십시오. 플랫폼 자체의 엣지 로그에 쿼리 문자열이 포함될 가능성까지 피하려면 헤더 방식이 필요합니다.
기본 설정은 다음 보호 기능을 적용합니다.
/mcp요청을 Cloudflare Rate Limiting으로 위치별 분당 120회까지 허용URL 호스트와
Host헤더 불일치 차단브라우저
Origin은UNIVERSITY_MCP_ALLOWED_ORIGINS에 명시한 값만 허용응답 캐시 방지 및 Referrer를 통한 URL 유출 방지
1MiB를 초과한다고 명시된 요청 본문 차단
서버 간 MCP 클라이언트처럼 Origin 헤더가 없는 요청은 허용됩니다. 브라우저 기반 클라이언트를 연결해야 할 때만 wrangler.jsonc의 UNIVERSITY_MCP_ALLOWED_ORIGINS에 쉼표로 구분한 정확한 Origin을 입력하십시오. Cloudflare Worker에서는 내장 레지스트리만 사용하며, UNIVERSITY_MCP_REGISTRY_FILE 외부 파일 확장은 Node STDIO·MCPB·HTTP에서만 지원합니다.
공식 문서: Cloudflare Remote MCP, Workers 무료 플랜, Rate Limiting 바인딩
GitHub Actions 자동 배포
main 브랜치에 반영된 변경은 타입검사, 테스트, 빌드, 보안 감사와 Worker 번들 검사를 모두 통과한 뒤 Cloudflare에 자동 배포됩니다. 저장소에는 다음 Actions 설정이 필요합니다.
Secret
CLOUDFLARE_API_TOKEN: 최소 권한의 Cloudflare 배포 토큰Variable
CLOUDFLARE_ACCOUNT_ID: 배포 대상 Cloudflare 계정 IDVariable
CLOUDFLARE_API_TOKEN_EXPIRES_ON: 배포 토큰 만료일 (YYYY-MM-DD)Variable
DATA_GO_KR_API_EXPIRES_ON: 운영자가 사용하는 대학정보 API 중 가장 이른 이용기간 만료일 (YYYY-MM-DD, 선택)
배포가 끝나면 워크플로가 공개 /health 주소까지 확인합니다. 자격 증명 만료일은 매주 확인하며, 60일 전부터 실제 비밀값을 포함하지 않는 GitHub 이슈를 생성합니다. 자세한 교체 절차는 자격 증명과 만료 대응을 참고하십시오.
자동 설정
npx korea-university-mcp setupCLI
korea-university list
korea-university list --query "중도탈락"
korea-university describe student getComparisonDropOutStudentCrntSt
korea-university call student getComparisonDropOutStudentCrntSt --params '{"pageNo":1,"numOfRows":100}'
korea-university doctor
korea-university httpMCP 도구
도구 | 기능 |
| 분야·지표 검색 |
| 데이터셋·오퍼레이션 설명 |
| 분야별 API 실행 |
| 키·레지스트리·실호출 진단 |
오류 처리
오류를 감추지 않습니다. 다음 정보를 구조화하여 반환합니다.
MCP 오류코드
사용자용 설명
해결방법
재시도 가능 여부
공공데이터포털 HTTP 상태·결과코드·결과메시지
요청 ID
서비스키와 전체 요청 URL은 노출하지 않습니다.
중요: 실제 요청 파라미터
분야별 API는 오퍼레이션마다 요청변수가 다릅니다. MVP의 execute_operation은 공공데이터포털 Swagger 명세의 요청변수를 그대로 전달합니다. 서비스키를 설정한 뒤 실제 응답을 검증하여 오퍼레이션별 필수 파라미터와 응답 스키마를 단계적으로 레지스트리에 추가해야 합니다.
배포
로컬 STDIO: 기본 실행
원격 stateless Streamable HTTP:
korea-university http또는npm run start:http무료 원격 배포:
npm run worker:deploy로 Cloudflare Workers 배포Docker:
Dockerfilenpm: 태그 푸시 시 GitHub Actions 배포
Claude Code 플러그인:
.claude-plugin및.mcp.json
출처
공공데이터포털 한국대학교육협의회 대학정보 API
Model Context Protocol 공식 TypeScript SDK
라이선스
MIT
Available Tools
4 toolsdescribe_operationAPI 오퍼레이션 설명C
특정 데이터셋 또는 오퍼레이션의 공식 출처·기본 URL·설명을 반환합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| datasetId | Yes | ||
| operation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does indicate the tool returns specific information (official source, base URL, description), implying a read-only operation, but it does not disclose error handling, required permissions, or any side effects. This is minimal but non-tautological disclosure.
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, compact sentence with no redundant filler. It front-loads the core purpose immediately, though it could be slightly more specific about parameter roles without adding length.
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 no output schema and no annotations, the description alone is insufficient to fully understand the tool's behavior, error cases, or how it relates to sibling tools. It conveys the basic return type but leaves out usage context and expected input-output behavior.
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 0% and the description only vaguely ties parameters to 'dataset or operation', without explaining the exact format or meaning of datasetId and operation. The required/optional relationship is left to the schema's required array, and the description adds little beyond that.
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 ('returns') and resource ('official source·base URL·description for a specific dataset or operation'), which clearly conveys the tool's function. However, it does not explicitly differentiate from sibling tools like discover_datasets or execute_operation, though the focus on metadata retrieval is implicit.
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 no guidance on when to use this tool versus alternatives such as discover_datasets or execute_operation. It does not mention prerequisites, exclusions, or typical use cases, leaving the agent to infer appropriate usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_datasets대학정보 API 검색B
등록된 대학정보공시 데이터셋과 오퍼레이션을 키워드·분야로 검색합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 검색어. 예: 재학생 충원율, 장학금, 교원 | |
| domain | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only mentions search by keyword/domain. It does not disclose whether the operation is read-only, what the return format is, whether results include both datasets and operations, or any other behavioral traits.
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, concise sentence that is front-loaded with the core purpose. It contains no filler or redundant information.
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?
The tool has no output schema and no annotations, so the description must explain return values and usage context; it does neither. It lacks information about output structure, result format, or typical usage flow with sibling tools, making it insufficient for a complete understanding.
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 50% (query has a description, domain has only an enum). The description adds the concept of searching by 'keyword·domain', which maps to the two parameters. However, it does not elaborate on the meaning of domain values or how the two parameters interact, providing only partial compensation.
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?
Description clearly states the tool searches for registered university information disclosure datasets and operations by keyword and domain, using a specific verb ('search') and resource. It distinguishes itself from sibling tools like describe_operation and execute_operation by focusing on discovery rather than subsequent actions.
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?
No guidance is provided on when to use this tool versus alternatives such as describe_operation or execute_operation. The description only states what the tool does, not the context in which it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctor연결 진단C
서비스키 설정, 레지스트리 상태를 확인하고 선택적으로 실제 API 호출을 시험합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| probe | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It says the tool 'checks' settings/registry and 'tests' API calls, but does not state whether these are read-only operations, whether the API call test can cause side effects, or what constitutes a successful/failed check. This lack of detail is significant for a tool that might execute actual calls.
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 sentence that is concise and front-loaded with the core action ('checks'), followed by optional behavior. It contains no redundancies or filler, making it appropriately compact for the information it conveys.
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 the tool's nested schema with required fields (probe.datasetId, probe.operation) and absence of output schema or annotations, the description is too sparse. It does not explain the purpose of the probe object, expected return values, or error handling. This leaves significant gaps for the agent to use the tool correctly.
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 0%, so the description must compensate by explaining parameter meaning. However, it does not mention any parameter names or describe datasetId, operation, or params. The only hint is the word 'probe' in the schema, which aligns with the tool's testing action, but the field semantics remain completely unexplained.
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 tool's specific diagnostic actions: checking service key settings ('서비스키 설정'), registry status ('레지스트리 상태'), and optionally testing actual API calls ('선택적으로 실제 API 호출을 시험'). This distinguishes it from siblings like execute_operation and discover_datasets, which have different purposes.
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 no explicit guidance on when to use this tool versus alternatives. It neither mentions siblings nor provides exclusions or specific use cases. The optional API call testing is implied as a diagnostic feature, but there is no clear 'when to use' or 'when not to use' direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_operation대학정보 API 실행B
등록된 공공데이터포털 대학정보 API 오퍼레이션을 실행합니다. params는 해당 Swagger 명세의 요청변수명을 그대로 사용합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| datasetId | Yes | ||
| operation | Yes | ||
| includeRaw | No | 디버깅용 전체 XML 파싱 결과 포함 여부 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only mentions execution and the Swagger-based param naming. It does not mention side effects, safety, error behavior, output format, or authentication requirements, leaving a significant transparency gap.
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, front-loaded sentences with no wasted words. The essential information about purpose and parameter naming is delivered efficiently.
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 4 parameters, nested objects, and no output schema, the description is too sparse. It omits how to discover registered operations, what the response looks like, error handling, and safety implications. The Swagger note helps but leaves many operational gaps.
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 low (25%), but the description adds a crucial semantic: 'params' keys must match the Swagger spec exactly. It does not explain datasetId or operation, though these are somewhat self-evident from names. Partial compensation for low schema coverage.
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 tool executes registered university information API operations, with a specific verb ('실행합니다') and resource. It distinguishes from siblings like describe_operation and discover_datasets by focusing on execution.
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?
Usage context is implied: the tool executes operations, suggesting it is for running rather than describing or discovering. However, it does not explicitly state when to use it versus alternatives like describe_operation to obtain Swagger params first, nor mention any exclusions.
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.
4 tool updates
v0.1.0- First observed
describe_operation - First observed
discover_datasets - First observed
doctor - First observed
execute_operation
TDQS
Scored across 4 tools
Each tool has a distinct purpose: discover datasets/operations, describe an operation's metadata, execute an operation, and check service health. No overlaps or ambiguous boundaries.
Most names follow a consistent verb_noun pattern (describe_operation, execute_operation, discover_datasets). The exception is 'doctor', which is a valid verb but less conventional for a health check, creating a minor deviation.
Four tools is an appropriate, well-scoped set for a university data API client: discovery, metadata, execution, and health check. Each tool earns its place.
The tool set covers the full lifecycle for consuming public data APIs: find operations, inspect their parameters, execute them, and verify connectivity. No obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
Seoul Open Data MCP — city data for Seoul via the Seoul Open Data Plaza API
- mcpweaveOAuthcom.mcpweave
Korea-native MCP gateway: Korean commerce, payments, messaging, gov & finance APIs for AI agents.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Cloudflare Workers MCP server: govdata-korea
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server to search and retrieve regulations from 14 Korean universities' regulation management systems. Supports querying, listing, and viewing full text or specific articles.48 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for querying Korean school budget, unit projects, and special plans through the School Alert (학교알리미) open data API.MIT
- AlicenseNot gradedqualityAmaintenanceBridges Korean public data APIs (data.go.kr) into MCP with automatic OpenAPI normalization, quota management, caching, and backoff. Enables natural language interaction with Korean government data through MCP.Apache 2.0
- FlicenseNot gradedqualityBmaintenanceMCP server enabling AI assistants to query Myongji College data, including real-time library seat availability, campus notices, department lists, and course search (with user login). All tools are read-only and can be composed to answer complex campus-related questions.-