Skip to main content
Glama
ECOS MCP Server

ECOS MCP Server

by kgy0617

๐Ÿฆ ECOS MCP Server

ํ•œ๊ตญ์€ํ–‰ ๊ฒฝ์ œํ†ต๊ณ„์‹œ์Šคํ…œ(ECOS) Open API๋ฅผ ์œ„ํ•œ ์ตœ์‹  MCP(Model Context Protocol) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

AI ์—์ด์ „ํŠธ(Claude Desktop, Cursor ๋“ฑ)๊ฐ€ ํ•œ๊ตญ ๊ฑฐ์‹œ๊ฒฝ์ œ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์—ฐ์–ด๋กœ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ณ ํšจ์œจ ์‹œ๊ณ„์—ด ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.


โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

๐Ÿ› ๏ธ MCP Tools (7๊ฐœ)

๋ชจ๋“  ๋„๊ตฌ๋Š” ์ฝ๊ธฐ ์ „์šฉ(readOnlyHint)์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๊ณ , ์‹คํŒจ ์‹œ MCP ํ‘œ์ค€ ์—๋Ÿฌ(isError: true)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Tool

์„ค๋ช…

์ฃผ์š” ํŠน์ง•

get_popular_statistic

1-Shot ์ธ๊ธฐ ์ง€ํ‘œ ์ฆ‰์‹œ ์กฐํšŒ

๊ธฐ์ค€๊ธˆ๋ฆฌ, ์„ฑ์žฅ๋ฅ , ๋ฌผ๊ฐ€์ƒ์Šน๋ฅ , ํ™˜์œจ ๋“ฑ์„ ์ฝ”๋“œ ๊ฒ€์ƒ‰ ์—†์ด ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ์กฐํšŒ

search_statistics

ํ†ต๊ณ„ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์กฐํšŒ (ํ•ต์‹ฌ)

์Šค๋งˆํŠธ ๋‚ ์งœ, ์ตœ์‹  ๊ตฌ๊ฐ„ ์šฐ์„ , ์ฆ๊ฐ๋ฅ  ๊ณ„์‚ฐ(transform), ์ปดํŒฉํŠธ/CSV ํฌ๋งท

search_statistic_tables

ํ†ต๊ณ„ํ‘œ ๊ฒ€์ƒ‰ยท๊ณ„์ธต ํƒ์ƒ‰

๋กœ์ปฌ ์ธ๋ฑ์Šค๋กœ ์ฆ‰์‹œ ์‘๋‹ต. ๋„์–ด์“ฐ๊ธฐ ๋ฌด์‹œยท๋‹ค์ค‘ ๋‹จ์–ดยท๊ด€๋ จ๋„ ์ˆœ ์ •๋ ฌ, parent_code๋กœ ๋ถ„๋ฅ˜ ํŠธ๋ฆฌ ํƒ์ƒ‰

get_key_statistics

100๋Œ€ ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ ์กฐํšŒ

GDP, ๊ธฐ์ค€๊ธˆ๋ฆฌ, ํ™˜์œจ, ํ†ตํ™”๋Ÿ‰ ๋“ฑ ์‹ค์‹œ๊ฐ„ ํ•ต์‹ฌ ์ง€ํ‘œ

search_statistic_word

ํ†ต๊ณ„ ์šฉ์–ด ์‚ฌ์ „ ๊ฒ€์ƒ‰

ํ•œ๊ตญ์€ํ–‰ ๊ณต์‹ ์šฉ์–ด ํ•ด์„ค

list_statistic_items

ํ†ต๊ณ„ํ‘œ ์„ธ๋ถ€ํ•ญ๋ชฉ ๋ชฉ๋ก ์กฐํšŒ

ํ•ญ๋ชฉ์ฝ”๋“œ, ์ง€์› ์ฃผ๊ธฐ, ์ˆ˜๋ก ๊ธฐ๊ฐ„, ๋‹จ์œ„ ํ™•์ธ (๊ฒฐ๊ณผ ์บ์‹œ)

get_statistic_meta

ํ†ต๊ณ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กฐํšŒ

ํ†ต๊ณ„ ์ž‘์„ฑ ๋ฐฐ๊ฒฝ, ์ž‘์„ฑ ์ฃผ๊ธฐ, ํŽธ์ œ ๊ธฐ์ค€ ๋“ฑ (๊ฒฐ๊ณผ ์บ์‹œ)

โšก ํ† ํฐ ์ตœ์ ํ™” ํฌ๋งท (output_format)

์‹œ๊ณ„์—ด ์กฐํšŒ(search_statistics, get_popular_statistic) ๊ฒฐ๊ณผ๋Š” ๊ณต๋ฐฑ ์—†๋Š” JSON์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

  • "compact" (๊ธฐ๋ณธ๊ฐ’): ๊ณ„์—ด(ํ•ญ๋ชฉ)๋ณ„๋กœ ์ด๋ฆ„ยท๋‹จ์œ„๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์“ฐ๊ณ  ๊ฐ’์€ [์‹œ์ , ๊ฐ’] ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

  • "csv": ํ•œ ์ค„์— ๊ด€์ธก์น˜ ํ•˜๋‚˜. ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์„ ํ‘œยท์ฐจํŠธ๋กœ ์˜ฎ๊ธธ ๋•Œ ํŽธ๋ฆฌ

  • "json": ECOS ์›๋ณธ ํ–‰ ๊ทธ๋Œ€๋กœ

