Koskamo

kschoolinfo MCP

A free, read-only remote MCP server for South Korean school data from NEIS. It allows agents to search schools, retrieve meal menus with allergen flags, get timetables, access academic calendars, fetch school info, and search for private academies.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

kschoolinfo MCP logo, by EXAONCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by EXAON
MCP endpoint (Streamable HTTP)
https://kschoolinfo.com/api/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 6 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for schools by name to get codes
  • Retrieve daily or weekly meal menus with allergen info
  • Get class timetables for specific grades and classes
  • Find private academies by district and subject

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
kschoolinfo 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

kschoolinfo (kschoolinfo.com) — South Korean school information from NEIS, the Ministry of Education's official open data. Tools: find a school, then get its meals (with allergen flags), class timetable, academic calendar and basic info; also search private academies (hagwon) by district. Call search_schools first to get eduCode and schoolCode; every other school tool needs both. Data is in Korean. Dates are Korea time (KST); omit the date for today. Every result includes page_url, the kschoolinfo.com page with the full details (the source of the result).

Tools

6 advertised

search_schools — Search Korean schools
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find South Korean elementary, middle and high schools by name (Korean, partial names work: '상계고', '서울 대치초'). Returns eduCode and schoolCode needed by the other tools, plus school type, province and address.

search_schools input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 40,
      "minLength": 1,
      "description": "School name in Korean, e.g. '상계고등학교', '효자고', '의정부 효자고'"
    },
    "region": {
      "type": "string",
      "maxLength": 20,
      "description": "Province/metropolitan city to narrow results, e.g. '서울특별시', '경기도'"
    }
  }
}
search_schools annotations
{
  "title": "Search Korean schools",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_meals — School meal menu
Advertised by the server during the last successful anonymous check.
Advertised read-only

School meal menu (breakfast/lunch/dinner) for a day, this week, next week or this month, with calories, macronutrients and allergens per dish. Pass the user's allergies to flag dishes that contain them. No meals on weekends and school holidays.

get_meals input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "eduCode",
    "schoolCode"
  ],
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 10,
      "description": "Date as YYYY-MM-DD or YYYYMMDD (Korea time). Omit for today."
    },
    "meal": {
      "enum": [
        "breakfast",
        "lunch",
        "dinner"
      ],
      "type": "string",
      "description": "Only this meal. Most schools serve lunch only."
    },
    "range": {
      "enum": [
        "week",
        "next_week",
        "month"
      ],
      "type": "string",
      "description": "Instead of one day: this week (Mon–Fri), next week, or this month"
    },
    "eduCode": {
      "type": "string",
      "pattern": "^[A-Z]\\d{2}$",
      "description": "Office of education code from search_schools, e.g. 'B10'"
    },
    "allergies": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 20
      },
      "maxItems": 19,
      "description": "Allergies to flag, in English or Korean, e.g. ['milk', 'peanut'] or ['우유', '땅콩']. 19 Korean standard allergens."
    },
    "schoolCode": {
      "type": "string",
      "pattern": "^\\d{4,12}$",
      "description": "School code from search_schools, e.g. '7010082'"
    }
  }
}
get_meals annotations
{
  "title": "School meal menu",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_timetable — Class timetable
Advertised by the server during the last successful anonymous check.
Advertised read-only

Class timetable (period and subject) for a school, grade and class on a given day. Without grade/class it returns every class, so pass them when known.

get_timetable input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "eduCode",
    "schoolCode"
  ],
  "properties": {
    "date": {
      "type": "string",
      "maxLength": 10,
      "description": "Date as YYYY-MM-DD or YYYYMMDD (Korea time). Omit for today."
    },
    "grade": {
      "type": "string",
      "pattern": "^\\d{1,2}$",
      "description": "Grade (school year), e.g. '2'"
    },
    "eduCode": {
      "type": "string",
      "pattern": "^[A-Z]\\d{2}$",
      "description": "Office of education code from search_schools, e.g. 'B10'"
    },
    "class_name": {
      "type": "string",
      "maxLength": 10,
      "description": "Class (반), e.g. '3'"
    },
    "schoolCode": {
      "type": "string",
      "pattern": "^\\d{4,12}$",
      "description": "School code from search_schools, e.g. '7010082'"
    }
  }
}
get_timetable annotations
{
  "title": "Class timetable",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_schedule — Academic calendar
Advertised by the server during the last successful anonymous check.
Advertised read-only

School academic calendar events (exams, vacations, holidays, field trips, ceremonies) between two dates. Defaults to the next 30 days.

get_schedule input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "eduCode",
    "schoolCode"
  ],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 10,
      "description": "End date YYYY-MM-DD. Omit for 30 days after the start."
    },
    "from": {
      "type": "string",
      "maxLength": 10,
      "description": "Start date YYYY-MM-DD. Omit for today."
    },
    "eduCode": {
      "type": "string",
      "pattern": "^[A-Z]\\d{2}$",
      "description": "Office of education code from search_schools, e.g. 'B10'"
    },
    "schoolCode": {
      "type": "string",
      "pattern": "^\\d{4,12}$",
      "description": "School code from search_schools, e.g. '7010082'"
    }
  }
}
get_schedule annotations
{
  "title": "Academic calendar",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_school_info — School basic info
Advertised by the server during the last successful anonymous check.
Advertised read-only

Basic school information: Korean and English name, type, address, phone, fax, homepage, founding date, public/private, coeducational or not, and the supervising office of education. For high schools, also departments/tracks.

get_school_info input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "eduCode",
    "schoolCode"
  ],
  "properties": {
    "eduCode": {
      "type": "string",
      "pattern": "^[A-Z]\\d{2}$",
      "description": "Office of education code from search_schools, e.g. 'B10'"
    },
    "schoolCode": {
      "type": "string",
      "pattern": "^\\d{4,12}$",
      "description": "School code from search_schools, e.g. '7010082'"
    }
  }
}
get_school_info annotations
{
  "title": "School basic info",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_academies — Private academies (hagwon) by district
Advertised by the server during the last successful anonymous check.
Advertised read-only

Registered private academies (hagwon) and tutoring centers in a South Korean district, filtered by subject keyword, from the offices of education's registration data. Returns up to 15 with field, courses, address and phone. Data in Korean.

search_academies input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "region"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 30,
      "description": "Part of the academy name"
    },
    "region": {
      "type": "string",
      "maxLength": 20,
      "minLength": 1,
      "description": "Province/metropolitan city, e.g. '서울', '경기', '부산'"
    },
    "subject": {
      "type": "string",
      "maxLength": 20,
      "description": "Subject keyword in Korean, e.g. '수학', '영어', '피아노', '코딩'"
    },
    "district": {
      "type": "string",
      "maxLength": 20,
      "description": "City/district (시군구) to narrow results, e.g. '강남구', '수원시'. Strongly recommended."
    }
  }
}
search_academies annotations
{
  "title": "Private academies (hagwon) by district",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
727 ms
95th percentile latency
727 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 727 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http kschoolinfo-mcp https://kschoolinfo.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add kschoolinfo-mcp --url https://kschoolinfo.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable kschoolinfo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "kschoolinfo-mcp": {
      "url": "https://kschoolinfo.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "kschoolinfo-mcp": {
      "type": "streamableHttp",
      "url": "https://kschoolinfo.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start kschoolinfo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "kschoolinfo-mcp": {
      "type": "http",
      "url": "https://kschoolinfo.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http kschoolinfo-mcp https://kschoolinfo.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://kschoolinfo.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "kschoolinfo-mcp": {
      "serverUrl": "https://kschoolinfo.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like kschoolinfo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.