Korea Stats MCP
Enables natural language querying of Korean statistical data from KOSIS, including population, employment, GDP, housing prices, and more, with support for regional and trend analysis.
README
π°π· Korea Stats MCP
μμ°μ΄λ‘ KOSIS ν΅κ³λ₯Ό μ‘°ννλ MCP μλ²
ν΅κ³μ² KOSIS OpenAPI κΈ°λ°μ MCP(Model Context Protocol) μλ²μ λλ€. Claude, Cursor, Windsurf λ± AI λꡬμμ μμ°μ΄λ‘ νκ΅ ν΅κ³ λ°μ΄ν°λ₯Ό κ²μνκ³ λΆμν μ μμ΅λλ€.
π μ격 μλ² URL: https://korea-stats-mcp-yxup.vercel.app/mcp
π― μ λ§λ€μλμ?
AIμκ² "νκ΅ μΈκ΅¬κ° λͺ λͺ μ΄μΌ?" λΌκ³ λ¬ΌμΌλ©΄, AIλ νμ΅ λ°μ΄ν°μ μ€λλ μ 보λ₯Ό λ΅ν©λλ€. Korea Stats MCPλ₯Ό μ°κ²°νλ©΄ μ€μκ° κ³΅μ ν΅κ³λ₯Ό μ‘°νν΄μ μ νν λ΅λ³μ μ 곡ν©λλ€.
| Before (MCP μμ΄) | After (Korea Stats MCP μ°κ²°) |
|---|---|
| Q: νκ΅ μΈκ΅¬κ° λͺ λͺ μ΄μΌ? | Q: νκ΅ μΈκ΅¬κ° λͺ λͺ μ΄μΌ? |
| A: 2023λ κΈ°μ€ μ½ 5,100λ§ λͺ μ λλ€. β | A: 2024λ νκ΅μ μ΄μΈκ΅¬λ 51,712,619λͺ μ λλ€. β |
β¨ μ£Όμ κΈ°λ₯
| κΈ°λ₯ | μ€λͺ |
|---|---|
| β‘ λΉ λ₯Έ μ‘°ν | "μ€μ λ₯ ", "GDP", "μΆμ°μ¨", "λ―ΈμΈλ¨Όμ§" λ± 83κ° ν€μλ μ¦μ μ‘°ν |
| π μΆμΈ λΆμ | μ΅κ·Ό Nλ κ° λ°μ΄ν° μΆμ΄ λ° λ³νμ¨ λΆμ |
| π ν΅κ³ κ²μ | KOSIS 90λ§+ ν΅κ³νμμ ν€μλ κ²μ |
| π λΉκ΅ λΆμ | μ°λλ³, μ§μλ³, νλͺ©λ³ ν΅κ³ λΉκ΅ |
| πΊοΈ μ§μλ³ μ‘°ν | 17κ° μλλ³ ν΅κ³ μ‘°ν μ§μ |
π μ¬μ© λ°©λ²
λ°©λ² 1: μ격 μλ² μ¬μ© (μ€μΉ μμ΄ λ°λ‘ μ¬μ©) β κΆμ₯
μ€μΉ μμ΄ μ격 MCP μλ²μ λ°λ‘ μ°κ²°ν μ μμ΅λλ€.
Claude Desktop
claude_desktop_config.json νμΌ μμΉ:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"korea-stats": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://korea-stats-mcp-yxup.vercel.app/mcp"
]
}
}
}
Cursor
μ€μ β MCP β Add new MCP server:
{
"korea-stats": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://korea-stats-mcp-yxup.vercel.app/mcp"
]
}
}
Windsurf
MCP μ€μ μ μΆκ°:
{
"korea-stats": {
"serverUrl": "https://korea-stats-mcp-yxup.vercel.app/mcp"
}
}
λ°©λ² 2: λ‘컬 μ€μΉ
μ§μ μλ²λ₯Ό μ€ννκ³ μΆλ€λ©΄ λ‘컬μ μ€μΉν μ μμ΅λλ€.
1λ¨κ³: μ€μΉ
# μ μ₯μ ν΄λ‘
git clone https://github.com/Dayoooun/korea-stats-mcp.git
cd korea-stats-mcp
# μμ‘΄μ± μ€μΉ (pnpm κΆμ₯)
pnpm install
# λΉλ
pnpm run build
2λ¨κ³: AI λꡬμ μ°κ²°
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"korea-stats": {
"command": "node",
"args": ["/μ λκ²½λ‘/korea-stats-mcp/dist/index.js"]
}
}
}
Cursor (μ€μ β MCP Servers):
{
"korea-stats": {
"command": "node",
"args": ["/μ λκ²½λ‘/korea-stats-mcp/dist/index.js"]
}
}
λ°©λ² 3: Kakao PlayMCP
Kakao PlayMCPμμλ μ¬μ©ν μ μμ΅λλ€.
- PlayMCP μ¬μ΄νΈ μ μ
- korea-stats-mcp κ²μ
- ν΄λ¦ ν λ²μΌλ‘ μ°κ²° μλ£!
π¬ μ¬μ© μμ
μ°κ²° ν AIμκ² μμ°μ΄λ‘ μ§λ¬ΈνμΈμ:
"νκ΅ μΈκ΅¬κ° λͺ λͺ
μ΄μΌ?"
"μμΈ μ€μ
λ₯ μλ €μ€"
"μ΅κ·Ό 10λ
μΆμ°μ¨ μΆμ΄ 보μ¬μ€"
"GDP μ±μ₯λ₯ μ?"
"λΆμ°κ³Ό λꡬ μΈκ΅¬ λΉκ΅ν΄μ€"
"μμΈ μννΈκ°κ²© μλ €μ€"
"κ²½κΈ°λ GRDP μΌλ§μΌ?"
"νκ· μκΈ μλ €μ€"
"2024λ
10μ μΆμμμ μλ €μ€" # μλ³ λ°μ΄ν°
"μμΈ μ μΈκ°κ²©" # π μ μΈ
"κ²½κΈ° μλμ°¨ λ±λ‘λμ" # π μλμ°¨
"λΆμ° λ²μ£μ¨" # π λ²μ£
"μΈλκ΄κ΄κ° λͺ λͺ
μ΄μΌ?"
"κ΅ν΅μ¬κ³ λ°μ건μ" # π κ΅ν΅μ¬κ³
"μμΈ μμ¬μ μλ €μ€" # π μλ£
μ€μ μλ΅ μμ:
β
"2025λ
νκ΅μ μ£Όλ―Όλ±λ‘ μ΄μΈκ΅¬λ 51,117,378λͺ
μ
λλ€."
β
"2024λ
μμΈμ μ€μ
λ₯ μ 3%μ
λλ€."
β
"2025λ
3μ μμΈμ μννΈλ§€λ§€κ°κ²©μ§μλ 99.687 (2021.6=100)μ
λλ€."
β
"2025λ
νκ΅μ μμ©κ·Όλ‘μ μνκ· μκΈμ 4,094,615μμ
λλ€."
β
"2024λ
κ²½κΈ°μ μ§μλ΄μ΄μμ°(λͺ
λͺ©)μ 651,417,234λ°±λ§μμ
λλ€."
β
"2025λ
3μ μμΈμ μ£Όνμ μΈκ°κ²©μ§μλ 94.134 (2021.6=100)μ
λλ€."
β
"2024λ
μμΈμ μλμ°¨ λ±λ‘λμλ 3,176,933λμ
λλ€."
β
"2024λ
λΆμ°μ μΈκ΅¬ μ²λͺ
λΉ λ²μ£λ°μ건μλ 34.4건μ
λλ€."
β
"2025λ
11μ νκ΅μ μΈλκ΄κ΄κ°μλ 1,596,939λͺ
μ
λλ€."
β
"2024λ
νκ΅μ κ΅ν΅μ¬κ³ λ°μ건μλ 168,585건μ
λλ€."
β
"2024λ
μμΈμ μλ£κΈ°κ΄ μ’
μ¬ μμ¬μλ 43,547λͺ
μ
λλ€."
π μ§μνλ ν΅κ³ (83κ° ν€μλ)
μΈκ΅¬/μΆμ°/μ¬λ§
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
μΈκ΅¬, μ΄μΈκ΅¬ |
μ΄μΈκ΅¬μ | μ° |
μΆμ°μ¨, ν©κ³μΆμ°μ¨ |
ν©κ³μΆμ°μ¨ | μ° |
μΆμμμ, μΆμμ, μ‘°μΆμλ₯ |
μΆμ ν΅κ³ | μ°/λΆκΈ°/μ |
μ¬λ§μμ, μ¬λ§μ, μ‘°μ¬λ§λ₯ , μ¬λ§λ₯ |
μ¬λ§ ν΅κ³ | μ°/λΆκΈ°/μ |
μμ°μ¦κ°, μμ°μ¦κ°μ¨ |
μμ°μ¦κ° | μ°/λΆκΈ°/μ |
κΈ°λμλͺ
, κΈ°λμ¬λͺ
, νκ· μλͺ
|
κΈ°λμλͺ | μ° |
νΌμΈ/μ΄νΌ
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
νΌμΈμ¨, νΌμΈκ±΄μ, μ‘°νΌμΈμ¨ |
νΌμΈ ν΅κ³ | μ°/λΆκΈ°/μ |
μ΄νΌμ¨, μ΄νΌκ±΄μ, μ‘°μ΄νΌμ¨ |
μ΄νΌ ν΅κ³ | μ°/λΆκΈ°/μ |
κ³ μ©/λ Έλ
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
μ€μ
λ₯ |
μ€μ λ₯ (μλλ³ μ§μ) | μ° |
κ³ μ©λ₯ |
κ³ μ©λ₯ (μλλ³ μ§μ) | μ° |
μ·¨μ
μμ, μ·¨μ
μ |
μ·¨μ μ μ | μ° |
μ€μ
μμ, μ€μ
μ |
μ€μ μ μ | μ° |
κ²½μ νλμΈκ΅¬, λΉκ²½μ νλμΈκ΅¬ |
κ²½μ νλμΈκ΅¬ | μ° |
μκΈ, μνκ· μκΈ, μκΈ, νκ· μκΈ |
μμ©κ·Όλ‘μ μνκ· μκΈ (μλλ³) | μ° |
κ²½μ
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
GDP, κ΅λ΄μ΄μμ° |
GDP (κ΅λ΄μ΄μμ°) | μ° |
GRDP, μ§μλ΄μ΄μμ° |
μ§μλ΄μ΄μμ° (μλλ³) | μ° |
κ²½μ μ±μ₯λ₯ , μ±μ₯λ₯ , GDPμ±μ₯λ₯ |
κ²½μ μ±μ₯λ₯ | μ° |
λ¬Όκ°, μλΉμλ¬Όκ°, μλΉμλ¬Όκ°μ§μ |
μλΉμλ¬Όκ° (μλλ³) | μ°/μ |
무μ
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
μμΆμ‘, μμΆ |
μμΆμ‘ | μ° |
μμ
μ‘, μμ
|
μμ μ‘ | μ° |
무μμμ§ |
무μμμ§ | μ° |
λΆλμ°
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
μ£Όνκ°κ²©, μ£Όνλ§€λ§€κ°κ²©, μ£Όνκ°κ²©μ§μ |
μ£Όνλ§€λ§€κ°κ²©μ§μ (μλλ³) | μ |
μννΈ, μννΈκ°κ²©, μννΈλ§€λ§€κ°κ²©, μννΈκ°κ²©μ§μ |
μννΈλ§€λ§€κ°κ²©μ§μ (μλλ³) | μ |
μ μΈ, μ μΈκ°κ²©, μ μΈκ°κ²©μ§μ, μ£Όνμ μΈ |
μ£Όνμ μΈκ°κ²©μ§μ (μλλ³) | μ |
μννΈμ μΈ, μννΈμ μΈκ°κ²© |
μννΈμ μΈκ°κ²©μ§μ (μλλ³) | μ |
μλμ°¨/κ΅ν΅ π
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
μλμ°¨, μλμ°¨λ±λ‘, μλμ°¨λμ |
μλμ°¨ λ±λ‘λμ (μλλ³) | μ° |
λ²μ£/μΉμ π
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
λ²μ£, λ²μ£μ¨, λ²μ£λ°μ |
μΈκ΅¬ μ²λͺ λΉ λ²μ£λ°μ건μ (μλλ³) | μ° |
κ΄κ΄
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
κ΄κ΄κ°, μΈλκ΄κ΄κ°, μ
κ΅μ |
μΈλκ΄κ΄κ° μ κ΅μμ | μ |
κ΅ν΅/μμ π
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
κ΅ν΅μ¬κ³ , κ΅ν΅μ¬κ³ λ°μ, μ¬κ³ 건μ |
κ΅ν΅μ¬κ³ λ°μ건μ (μλλ³) | μ° |
μλ£/건κ°
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
μμ¬, μμ¬μ, μλ£μΈλ ₯ |
μλ£κΈ°κ΄ μ’ μ¬ μμ¬μ (μλλ³) | μ° |
λκΈ°νκ²½ π
| ν€μλ | μ€λͺ | μ£ΌκΈ° |
|---|---|---|
λ―ΈμΈλ¨Όμ§, PM2.5, μ΄λ―ΈμΈλ¨Όμ§, λκΈ°μ€μΌ |
μ΄λ―ΈμΈλ¨Όμ§(PM2.5) λλ (μλλ³) | μ |
PM10 |
λ―ΈμΈλ¨Όμ§(PM10) λλ (μλλ³) | μ |
πΊοΈ μ§μλ³ μ‘°ν
17κ° κ΄μμλλ³ ν΅κ³λ₯Ό μ‘°νν μ μμ΅λλ€:
μ§μ μ§μ: μ κ΅, μμΈ, λΆμ°, λꡬ, μΈμ², κ΄μ£Ό, λμ , μΈμ°, μΈμ’ , κ²½κΈ°, κ°μ, μΆ©λΆ, μΆ©λ¨, μ λΆ, μ λ¨, κ²½λΆ, κ²½λ¨, μ μ£Ό
μμ:
"μμΈ μΈκ΅¬"
"λΆμ° μ€μ
λ₯ "
"μ μ£Ό μΆμ°μ¨"
"κ²½κΈ°λ κ³ μ©λ₯ "
"μμΈ μννΈκ°κ²©"
"κ²½κΈ° GRDP"
"μΈμ° μκΈ"
"μμΈ μ μΈκ°κ²©"
"κ²½κΈ° μλμ°¨"
"λΆμ° λ²μ£μ¨"
"μμΈ κ΅ν΅μ¬κ³ " # π κ΅ν΅μ¬κ³
"λΆμ° μμ¬μ" # π μλ£
π μλ³/λΆκΈ°λ³ μ‘°ν π
μΌλΆ ν΅κ³λ μλ³ λλ λΆκΈ°λ³ μ‘°νκ° κ°λ₯ν©λλ€:
μμ:
"2024λ
10μ μΆμμμ" # μλ³ μ‘°ν
"2024λ
3λΆκΈ° μ¬λ§μμ" # λΆκΈ°λ³ μ‘°ν
"2025λ
1μ μ£Όνκ°κ²©" # μλ³ μ‘°ν
μ§μ ν΅κ³: μΆμμμ, μ¬λ§μμ, νΌμΈκ±΄μ, μ΄νΌκ±΄μ, μμ°μ¦κ°, λ¬Όκ°, μ£Όνκ°κ²©, μννΈκ°κ²©, μ μΈκ°κ²©, κ΄κ΄κ°
π οΈ μ 곡 λꡬ (8κ°)
ν΅μ¬ λꡬ β
| λꡬ | μ€λͺ | μμ |
|---|---|---|
quick_stats |
83κ° ν€μλ λΉ λ₯Έ μ‘°ν | "μ€μ λ₯ ", "GDP", "λ―ΈμΈλ¨Όμ§", "κ΅ν΅μ¬κ³ ", "μμ¬μ" |
quick_trend |
μκ³μ΄ μΆμΈ λΆμ | "μΆμ°μ¨ 10λ μΆμ΄" |
κ³ κΈ λꡬ
| λꡬ | μ€λͺ |
|---|---|
search_statistics |
KOSIS ν΅κ³ν ν€μλ κ²μ |
get_statistics_list |
μ£Όμ λ³/κΈ°κ΄λ³ ν΅κ³ λͺ©λ‘ νμ |
get_statistics_data |
νΉμ ν΅κ³ν λ°μ΄ν° μ‘°ν |
compare_statistics |
μμ λ³/νλͺ©λ³ λΉκ΅ λΆμ |
analyze_time_series |
μμΈ μκ³μ΄ λΆμ |
get_recommended_statistics |
λΆμΌλ³ μΆμ² ν΅κ³ |
π§ κ°λ°μ κ°μ΄λ
λ‘컬 κ°λ°
# κ°λ° λͺ¨λ (watch)
pnpm run dev
# MCP Inspectorλ‘ ν
μ€νΈ
pnpm run inspector
# E2E ν
μ€νΈ
node e2e-test.js
νλ‘μ νΈ κ΅¬μ‘°
korea-stats-mcp/
βββ src/
β βββ index.ts # μ§μ
μ (stdio νΈλμ€ν¬νΈ)
β βββ server.ts # MCP μλ² μ€μ
β βββ tools/ # 8κ° λꡬ ꡬν
β β βββ quickStats.ts # λΉ λ₯Έ μ‘°ν
β β βββ quickTrend.ts # μΆμΈ λΆμ
β β βββ ...
β βββ data/
β β βββ quickStatsParams.ts # 83κ° ν€μλ λ§€ν
β βββ api/
β βββ client.ts # KOSIS API ν΄λΌμ΄μΈνΈ
βββ api/
β βββ mcp.ts # Vercel μλ²λ¦¬μ€ (μ격 MCP)
βββ tests/ # Playwright ν
μ€νΈ
μ ν€μλ μΆκ°νκΈ°
src/data/quickStatsParams.tsμ μ ν€μλλ₯Ό μΆκ°ν μ μμ΅λλ€:
'μν€μλ': {
orgId: '101', // κΈ°κ΄ μ½λ (101 = ν΅κ³μ²)
tableId: 'DT_XXXXX', // ν΅κ³ν ID
tableName: 'ν΅κ³νλͺ
',
description: 'μ€λͺ
',
objL1: '00', // λΆλ₯κ° μ½λ
itemId: 'T10', // νλͺ© μ½λ
unit: 'λ¨μ',
}
π API ν€
API ν€κ° λ΄μ₯λμ΄ μμ΄ λ³λ μ€μ μμ΄ λ°λ‘ μ¬μ© κ°λ₯ν©λλ€.
π‘ μ체 API ν€λ₯Ό μ¬μ©νλ €λ©΄ KOSIS OpenAPIμμ λ°κΈλ°μ
src/config/index.tsμapiKeyκ°μ λ³κ²½νμΈμ.
π€ κΈ°μ¬νκΈ°
κΈ°μ¬λ₯Ό νμν©λλ€!
- μ΄ μ μ₯μλ₯Ό Fork ν©λλ€
- μ λΈλμΉλ₯Ό μμ±ν©λλ€ (
git checkout -b feature/μκΈ°λ₯) - λ³κ²½μ¬νμ 컀λ°ν©λλ€ (
git commit -m 'feat: μ κΈ°λ₯ μΆκ°') - λΈλμΉμ Push ν©λλ€ (
git push origin feature/μκΈ°λ₯) - Pull Requestλ₯Ό μμ±ν©λλ€
κΈ°μ¬ μμ΄λμ΄
- [ ] μλ‘μ΄ ν΅κ³ ν€μλ μΆκ°
- [ ] μλ¬Έ ν€μλ μ§μ (population, unemployment λ±)
- [ ] μ§μλͺ νλ€μ μ§μ (μμΈνΉλ³μ β μμΈ)
- [ ] λ λ§μ ν μ€νΈ μΌμ΄μ€
π λΌμ΄μ μ€
MIT License - μμ λ‘κ² μ¬μ©, μμ , λ°°ν¬ν μ μμ΅λλ€.
π κ΄λ ¨ λ§ν¬
π¬ λ¬Έμ
μ΄μλ μ§λ¬Έμ΄ μμΌμλ©΄ GitHub Issuesμ λ±λ‘ν΄ μ£ΌμΈμ.
<p align="center"> <b>Made with β€οΈ for Korean Statistics</b><br> <sub>KOSIS OpenAPI κΈ°λ° | MCP Compatible</sub> </p>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.