์ธก์ • ์˜ˆ์‹œ(์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜ 24๊ฐœ์›” ๋‹จ์ผ ๊ณ„์—ด, ๋ฌธ์ž ์ˆ˜ ๊ธฐ์ค€): ์›๋ณธ JSON 6,545์ž โ†’ compact 605์ž(์•ฝ 91% ์ถ•์†Œ), csv 805์ž.

๐Ÿ“ˆ ์ฆ๊ฐ๋ฅ ยท๋ณ€๊ฒฝ ์‹œ์  (transform, changes_only)

  • transform="yoy": ์ „๋…„๋™๊ธฐ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ (%) ์—ด(yoy_pct) ์ถ”๊ฐ€. ๊ธฐ์ค€ ์‹œ์  ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์œผ๋กœ ํ•จ๊ป˜ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

  • transform="pop": ์ง์ „ ๊ด€์ธก์น˜ ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ (%) ์—ด(pop_pct) ์ถ”๊ฐ€

  • changes_only=True: ๊ฐ’์ด ๋ฐ”๋€ ์‹œ์ ๋งŒ ๋ฐ˜ํ™˜ (์˜ˆ: ์ผ๋ณ„ ๊ธฐ์ค€๊ธˆ๋ฆฌ 2๋…„์น˜ ์•ฝ 500ํ–‰ โ†’ ๋ณ€๊ฒฝ ์‹œ์  ๋ช‡ ํ–‰)

๐Ÿ—“๏ธ ์Šค๋งˆํŠธ ๋‚ ์งœ & ์ตœ์‹  ๊ตฌ๊ฐ„ ์šฐ์„ 

  • start_date/end_date๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์ผ๊ฐ„(D)์€ ์ตœ๊ทผ 3๊ฐœ์›”, ๊ทธ ์™ธ ์ฃผ๊ธฐ๋Š” ์ตœ๊ทผ 2๋…„์ด ์ž๋™ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ๋ฒˆ์— ๋‹ค ๋‹ด๊ธฐ์ง€ ์•Š์œผ๋ฉด(end_count ์ดˆ๊ณผ, sample ํ‚ค๋Š” 10๊ฑด) ๊ฐ€์žฅ ์ตœ๊ทผ ๊ตฌ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  truncated: true์™€ ์•ˆ๋‚ด ๋ฌธ๊ตฌ๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ๋ถ€ํ„ฐ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋ฐ›์œผ๋ ค๋ฉด prefer_latest=False๋ฅผ ์“ฐ์„ธ์š”.


Related MCP server: kosis-mcp

๐Ÿ“š MCP Resources & Prompts

Resources

  • ecos://popular-indicators: ํ•œ๊ตญ์€ํ–‰ ์ฃผ์š” ํ•ต์‹ฌ ๊ฒฝ์ œ์ง€ํ‘œ(๊ธฐ์ค€๊ธˆ๋ฆฌ, ์‹ค์งˆ GDP, ์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜, ํ™˜์œจ, M2 ๋“ฑ) ํ”„๋ฆฌ์…‹ ๋งคํ•‘ํ‘œ

  • ecos://date-format-guide: ์ฃผ๊ธฐ(Cycle)๋ณ„ ์˜ฌ๋ฐ”๋ฅธ ๋‚ ์งœ ํฌ๋งท ๊ทœ๊ฒฉ ์•ˆ๋‚ด์„œ

Prompts

  • macro-economic-briefing: 100๋Œ€ ์ง€ํ‘œ์™€ ์„ฑ์žฅ๋ฅ ยท๋ฌผ๊ฐ€์ƒ์Šน๋ฅ ยท๊ธฐ์ค€๊ธˆ๋ฆฌยทํ™˜์œจ ์ถ”์ด ๊ธฐ๋ฐ˜ ๊ฒฝ์ œ ํ˜„ํ™ฉ ๋ธŒ๋ฆฌํ•‘

  • analyze-economic-trend: ํŠน์ • ๊ฒฝ์ œ ์ง€ํ‘œ(์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜ ๋“ฑ) ์‹œ๊ณ„์—ด ์ถ”์ด ๋ฐ ์ •์ฑ… ์‹œ์‚ฌ์  ์‹ฌ์ธต ๋ถ„์„


๐Ÿ“… ์ฃผ๊ธฐ(Cycle)๋ณ„ ๋‚ ์งœ ํฌ๋งท ๊ทœ์น™

์ฃผ๊ธฐ ์ฝ”๋“œ

์ฃผ๊ธฐ๋ช…

์‹œ์ž‘/์ข…๋ฃŒ์ผ ํฌ๋งท ๊ทœ๊ฒฉ

