Skip to main content
Glama

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 dev

Remote MCP 실행

기존 STDIO 및 MCPB와 별도로 stateless Streamable HTTP 서버를 실행할 수 있습니다.

npm run build
npm run start:http

Remote 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/mcp

Cloudflare에는 DATA_GO_KR_SERVICE_KEY를 비밀값이나 환경변수로 등록하지 않습니다. 각 사용자가 자신의 키를 매 요청에 전달하며, 서버는 키·요청 URL·요청 헤더를 출력하지 않습니다. 가능하면 URL 쿼리보다 x-data-go-kr-service-key 헤더를 사용하십시오. 플랫폼 자체의 엣지 로그에 쿼리 문자열이 포함될 가능성까지 피하려면 헤더 방식이 필요합니다.

기본 설정은 다음 보호 기능을 적용합니다.

  • /mcp 요청을 Cloudflare Rate Limiting으로 위치별 분당 120회까지 허용

  • URL 호스트와 Host 헤더 불일치 차단

  • 브라우저 OriginUNIVERSITY_MCP_ALLOWED_ORIGINS에 명시한 값만 허용

  • 응답 캐시 방지 및 Referrer를 통한 URL 유출 방지

  • 1MiB를 초과한다고 명시된 요청 본문 차단

서버 간 MCP 클라이언트처럼 Origin 헤더가 없는 요청은 허용됩니다. 브라우저 기반 클라이언트를 연결해야 할 때만 wrangler.jsoncUNIVERSITY_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 계정 ID

  • Variable 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 setup

CLI

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 http

MCP 도구

도구

기능

discover_datasets

분야·지표 검색

describe_operation

데이터셋·오퍼레이션 설명

execute_operation

분야별 API 실행

doctor

키·레지스트리·실호출 진단

오류 처리

오류를 감추지 않습니다. 다음 정보를 구조화하여 반환합니다.

  • 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: Dockerfile

  • npm: 태그 푸시 시 GitHub Actions 배포

  • Claude Code 플러그인: .claude-plugin.mcp.json

출처

  • 공공데이터포털 한국대학교육협의회 대학정보 API

  • Model Context Protocol 공식 TypeScript SDK

라이선스

MIT

Available Tools

4 tools
describe_operationAPI 오퍼레이션 설명C

특정 데이터셋 또는 오퍼레이션의 공식 출처·기본 URL·설명을 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetIdYes
operationNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

등록된 대학정보공시 데이터셋과 오퍼레이션을 키워드·분야로 검색합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo검색어. 예: 재학생 충원율, 장학금, 교원
domainNo

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 호출을 시험합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
probeNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 명세의 요청변수명을 그대로 사용합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
datasetIdYes
operationYes
includeRawNo디버깅용 전체 XML 파싱 결과 포함 여부

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.1.0
    • First observeddescribe_operation
    • First observeddiscover_datasets
    • First observeddoctor
    • First observedexecute_operation

TDQS

A3.5/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for querying Korean school budget, unit projects, and special plans through the School Alert (학교알리미) open data API.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Bridges 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP 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.
    -