Public Data API Finder
No description available
Ask AI about Public Data API Finder
Powered by Claude Β· Grounded in docs
I know everything about Public Data API Finder. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
public-data-api-finder MCP
νκ΅ κ³΅κ³΅λ°μ΄ν°ν¬νΈ(data.go.kr)μ κ³΅κ° APIλ₯Ό μμ°μ΄λ‘ κ²μνκ³ μΆμ²ν΄μ£Όλ Model Context Protocol(MCP) μλ²
Claude, Cursor λ± MCPλ₯Ό μ§μνλ AI μ΄μμ€ν΄νΈμ μ°κ²°νλ©΄, μμ΄λμ΄λ₯Ό μ€λͺ νλ κ²λ§μΌλ‘ κ΄λ ¨ 곡곡 APIλ₯Ό μλμΌλ‘ μ°Ύμ μΆμ²ν΄μ€λλ€.
MCPλ?
Model Context Protocol(MCP) μ Anthropicμ΄ λ§λ μ€ν νμ€μΌλ‘, AI μ΄μμ€ν΄νΈκ° μΈλΆ λꡬ·λ°μ΄ν° μμ€λ₯Ό νμ€νλ λ°©μμΌλ‘ νΈμΆν μ μκ² νλ νλ‘ν μ½μ λλ€.
μ΄ νλ‘μ νΈλ MCP μλ²λ‘ λμνλ©°, AIκ° λν μ€ νμνλ€κ³ νλ¨νλ©΄ μλμΌλ‘ 곡곡λ°μ΄ν° κ²μ λꡬλ₯Ό νΈμΆν©λλ€. μ¬μ©μλ λ³λ μ½λλ₯Ό μ§κ±°λ APIλ₯Ό μ§μ νΈμΆν νμ μμ΄, μμ°μ΄λ‘ λννκΈ°λ§ νλ©΄ λ©λλ€.
μ¬μ©μ: "μ€μκ° λ²μ€ μμΉ λ°μ΄ν°κ° νμν μ±μ λ§λ€κ³ μΆμ΄"
AI: (λ΄λΆμ μΌλ‘ recommend_public_apis_for_idea νΈμΆ)
AI: "κ΅ν κ΅ν΅λΆ_λ²μ€μμΉμ 보쑰νμλΉμ€ APIλ₯Ό μΆμ²ν©λλ€. μ€μκ° REST APIλ‘..."
μν€ν μ²
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI μ΄μμ€ν΄νΈ (Claude / Cursor) β
β (μμ°μ΄ μ
λ ₯ μ²λ¦¬ + μλ΅ μμ±) β
βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β MCP (stdio)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β public-data-api-finder MCP μλ² β
β β
β ββββββββββββββββ ββββββββββββββββ βββββββββββββββββ β
β β recommend_ β β search_ β β get_dataset_ β β
β β public_apis β β public_ β β detail β β
β β _for_idea β β datasets β β β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬βββββββββ β
β β β β β
β ββββββββΌββββββββββββββββββΌβββββββββββββββββββΌββββββββ β
β β ν€μλ μΆμΆ β κ²μ β μ κ·ν β μ μν β μΊμ β β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ β
β β μ§μ λ°±μ€ν μ¬μλ β
ββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ
β HTTPS POST (JSON)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 곡곡λ°μ΄ν°νμ©μ§μμΌν°_곡곡λ°μ΄ν°ν¬νΈ κ²μ μλΉμ€ (ID: 15112888) β
β api.odcloud.kr/api/GetSearchDataList/v1/searchData β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
μ 곡 λꡬ (MCP Tools)
1. recommend_public_apis_for_idea
μμ΄λμ΄ ν μ€νΈλ₯Ό μ λ ₯νλ©΄ κ΄λ ¨ 곡곡 APIλ₯Ό μλμΌλ‘ κ²μΒ·μ μνΒ·μΆμ²ν©λλ€.
λ΄λΆ μ²λ¦¬ νλ¦
- ν€μλ μΆμΆ β νκ΅μ΄ ννμ λΆμμΌλ‘ ν΅μ¬ ν€μλ μΆμΆ, λλ©μΈ λμμ΄ νμ₯ (μ: "λ μ¨" β κΈ°μ, κΈ°μ¨, κ°μ)
- λ³λ ¬ κ²μ β μΆμΆλ ν€μλλ³λ‘ 곡곡λ°μ΄ν° APIλ₯Ό λμ νΈμΆ
- μ κ·ν β λ€μν μλ΅ κ΅¬μ‘°λ₯Ό λ΄λΆ ν΅μΌ ν¬λ§·μΌλ‘ λ³ν + μ€λ³΅ μ κ±°
- μ μν β μλ μκ³ λ¦¬μ¦μΌλ‘ 100μ λ§μ μ°μΆ
- μΊμ μ μ₯ β λμΌ μ§μ μ¬μμ² μ API μ¬νΈμΆ μμ΄ λ°ν
μ μν μκ³ λ¦¬μ¦
| νλͺ© | μ΅λ μ μ | μ€λͺ |
|---|---|---|
| λλ©μΈ μ ν©λ | 40μ | μ λͺ©Β·μ€λͺ Β·νκ·Έμ κ²μ ν€μλ ν¬ν¨ μ¬λΆ. μ λͺ© λ§€μΉ +2 κ°μ€μΉ, ν¬νΈ νκ·Έ λ§€μΉ +1 μΆκ° |
| APIν μ¬λΆ | 20μ | OpenAPI(REST/SOAP) ννλ©΄ λ§μ . νμΌνμ 0μ |
| μ λ°μ΄νΈ μ£ΌκΈ° | 10μ | μ€μκ°/λ§€μΌ 10μ β μ£Όκ° 7μ β μκ° 5μ β μ°κ° 1μ |
| μ΅μ μ± | 10μ | μ΅κ·Ό 3κ°μ μμ 10μ β 6κ°μ 8μ β 1λ 6μ β 3λ μ΄μ 1μ |
| μ§μμ± | 10μ | μ§μ κ΄λ ¨ μμ² μ μ§μ λ°μ΄ν° μ°λ |
| μ€λͺ νμ§ | 5μ | μ€λͺ κΈΈμ΄κ° κΈΈμλ‘ κ°μ |
| κ΅κ°μ€μ λ°μ΄ν° | 5μ | μ λΆ μ§μ κ΅κ°μ€μ λ°μ΄ν° κ°μ°μ |
νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | μ€λͺ |
|---|---|---|---|
ideaText | string | β | μμ΄λμ΄ μ€λͺ (μμ°μ΄, νκ΅μ΄ κΆμ₯) |
apiOnly | boolean | β | trueλ©΄ OpenAPI νμ λ§ λ°ν |
realtimePreferred | boolean | β | trueλ©΄ μ€μκ° λ°μ΄ν° μ°μ μ λ ¬ + λΆμ€νΈ |
domainHint | string | β | λλ©μΈ ννΈ (μ: "κ΅ν΅", "μλ£") |
limit | number | β | μ΅λ μΆμ² μ (κΈ°λ³Έ 5, μ΅λ 10) |
μμ μλ΅
{
"ideaSummary": "μ§μ μΆμ μλ¦Ό μ±",
"extractedKeywords": ["μ§μ", "μΆμ ", "μλ¦Ό", "νμ¬", "λ¬Έννμ¬"],
"recommendations": [
{
"title": "λμ κ΄μμ λ¬ΈνμΆμ μ 보",
"provider": "λμ κ΄μμ",
"type": "API",
"updateCycle": "2024-11-12",
"score": 72,
"reason": "'μΆμ ', 'νμ¬', 'λ¬Έννμ¬'μ(κ³Ό) κ΄λ ¨λ©λλ€. OpenAPI ννλ‘ μ§μ νΈμΆ κ°λ₯ν©λλ€. λμ κ΄μμ μ 곡.",
"detailUrl": "https://www.data.go.kr/data/15006969/openapi.do"
}
]
}
2. get_dataset_detail
μΆμ²λ λ°μ΄ν°μ μ μ€μ API λͺ μΈλ₯Ό μμΈ μ‘°νν©λλ€. data.go.kr μμΈ νμ΄μ§μμ Swagger specμ μλ νμ±ν΄ νΈμΆμ νμν μ 보λ₯Ό λͺ¨λ λ°νν©λλ€.
νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | μ€λͺ |
|---|---|---|---|
detailUrl | string | β | data.go.kr λ°μ΄ν°μ μμΈ URL |
μμ μλ΅
{
"title": "곡곡λ°μ΄ν° ν¬νΈ κ²μ μλΉμ€",
"baseUrl": "https://api.odcloud.kr/api",
"endpoints": [
{
"method": "POST",
"path": "/GetSearchDataList/v1/searchData",
"summary": "λ°μ΄ν°μ
κ²μ",
"parameters": [
{ "name": "keyword", "in": "body", "required": false, "type": "string", "description": "κ²μμ΄" },
{ "name": "page", "in": "body", "required": false, "type": "integer", "description": "νμ΄μ§ λ²νΈ" },
{ "name": "size", "in": "body", "required": false, "type": "integer", "description": "κ²°κ³Ό μ" }
]
}
],
"authMethod": "쿼리 νλΌλ―Έν°: serviceKey",
"swaggerUrl": "https://infuser.odcloud.kr/api/stages/43698/api-docs",
"detailPageUrl": "https://www.data.go.kr/data/15112888/openapi.do"
}
3. search_public_datasets
ν€μλλ‘ κ³΅κ³΅λ°μ΄ν°λ₯Ό μ§μ κ²μν©λλ€. μΆμ² μμ΄ μμ κ²°κ³Όκ° νμν λ μ¬μ©ν©λλ€.
νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | μ€λͺ |
|---|---|---|---|
query | string | β | κ²μ ν€μλ |
page | number | β | νμ΄μ§ λ²νΈ (κΈ°λ³Έ 1) |
limit | number | β | κ²°κ³Ό μ (κΈ°λ³Έ 10) |
dataType | string[] | β | νν°: ["API"], ["FILE"], ["API","FILE","STD"] |
brm | string | β | λΆλ₯μ²΄κ³ νν° (μ: "λ¬Ένκ΄κ΄", "κ΅ν΅λ¬Όλ₯") |
updatedAfter | string | β | μμ μΌ μ΄ν νν° (YYYY-MM-DD) |
4. refine_recommendations
μ΄μ μΆμ² κ²°κ³Όλ₯Ό API μ¬νΈμΆ μμ΄ μ¬νν°λ§Β·μ¬μ λ ¬ν©λλ€. ν ν°κ³Ό API νΈμΆ νμλ₯Ό μ μ½ν©λλ€.
νλΌλ―Έν°
| νλΌλ―Έν° | νμ | νμ | μ€λͺ |
|---|---|---|---|
previousResults | array | β | μ΄μ μΆμ² κ²°κ³Ό λ°°μ΄ |
apiOnly | boolean | β | OpenAPI νμ λ§ νν°λ§ |
realtimePreferred | boolean | β | μ€μκ° λ°μ΄ν° μμΌλ‘ μ λ ¬ |
providerIncludes | string | β | μ κ³΅κΈ°κ΄ μ΄λ¦ ν¬ν¨ νν° (μ: "κ΅ν κ΅ν΅λΆ") |
μΊμ μ λ΅
| 쿼리 μ ν | TTL | μ€λͺ |
|---|---|---|
| μ€μκ° ν€μλ (λ μ¨, κ΅ν΅ λ±) | 1λΆ | μ΅μ λ°μ΄ν° μ€μ |
| μΌλ° μΆμ²/κ²μ | 5λΆ | κΈ°λ³Έκ° |
| λ°μ΄ν°μ μμΈ μ 보 | 30λΆ | API λͺ μΈλ μμ£Ό λ³κ²½λμ§ μμ |
μ¬μ μꡬμ¬ν
- Node.js 18 μ΄μ
- pnpm 8 μ΄μ
- 곡곡λ°μ΄ν°ν¬νΈ κ²μ μλΉμ€ API ν€
- data.go.kr νμκ°μ ν λ‘κ·ΈμΈ
- 곡곡λ°μ΄ν°νμ©μ§μμΌν°_곡곡λ°μ΄ν°ν¬νΈ κ²μ μλΉμ€ (ID: 15112888) νμ© μ μ²
- λ§μ΄νμ΄μ§ β λ°μ΄ν° νμ© β Open API β κ°λ°κ³μ μμΈλ³΄κΈ°μμ μΌλ° μΈμ¦ν€(Encoding) 볡μ¬
μ€μΉ
git clone https://github.com/boam79/public-data-api-finder.git
cd public-data-api-finder
pnpm install
pnpm build
νκ²½λ³μ μ€μ
cp .env.example .env
.env νμΌμ μ΄μ΄ λ°κΈλ°μ μΈμ¦ν€(Encoding)λ₯Ό μ
λ ₯ν©λλ€.
PUBLIC_DATA_SERVICE_KEY=hIa%2BwCHFe509o... # λ°κΈλ°μ Encoding ν€
.envνμΌμ.gitignoreμ ν¬ν¨λμ΄ μμ΄ μ격 μ μ₯μμ μ λ‘λλμ§ μμ΅λλ€.
Cursorμ MCP λ±λ‘
~/.cursor/mcp.json νμΌμ μΆκ°ν©λλ€.
{
"mcpServers": {
"public-data-api-finder": {
"command": "node",
"args": ["/μ λκ²½λ‘/public-data-api-finder/dist/server.js"],
"env": {
"PUBLIC_DATA_SERVICE_KEY": "λ°κΈλ°μ_μΈμ¦ν€(Encoding)"
}
}
}
}
Cursorλ₯Ό μ¬μμνλ©΄ AI μ±ν μμ λκ΅¬κ° νμ±νλ©λλ€.
Claude Desktopμ MCP λ±λ‘
~/Library/Application Support/Claude/claude_desktop_config.json νμΌμ μΆκ°ν©λλ€.
{
"mcpServers": {
"public-data-api-finder": {
"command": "node",
"args": ["/μ λκ²½λ‘/public-data-api-finder/dist/server.js"],
"env": {
"PUBLIC_DATA_SERVICE_KEY": "λ°κΈλ°μ_μΈμ¦ν€(Encoding)"
}
}
}
}
Claude Desktopμ μ¬μμνλ©΄ λκ΅¬κ° νμ±νλ©λλ€.
κ°λ°
pnpm test # vitest λ¨μ ν
μ€νΈ (20κ°)
pnpm build # TypeScript μ»΄νμΌ
pnpm dev # λ³κ²½ κ°μ§ μλ μ¬λΉλ
κΈ°μ μ€ν
| νλͺ© | λ΄μ© |
|---|---|
| μΈμ΄/λ°νμ | TypeScript, Node.js 18+ |
| MCP SDK | @modelcontextprotocol/sdk |
| μ€ν€λ§ κ²μ¦ | zod |
| ν μ€νΈ | vitest |
| ν¨ν€μ§ κ΄λ¦¬ | pnpm |
| λ°μ΄ν° μμ€ | 곡곡λ°μ΄ν°ν¬νΈ κ²μ μλΉμ€ (ID: 15112888) |
| μΈμ¦ | serviceKey 쿼리 νλΌλ―Έν° |
| μΊμ | in-memory Map (TTL μ°¨λ± μ μ©) |
| μ€λ₯ μ²λ¦¬ | μ§μ λ°±μ€ν μ¬μλ (μ΅λ 3ν) |
λ²μ νμ€ν 리
| λ²μ | λ μ§ | μ£Όμ λ³κ²½ μ¬ν |
|---|---|---|
| v1.5.0 | 2026-04-19 | νμ± μ€λ₯/κ΄λ ¨μ± μμ β get_dataset_detail SPA νκ³ ν΄κ²°(/catalog/{id}/openapi.json λ°©μμΌλ‘ κ΅μ²΄), μ΅μ μ μ μκ³κ°(15μ ) νν°λ‘ 무κ΄ν κ²°κ³Ό μ κ±°, K-Startup/R&D νΉμλ¬Έμ ν€μλ μ μ (HTTP 500 λ°©μ§), λλ©μΈ νμ₯ μΆκ°(λλΌμ₯ν°/KOSIS/μ°½μ
/μ‘°λ¬) |
| v1.4.0 | 2026-04-16 | κ²μ λ²μ νμ₯ β dataType κΈ°λ³Έκ° ["API"]β["FILE","API","STD"]λ‘ νμ₯, κ²μ ν€μλ 3β5κ°, size 10β20, κΈ°κ΄λͺ
μλ κ°μ§(organizations νν°), FILE/STD νμ
μ μν λ°μ, λλ©μΈ νμ₯ μ¬μ κ°ν (μλ£/κΈ°κ΄) |
| v1.3.1 | 2026-04-16 | README μμΈν β μ μν μκ³ λ¦¬μ¦ ν, μΊμ μ λ΅, μ€μΉ/μ€μ κ°μ΄λ, λκ΅¬λ³ νλΌλ―Έν° μμΈ κΈ°μ |
| v1.3.0 | 2026-04-16 | κ³ λν (Phase 1/2/4) β λ€μ€ νν° κ²μ(dataType/brm/organizations/λ μ§ λ²μ), get_dataset_detail μ κ· λꡬ, μΊμ TTL μ°¨λ±ν(1λΆ/5λΆ/30λΆ), μ§μ λ°±μ€ν μ¬μλ(μ΅λ 3ν/8μ΄ νμμμ), μ μν 100μ μ²΄κ³ μμ± (recencyScore, coreData 보λμ€, νκ·Έ λ§€μΉ) |
| v1.2.1 | 2026-04-16 | sort νλΌλ―Έν° μ€ν μμ (_sortβ_score) β HTTP 500 λ²κ·Έ ν΄κ²°, ꡬ쑰νλ μ€λ₯ μλ΅ λ°ν |
| v1.2.0 | 2026-04-16 | 곡곡λ°μ΄ν°ν¬νΈ κ²μ μλΉμ€ API κ΅μ²΄ (ID: 15077093β15112888) β POST λ°©μ/JSON λ°λ/serviceKey 쿼리 νλΌλ―Έν°, κΈ°λ³Έ ꡬν μμ± λ° GitHub μ΅μ΄ κ³΅κ° |
| v1.1.0 | 2026-04-16 | MCP μλ² μ΄κΈ° ꡬν β recommend_public_apis_for_idea, search_public_datasets, refine_recommendations 3κ° λꡬ, κΈ°λ³Έ μ μν/μΊμ |
| v1.0.0 | 2026-04-16 | νλ‘μ νΈ μμ β PRD λΆμ, λͺ©λ‘μ‘°νμλΉμ€(ID: 15077093) μ°λ μλ |
v1.0.0 β v1.4.0 μ£Όμ λ³ν
| νλͺ© | v1.0.0 (μ΄κΈ°) | v1.4.0 (νμ¬) |
|---|---|---|
| API μλν¬μΈνΈ | 15077093 (λ―Έμλ) | 15112888 (μ μ) |
| μΈμ¦ λ°©μ | Authorization ν€λ | serviceKey 쿼리 νλΌλ―Έν° |
| κ²μ νμ | APIλ§ | FILE + API + STD μ 체 |
| κ²μ size | 10κ°/ν€μλ | 20κ°/ν€μλ |
| κ²μ ν€μλ μ | 3κ° | 5κ° |
| κΈ°κ΄λͺ νν° | μμ | μλ κ°μ§ ν organizations μ μ© |
| λꡬ μ | 3κ° | 4κ° (+ get_dataset_detail) |
| μ μν νλͺ© | κΈ°λ³Έ 3κ°μ§ | 7κ°μ§ (λλ©μΈ/νμ /μ£ΌκΈ°/μ΅μ μ±/μ§μ/μ€λͺ /μ€μ λ°μ΄ν°) |
| FILE νμ μ μ | 0μ | 5μ (STD 10μ , API 20μ ) |
| μΊμ TTL | κ³ μ 5λΆ | μ€μκ° 1λΆ / κΈ°λ³Έ 5λΆ / μμΈ 30λΆ |
| μ€λ₯ μ²λ¦¬ | λ¨μ throw | μ§μ λ°±μ€ν μ¬μλ + ꡬ쑰ν μ€λ₯ JSON |
| ν μ€νΈ | μμ | vitest 20κ° ν μ€νΈ |
λΌμ΄μ μ€
MIT