์˜ˆ์‹œ

A

์—ฐ๊ฐ„

YYYY

"2020", "2024"

S

๋ฐ˜๊ธฐ

YYYYS1 / YYYYS2

"2023S1", "2023S2"

Q

๋ถ„๊ธฐ

YYYYQ1 ~ YYYYQ4

"2023Q1", "2024Q3"

M

์›”๊ฐ„

YYYYMM

"202401", "202412"

SM

๋ฐ˜์›”

YYYYMMS1 / YYYYMMS2

"202401S1", "202401S2"

D

์ผ๊ฐ„

YYYYMMDD

"20240101", "20240315"


๐Ÿ“Œ ์ฃผ์š” ์ธ๊ธฐ ํ†ต๊ณ„ํ‘œ ํ”„๋ฆฌ์…‹

์ง€ํ‘œ๋ช…

ํ‚ค์›Œ๋“œ(๋ณ„์นญ)

ํ†ต๊ณ„ํ‘œ์ฝ”๋“œ

์ฃผ๊ธฐ

ํ•ญ๋ชฉ์ฝ”๋“œ

๊ธฐ๋ณธ ์ฒ˜๋ฆฌ

ํ•œ๊ตญ์€ํ–‰ ๊ธฐ์ค€๊ธˆ๋ฆฌ

๊ธฐ์ค€๊ธˆ๋ฆฌ, ๊ธˆ๋ฆฌ, base_rate

722Y001

D

0101000

๋ณ€๊ฒฝ ์‹œ์ ๋งŒ

๊ฒฝ์ œ์„ฑ์žฅ๋ฅ (์‹ค์งˆ, ์ „๊ธฐ๋น„ %)

์„ฑ์žฅ๋ฅ , ๊ฒฝ์ œ์„ฑ์žฅ๋ฅ , GDP์„ฑ์žฅ๋ฅ 

200Y102

Q

10111

์‹ค์งˆ GDP(๋ถ„๊ธฐ, ์‹ญ์–ต์›)

GDP, ์‹ค์งˆGDP, ๊ตญ๋‚ด์ด์ƒ์‚ฐ

200Y108

Q

10601

์†Œ๋น„์ž๋ฌผ๊ฐ€์ƒ์Šน๋ฅ (%)

๋ฌผ๊ฐ€์ƒ์Šน๋ฅ , ์ธํ”Œ๋ ˆ์ด์…˜

901Y009

M

0

yoy

์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜(CPI)

CPI, ์†Œ๋น„์ž๋ฌผ๊ฐ€, ๋ฌผ๊ฐ€

901Y009

M

0

์›/๋‹ฌ๋Ÿฌ ํ™˜์œจ(์ผ๋ณ„)

ํ™˜์œจ, ์›๋‹ฌ๋Ÿฌ, ๋‹ฌ๋Ÿฌ, USD

731Y001

D

0000001

์›/๋‹ฌ๋Ÿฌ ํ™˜์œจ(์›”ํ‰๊ท )

์›”ํ‰๊ท ํ™˜์œจ, usd_krw_monthly

731Y004

M

0000001/0000100

๋ณธ์›ํ†ตํ™”(ํ‰์ž”)

๋ณธ์›ํ†ตํ™”, reserve_money

102Y004

M

ABA1

M2 ๊ด‘์˜ํ†ตํ™”

M2, ํ†ตํ™”๋Ÿ‰, ๊ด‘์˜ํ†ตํ™”

161Y006

M

BBHA00

๊ตญ๊ณ ์ฑ„(3๋…„) ์ˆ˜์ต๋ฅ (์ผ๋ณ„)

๊ตญ๊ณ ์ฑ„, ๊ตญ๊ณ ์ฑ„3๋…„, ์ฑ„๊ถŒ๊ธˆ๋ฆฌ

817Y002

D

010200000

๊ตญ๊ณ ์ฑ„(3๋…„) ์ˆ˜์ต๋ฅ (์›”ํ‰๊ท )

๊ตญ๊ณ ์ฑ„์›”ํ‰๊ท , treasury_3y_monthly

721Y001

M

5020000

์ƒ์‚ฐ์ž๋ฌผ๊ฐ€์ง€์ˆ˜(PPI)

PPI, ์ƒ์‚ฐ์ž๋ฌผ๊ฐ€

404Y014

M

*AA

"ํ†ตํ™”", "์ง€์ˆ˜"์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์ง€ํ‘œ์— ๊ฑธ์น˜๋Š” ํ‚ค์›Œ๋“œ๋Š” ํ›„๋ณด ๋ชฉ๋ก์„ ๋‹ด์€ ์—๋Ÿฌ๋ฅผ ๋Œ๋ ค์ฃผ๋ฏ€๋กœ, ๋” ๊ตฌ์ฒด์ ์ธ ํ‚ค์›Œ๋“œ๋‚˜ id๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ์„ค์น˜ (๋กœ์ปฌ ๊ฐœ๋ฐœ ์‹œ)

git clone https://github.com/kgy0617/ecos_mcp.git
cd ecos_mcp
uv sync

2. API ํ‚ค ์„ค์ • (์„ ํƒ)

cp .env.example .env
# .env ํŒŒ์ผ์—์„œ ECOS_API_KEY ์ž…๋ ฅ (๋ฏธ์ž…๋ ฅ ์‹œ sample ํ‚ค ์ž๋™ ์ ์šฉ)

๐Ÿ’ก API ํ‚ค ์—†์ด๋„ sample ํ‚ค๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋ฉฐ, 1ํšŒ ์ตœ๋Œ€ ํ—ˆ์šฉ์น˜(10๊ฑด)๋กœ ์ž๋™ ํด๋žจํ•‘๋ฉ๋‹ˆ๋‹ค.

3. ์ž๊ฐ€ ์ง„๋‹จ ํ—ฌ์Šค์ฒดํฌ ์‹คํ–‰

uv run ecos-mcp --check

๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, API ํ‚ค ์ƒํƒœ, ํ†ต๊ณ„ํ‘œ ์ธ๋ฑ์Šค ๋กœ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ง„๋‹จ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”ง MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json:

๋ฐฉ๋ฒ• A: GitHub URL ์ง์ ‘ ์‹คํ–‰ (ํด๋ก  ๋ถˆํ•„์š”, ์ถ”์ฒœ โญ)

{
  "mcpServers": {
    "ecos": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/kgy0617/ecos_mcp", "ecos-mcp"],
      "env": {
        "ECOS_API_KEY": "your_api_key_here"
      }
    }
  }
}

๋ฐฉ๋ฒ• B: ๋กœ์ปฌ ํด๋ก  ์‹คํ–‰

{
  "mcpServers": {
    "ecos": {
      "command": "uv",
      "args": ["--directory", "/path/to/ecos_mcp", "run", "ecos-mcp"],
      "env": {
        "ECOS_API_KEY": "your_api_key_here"
      }
    }
  }
}

Claude Code

claude mcp add ecos -e ECOS_API_KEY=your_api_key_here -- uvx --from git+https://github.com/kgy0617/ecos_mcp ecos-mcp

Cursor

Settings > Features > MCP Servers > Add New MCP Server:

  • ๋ฐฉ๋ฒ• A (GitHub ์ง์ ‘ ์‹คํ–‰):

    • Name: ecos

    • Type: command

    • Command: uvx --from git+https://github.com/kgy0617/ecos_mcp ecos-mcp

  • ๋ฐฉ๋ฒ• B (๋กœ์ปฌ ํด๋ก ):

    • Name: ecos

    • Type: command

    • Command: uv --directory /path/to/ecos_mcp run ecos-mcp


๐Ÿ“– ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ์ธ๊ธฐ ์ง€ํ‘œ ์›์Šคํ†ฑ ์กฐํšŒ (get_popular_statistic)

์‚ฌ์šฉ์ž: "์ตœ๊ทผ ํ•œ๊ตญ ๊ธฐ์ค€๊ธˆ๋ฆฌ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์—ˆ์–ด?"

Tool ํ˜ธ์ถœ:

{
  "indicator": "๊ธฐ์ค€๊ธˆ๋ฆฌ",
  "recent_years": 2,
  "output_format": "compact"
}

์‘๋‹ต ์˜ˆ์‹œ (์ผ๋ณ„ 500์—ฌ ํ–‰ ๋Œ€์‹  changes_only=True๊ฐ€ ๊ธฐ๋ณธ ์ ์šฉ๋˜์–ด ๊ธˆ๋ฆฌ ๋ณ€๋™ ์‹œ์ ๋งŒ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ˜ํ™˜):

{
  "stat_code": "722Y001",
  "stat_name": "ํ•œ๊ตญ์€ํ–‰ ๊ธฐ์ค€๊ธˆ๋ฆฌ ๋ฐ ์—ฌ์ˆ˜์‹ ๊ธˆ๋ฆฌ",
  "indicator": "base_rate",
  "total_count": 500,
  "count": 3,
  "columns": ["time", "value"],
  "series": [
    {
      "item": "ํ•œ๊ตญ์€ํ–‰ ๊ธฐ์ค€๊ธˆ๋ฆฌ",
      "item_code": "0101000",
      "unit": "์—ฐ%",
      "data": [
        ["20230113", 3.5],
        ["20241011", 3.25],
        ["20241128", 3.0]
      ]
    }
  ]
}

2. ๋ฌผ๊ฐ€์ƒ์Šน๋ฅ  CSV ์ˆ˜์‹  ํ›„ ์ฐจํŠธ ๋ถ„์„

์‚ฌ์šฉ์ž: "์†Œ๋น„์ž๋ฌผ๊ฐ€ ์ƒ์Šน๋ฅ  ์ตœ๊ทผ ๋ฐ์ดํ„ฐ CSV๋กœ ๋ฝ‘์•„์„œ ๋ถ„์„ํ•ด์ค˜"

Tool ํ˜ธ์ถœ:

{
  "indicator": "๋ฌผ๊ฐ€์ƒ์Šน๋ฅ ",
  "recent_years": 1,
  "output_format": "csv"
}

์‘๋‹ต ์˜ˆ์‹œ (transform="yoy"๊ฐ€ ์ž๋™ ์ ์šฉ๋˜์–ด ์ „๋…„๋™๊ธฐ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ  ์—ด์ธ YOY_PCT๊ฐ€ ํฌํ•จ๋จ):

# stat_code: 901Y009
# stat_name: 4.2.1. ์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜
# indicator: inflation_rate
# total_count: 12
# count: 12
TIME,ITEM_CODE,ITEM,VALUE,UNIT,YOY_PCT
202401,0,์ด์ง€์ˆ˜,113.15,2020=100,2.8
202402,0,์ด์ง€์ˆ˜,113.77,2020=100,3.1
202403,0,์ด์ง€์ˆ˜,113.94,2020=100,3.1
202404,0,์ด์ง€์ˆ˜,114.09,2020=100,2.9
202405,0,์ด์ง€์ˆ˜,114.14,2020=100,2.7
...

3. ํ†ต๊ณ„ํ‘œ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๋ฐ ๊ณ„์ธต ํƒ์ƒ‰ (search_statistic_tables)

์‚ฌ์šฉ์ž: "์†Œ๋น„์ž๋ฌผ๊ฐ€ ๊ด€๋ จ ํ†ต๊ณ„ํ‘œ ์ฐพ์•„์ค˜"

Tool ํ˜ธ์ถœ:

{
  "keyword": "์†Œ๋น„์ž ๋ฌผ๊ฐ€",
  "searchable_only": true,
  "limit": 3
}

์‘๋‹ต ์˜ˆ์‹œ (๋กœ์ปฌ ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๋„์–ด์“ฐ๊ธฐ ๋ฌด์‹œ ๋ฐ ๊ด€๋ จ๋„ ์ˆœ ์ •๋ ฌ):

{
  "query": "์†Œ๋น„์ž ๋ฌผ๊ฐ€",
  "total_matches": 3,
  "count": 2,
  "searchable_only": true,
  "index_generated_at": "2026-09-26",
  "rows": [
    {
      "P_STAT_CODE": "0000000211",
      "STAT_CODE": "901Y009",
      "STAT_NAME": "4.2.1. ์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜",
      "CYCLE": "M",
      "SRCH_YN": "Y",
      "ORG_NAME": "๊ตญ๊ฐ€๋ฐ์ดํ„ฐ์ฒ˜(02-2012-9114)"
    },
    {
      "P_STAT_CODE": "0000000211",
      "STAT_CODE": "901Y010",
      "STAT_NAME": "4.2.2. ์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜(ํŠน์ˆ˜๋ถ„๋ฅ˜)",
      "CYCLE": "M",
      "SRCH_YN": "Y",
      "ORG_NAME": "๊ตญ๊ฐ€๋ฐ์ดํ„ฐ์ฒ˜(02-2012-9114)"
    }
  ]
}

Tip: parent_code="0000000211"๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ๋ถ„๋ฅ˜์˜ ํ•˜์œ„ ํ†ต๊ณ„ํ‘œ ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ํƒ์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


4. ํ†ต๊ณ„ ์šฉ์–ด ์‚ฌ์ „ ๊ฒ€์ƒ‰ (search_statistic_word)

์‚ฌ์šฉ์ž: "ํ•œ๊ตญ์€ํ–‰์—์„œ ์ •์˜ํ•˜๋Š” ๊ธฐ์ค€๊ธˆ๋ฆฌ์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๊ฐ€ ๋ญ์•ผ?"

Tool ํ˜ธ์ถœ:

{
  "word": "๊ธฐ์ค€๊ธˆ๋ฆฌ"
}

์‘๋‹ต ์˜ˆ์‹œ:

{
  "total_count": 1,
  "count": 1,
  "rows": [
    {
      "WORD": "๊ธฐ์ค€๊ธˆ๋ฆฌ",
      "CONTENT": "ํ•œ๊ตญ์€ํ–‰์ด ๊ธˆ์œต๊ธฐ๊ด€๊ณผ ํ™˜๋งค์กฐ๊ฑด๋ถ€์ฆ๊ถŒ(RP) ๋งค๋งค, ์ž๊ธˆ์กฐ์ • ์˜ˆ๊ธˆ ๋ฐ ๋Œ€์ถœ ๋“ฑ์˜ ๊ฑฐ๋ž˜๋ฅผ ํ•  ๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ์ •์ฑ…๊ธˆ๋ฆฌ"
    }
  ]
}

๐Ÿงช ํ…Œ์ŠคํŠธ ์‹คํ–‰

uv run pytest            # ์˜คํ”„๋ผ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ (ECOS API๋ฅผ ๋ชจํ‚น, ๋„คํŠธ์›Œํฌ ๋ถˆํ•„์š”)
uv run pytest -m live    # ์‹ค์ œ ECOS API ํ˜ธ์ถœ ํ…Œ์ŠคํŠธ (๋ชจ๋“  ํ”„๋ฆฌ์…‹ ์กฐํšŒ ํ™•์ธ)

๐Ÿ“ ๋ผ์ด์„ ์Šค

MIT License

Available Tools

7 tools
get_key_statistics100๋Œ€ ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œA
Read-onlyIdempotent

100๋Œ€ ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

GDP ์„ฑ์žฅ๋ฅ , ๊ธฐ์ค€๊ธˆ๋ฆฌ, ์†Œ๋น„์ž๋ฌผ๊ฐ€ ์ƒ์Šน๋ฅ , ์‹ค์—…๋ฅ , M1/M2 ํ†ตํ™”๋Ÿ‰ ๋“ฑ
ํ•œ๊ตญ ๊ฒฝ์ œ์˜ ํ•ต์‹ฌ ์ง€ํ‘œ๋ฅผ ํ•œ ๋ฒˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Args:
    start_count: ์กฐํšŒ ์‹œ์ž‘ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 1)
    end_count: ์กฐํšŒ ๋ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 100, sample ํ‚ค๋Š” ์ตœ๋Œ€ 10๊ฑด์œผ๋กœ ์ž๋™ ์ œํ•œ)
    language: ์‘๋‹ต ์–ธ์–ด โ€” "kr"(ํ•œ๊ตญ์–ด) ๋˜๋Š” "en"(์˜์–ด)

Returns:
    ์ฃผ์š” ๊ฒฝ์ œ์ง€ํ‘œ ๋ชฉ๋ก

Inputs: language, end_count, start_count.

get_statistic_metaํ†ต๊ณ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐA
Read-onlyIdempotent

ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ์…‹์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๊ตฌ์กฐ, ์ž‘์„ฑ๋ฐฉ๋ฒ•, ์„ค๋ช…)๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

Args:
    data_name: ๋ฐ์ดํ„ฐ์…‹ ์ด๋ฆ„ (ํ•„์ˆ˜). ์˜ˆ: "๊ฒฝ์ œ์‹ฌ๋ฆฌ์ง€์ˆ˜", "์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜"
    start_count: ์กฐํšŒ ์‹œ์ž‘ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 1)
    end_count: ์กฐํšŒ ๋ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 100)
    language: ์‘๋‹ต ์–ธ์–ด โ€” "kr" ๋˜๋Š” "en"

Returns:
    ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

Inputs: data_name (required), language, end_count, start_count.

list_statistic_itemsํ†ต๊ณ„ํ‘œ ์„ธ๋ถ€ํ•ญ๋ชฉA
Read-onlyIdempotent

ํŠน์ • ํ†ต๊ณ„ํ‘œ์˜ ์„ธ๋ถ€ ํ•ญ๋ชฉ(ํ•ญ๋ชฉ์ฝ”๋“œ, ์ง€์› ์ฃผ๊ธฐ, ์ˆ˜๋ก ๊ธฐ๊ฐ„, ๋‹จ์œ„)์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

Args:
    stat_code: ํ†ต๊ณ„ํ‘œ์ฝ”๋“œ (ํ•„์ˆ˜). search_statistic_tables์—์„œ ์ฐพ์€ ์ฝ”๋“œ ์ž…๋ ฅ.
    start_count: ์กฐํšŒ ์‹œ์ž‘ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 1)
    end_count: ์กฐํšŒ ๋ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 500)
    language: ์‘๋‹ต ์–ธ์–ด โ€” "kr" ๋˜๋Š” "en"

Returns:
    ์„ธ๋ถ€ํ•ญ๋ชฉ ๋ชฉ๋ก (has_more=true๋ฉด start_count๋ฅผ ๋Š˜๋ ค ๋‹ค์Œ ํŽ˜์ด์ง€ ์กฐํšŒ)

Inputs: stat_code (required), language, end_count, start_count.

search_statisticsํ†ต๊ณ„ ์‹œ๊ณ„์—ด ์กฐํšŒA
Read-onlyIdempotent

ํ†ต๊ณ„ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ฑด๋ณ„๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

โ˜… ์Šค๋งˆํŠธ ๋‚ ์งœ: start_date, end_date๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์ผ๊ฐ„(D)์€ ์ตœ๊ทผ 3๊ฐœ์›”, ๊ทธ ์™ธ ์ฃผ๊ธฐ๋Š” ์ตœ๊ทผ 2๋…„์ด ์ž๋™ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
โ˜… ์ตœ์‹  ์šฐ์„ : ๊ฒฐ๊ณผ๊ฐ€ end_count๋ฅผ ๋„˜์œผ๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ ๊ตฌ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  truncated=true์™€ ์•ˆ๋‚ด๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
โ˜… ์ฆ๊ฐ๋ฅ : transform="yoy"(์ „๋…„๋™๊ธฐ๋Œ€๋น„ %) ๋˜๋Š” "pop"(์ง์ „ ๊ด€์ธก์น˜ ๋Œ€๋น„ %)๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ณ„์‚ฐ ์—ด์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
โ˜… ํฌ๋งท: "compact"(๊ธฐ๋ณธ๊ฐ’, ๊ณ„์—ด๋ณ„ [์‹œ์ , ๊ฐ’] ๋ฐฐ์—ด), "csv", "json"(ECOS ์›๋ณธ ํ–‰)

โ˜… ์ฃผ๊ธฐ(cycle) ๋ฐ ๋‚ ์งœ ํฌ๋งท ๊ทœ์น™:
- ์—ฐ๊ฐ„(A): YYYY (์˜ˆ: "2024")
- ๋ฐ˜๊ธฐ(S): YYYYS1, YYYYS2 (์˜ˆ: "2023S1")
- ๋ถ„๊ธฐ(Q): YYYYQ1 ~ YYYYQ4 (์˜ˆ: "2024Q3")
- ์›”๊ฐ„(M): YYYYMM (์˜ˆ: "202401")
- ๋ฐ˜์›”(SM): YYYYMMS1, YYYYMMS2 (์˜ˆ: "202401S1")
- ์ผ๊ฐ„(D): YYYYMMDD (์˜ˆ: "20240315")

Args:
    stat_code: ํ†ต๊ณ„ํ‘œ์ฝ”๋“œ (ํ•„์ˆ˜). ์˜ˆ: "722Y001"(๊ธฐ์ค€๊ธˆ๋ฆฌ), "901Y009"(์†Œ๋น„์ž๋ฌผ๊ฐ€)
    cycle: ์ฃผ๊ธฐ (ํ•„์ˆ˜). A(์—ฐ), S(๋ฐ˜๊ธฐ), Q(๋ถ„๊ธฐ), M(์›”), SM(๋ฐ˜์›”), D(์ผ)
    start_date: ๊ฒ€์ƒ‰ ์‹œ์ž‘์ผ (์„ ํƒ)
    end_date: ๊ฒ€์ƒ‰ ์ข…๋ฃŒ์ผ (์„ ํƒ)
    item_code1~4: ํ†ต๊ณ„ํ•ญ๋ชฉ์ฝ”๋“œ (์„ ํƒ. ๋ฏธ์ง€์ • ์‹œ ์ „์ฒด ์„ธ๋ถ€ํ•ญ๋ชฉ ์กฐํšŒ โ€” ๊ฒฐ๊ณผ๊ฐ€ ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ)
    output_format: "compact"(๊ธฐ๋ณธ๊ฐ’), "csv", "json"
    transform: "yoy", "pop", "none"(๊ธฐ๋ณธ๊ฐ’)
    changes_only: True๋ฉด ๊ฐ’์ด ๋ฐ”๋€ ์‹œ์ ๋งŒ ๋ฐ˜ํ™˜ (๊ธˆ๋ฆฌ์ฒ˜๋Ÿผ ๋“œ๋ฌผ๊ฒŒ ๋ณ€ํ•˜๋Š” ์ผ๋ณ„ ์ง€ํ‘œ์— ์œ ์šฉ)
    prefer_latest: ๊ฒฐ๊ณผ๊ฐ€ ์ž˜๋ฆด ๋•Œ ์ตœ์‹  ๊ตฌ๊ฐ„์„ ์šฐ์„  ๋ฐ˜ํ™˜ (๊ธฐ๋ณธ๊ฐ’ True)
    start_count: ์กฐํšŒ ์‹œ์ž‘ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 1)
    end_count: ์กฐํšŒ ๋ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 1000)
    language: ์‘๋‹ต ์–ธ์–ด โ€” "kr" ๋˜๋Š” "en"

Returns:
    ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ (์ง€์ •๋œ ํฌ๋งท)

Inputs: cycle (required), stat_code (required), end_date, language, +11 more.

search_statistic_tablesํ†ต๊ณ„ํ‘œ ๊ฒ€์ƒ‰ยทํƒ์ƒ‰A
Read-onlyIdempotent

ํ†ต๊ณ„ํ‘œ ์ด๋ฆ„์œผ๋กœ ํ†ต๊ณ„ํ‘œ์ฝ”๋“œ(STAT_CODE)๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜, ํ†ต๊ณ„ํ‘œ ๋ถ„๋ฅ˜ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

ECOS ํ†ต๊ณ„ํ‘œ ์ „์ฒด์˜ ๋กœ์ปฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ API ํ˜ธ์ถœ ์—†์ด ์ฆ‰์‹œ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
- keyword ์ง€์ •: ์ด๋ฆ„ ๊ฒ€์ƒ‰. ๋„์–ด์“ฐ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๋‹จ์–ด๊ฐ€ ๋ชจ๋‘ ํฌํ•จ๋œ ํ†ต๊ณ„ํ‘œ๋ฅผ ๊ด€๋ จ๋„ ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜
  ("์†Œ๋น„์ž ๋ฌผ๊ฐ€" โ†’ "์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜"). parent_code๋ฅผ ํ•จ๊ป˜ ์ฃผ๋ฉด ๊ทธ ๋ถ„๋ฅ˜ ์•„๋ž˜์—์„œ๋งŒ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
- keyword ์—†์ด parent_code ์ง€์ •: ํ•ด๋‹น ๋ถ„๋ฅ˜์˜ ์ง์† ํ•˜์œ„ ํ•ญ๋ชฉ ๋ฐ˜ํ™˜ (๋ถ„๋ฅ˜ ๋…ธ๋“œ ํฌํ•จ)
- ๋‘˜ ๋‹ค ์—†์Œ: ์ตœ์ƒ์œ„ ๋ถ„๋ฅ˜ ๋ชฉ๋ก ๋ฐ˜ํ™˜

Args:
    keyword: ๊ฒ€์ƒ‰ํ•  ํ†ต๊ณ„๋ช… ๋˜๋Š” ํ‚ค์›Œ๋“œ (์˜ˆ: "๋ฌผ๊ฐ€", "๊ธˆ๋ฆฌ", "ํ™˜์œจ", "๊ฒฝ์ƒ์ˆ˜์ง€")
    parent_code: ์ƒ์œ„ ๋ถ„๋ฅ˜ STAT_CODE (์˜ˆ: "0000000001")
    searchable_only: keyword ๊ฒ€์ƒ‰ ์‹œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ†ต๊ณ„ํ‘œ(SRCH_YN='Y')๋งŒ ๋ฐ˜ํ™˜ (๊ธฐ๋ณธ๊ฐ’: True)
    limit: keyword ๊ฒ€์ƒ‰ ์‹œ ์ตœ๋Œ€ ๋ฐ˜ํ™˜ ๊ฐœ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 20)

Returns:
    ํ†ต๊ณ„ํ‘œ ๋ชฉ๋ก (STAT_CODE, STAT_NAME, CYCLE, SRCH_YN ๋“ฑ)

Inputs: limit, keyword, parent_code, searchable_only.

search_statistic_wordํ†ต๊ณ„ ์šฉ์–ด ์‚ฌ์ „A
Read-onlyIdempotent

๊ฒฝ์ œ/ํ†ต๊ณ„ ์šฉ์–ด์˜ ์ •์˜๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ๊ตญ์€ํ–‰ ํ†ต๊ณ„์šฉ์–ด์‚ฌ์ „์—์„œ ์šฉ์–ด์˜ ์ƒ์„ธ ์„ค๋ช…์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ: "๊ธฐ์ค€๊ธˆ๋ฆฌ", "GDP", "์†Œ๋น„์ž๋ฌผ๊ฐ€์ง€์ˆ˜", "ํ†ตํ™”์Šน์ˆ˜" ๋“ฑ
(ECOS ๋ฐฉํ™”๋ฒฝ ์ œ์•ฝ์œผ๋กœ '/'๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๋ฐ”๋€Œ์–ด ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค.)

Args:
    word: ๊ฒ€์ƒ‰ํ•  ํ†ต๊ณ„/๊ฒฝ์ œ ์šฉ์–ด
    start_count: ์กฐํšŒ ์‹œ์ž‘ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 1)
    end_count: ์กฐํšŒ ๋ ์ˆœ๋ฒˆ (๊ธฐ๋ณธ๊ฐ’: 10)
    language: ์‘๋‹ต ์–ธ์–ด โ€” "kr" ๋˜๋Š” "en"

Returns:
    ์šฉ์–ด ์ •์˜ ๋ชฉ๋ก

Inputs: word (required), language, end_count, start_count.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    A4.1/5.0

    Scored across 7 tools

    Disambiguation3/5

    get_popular_statistic, get_key_statistics, and search_statistics all return economic indicator data, so an agent must infer which mode fits the query. The descriptions clarify code-free keyword lookup versus generic code-based queries versus a fixed 100-indicator list, but 'popular' and 'key' remain semantically close.

    Naming Consistency3/5

    Names are grouped by action (get_, search_, list_) and remain readable, but the set mixes singular and plural forms ('statistic' vs 'statistics') and uses different object patterns like get_popular_statistic versus get_key_statistics. The naming is not chaotic, but it is not fully consistent.

    Tool Count5/5

    Seven tools is a well-scoped size for an economic-statistics server. Each tool serves a distinct stage of the workflow: quick lookup, generic retrieval, table discovery, item discovery, metadata, and dictionary lookup.

    Completeness5/5

    The tool surface covers the main ECOS workflows end to end: find a statistical table, inspect its items, retrieve time series, fetch metadata, look up terms, and access popular or major indicators. There are no obvious dead ends or missing core operations for the stated domain.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      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.
      8
      13 npm
      17
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables querying Korean official statistics from KOSIS via natural language in MCP clients like Claude Desktop, wrapping the KOSIS OpenAPI for search, data retrieval, and metadata exploration.
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables querying Korean economic statistics via Bank of Korea's ECOS API, including time series data, statistical tables, items, key indicators, and terminology, with raw responses and error fidelity.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables querying Bank of Korea ECOS economic statistics via Open API, including searching tables, retrieving time series data, and accessing key indicators.
      MIT