기상청 공공데이터 MCP 서버 — 날씨 API를 Claude Desktop에 연결하기
기상청 OpenAPI 키 발급부터 MCP 서버 설정, Claude Desktop 연결까지 단계별로 안내합니다. 공공데이터 날씨 정보를 AI와 바로 연동하는 실전 가이드입니다.
기상청 OpenAPI를 발급받고 MCP 서버를 설정하면, Claude Desktop에서 자연어로 날씨를 물어보는 것만으로 실시간 기상 데이터를 받을 수 있습니다. 이 가이드에서는 공공데이터포털 가입부터 API 키 발급, MCP 서버 설정, Claude Desktop 연결, 실제 동작 확인까지 다섯 단계로 안내합니다. 기상청 공공데이터는 완전 무료이며, 설정은 30분 안에 완료할 수 있습니다.
왜 기상청 MCP가 필요한가
Claude 같은 AI 모델은 기본적으로 학습 시점의 데이터만 알고 있습니다. “오늘 서울 날씨 어때?”라고 물어도 실시간 날씨를 알 수 없습니다. MCP(Model Context Protocol)는 이 한계를 외부 도구 연결로 해소합니다. 기상청 MCP 서버를 Claude에 연결하면, 모델이 필요한 순간 직접 기상청 API를 호출해 최신 날씨 데이터를 가져옵니다.
활용 폭도 넓습니다. 단순한 날씨 확인을 넘어, 기상 조건에 따른 일정 자동 조율, 농업이나 물류 현장의 기상 기반 의사결정 지원, 기상 데이터를 포함한 보고서 자동 작성 등에 응용할 수 있습니다.
기상청 공공데이터 MCP 데이터 흐름
사용자 질문 ("오늘 서울 날씨?")
│
▼
Claude Desktop (AI 클라이언트)
│ MCP 프로토콜 (stdio)
▼
기상청 MCP 서버 (로컬 프로세스)
│ HTTP 요청 + API 키
▼
기상청 단기예보 OpenAPI (data.go.kr)
│ JSON 응답
▼
기상청 MCP 서버 → Claude Desktop → 답변 생성
데이터는 클라우드를 거치지 않고 사용자 PC에서 직접 기상청 서버로 요청합니다. API 키도 로컬 설정 파일에만 저장됩니다.
준비물
| 항목 | 설명 |
|---|---|
| 공공데이터포털 계정 | data.go.kr 무료 회원가입 |
| 기상청 API 인증키 | 포털에서 신청 후 즉시 발급 |
| Claude Desktop | Anthropic 공식 데스크톱 앱 |
| Python 또는 Node.js | MCP 서버 실행 환경 |
1단계 — 공공데이터포털 API 키 발급
기상청 OpenAPI는 data.go.kr을 통해 무료로 제공됩니다.
- 공공데이터포털 가입: data.go.kr에 접속해 회원가입을 완료합니다.
- 기상청 API 검색: 검색창에 “기상청 단기예보 조회서비스”를 입력해 해당 데이터셋을 찾습니다.
- 활용 신청: 데이터셋 페이지에서 “활용 신청” 버튼을 클릭합니다. 목적을 간략히 입력하면 즉시 또는 당일 승인됩니다.
- 인증키 확인: 마이페이지 → 개발계정 → 인증키 발급 현황에서 키를 확인합니다. 일반 인증키와 보안 인증키 두 가지가 있는데, 일반적으로 일반 인증키를 사용합니다.
발급된 인증키는 길고 복잡한 문자열입니다. 메모장이나 비밀번호 관리 앱에 안전하게 보관하세요.
2단계 — 기상청 MCP 서버 선택 및 환경 준비
현재 기상청 OpenAPI를 직접 래핑하는 독립 MCP 서버는 커뮤니티에서 개발 중인 단계입니다. 공공데이터포털 MCP 서버 모음처럼 data.go.kr 전반을 다루는 서버나, 직접 MCP 서버를 구성하는 방식으로 연결할 수 있습니다.
가장 현실적인 접근은 공공데이터포털 MCP 서버 모음을 활용하거나, 기상청 API를 호출하는 커스텀 MCP 서버를 설정하는 것입니다. 아래는 Python 기반으로 기상청 API를 래핑하는 기본 서버 구조 예시입니다.
Python 환경 확인
python3 --version
pip3 --version
Python 3.10 이상을 권장합니다. 없다면 python.org에서 설치하세요.
MCP SDK 설치
pip3 install mcp httpx
3단계 — 기상청 MCP 서버 코드 작성
아래는 기상청 단기예보 API를 MCP 도구로 노출하는 최소 서버 예시입니다. 이 파일을 weather_mcp.py로 저장하세요.
import asyncio
import httpx
import os
from mcp.server import Server
from mcp.server.models import InitializationOptions
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
API_KEY = os.environ.get("KMA_API_KEY", "")
BASE_URL = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0"
app = Server("kma-weather")
@app.list_tools()
async def list_tools():
return [
Tool(
name="get_weather_forecast",
description="기상청 단기예보를 조회합니다. 지역 코드(nx, ny)와 날짜를 받아 날씨 정보를 반환합니다.",
inputSchema={
"type": "object",
"properties": {
"base_date": {"type": "string", "description": "조회 날짜 (YYYYMMDD)"},
"base_time": {"type": "string", "description": "조회 시각 (HHmm, 예: 0500)"},
"nx": {"type": "integer", "description": "예보지점 X 좌표"},
"ny": {"type": "integer", "description": "예보지점 Y 좌표"},
},
"required": ["base_date", "base_time", "nx", "ny"],
},
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather_forecast":
params = {
"serviceKey": API_KEY,
"numOfRows": "100",
"pageNo": "1",
"dataType": "JSON",
"base_date": arguments["base_date"],
"base_time": arguments["base_time"],
"nx": arguments["nx"],
"ny": arguments["ny"],
}
async with httpx.AsyncClient() as client:
response = await client.get(
f"{BASE_URL}/getVilageFcst", params=params
)
return [TextContent(type="text", text=response.text)]
async def main():
async with stdio_server() as (read_stream, write_stream):
await app.run(read_stream, write_stream, InitializationOptions(
server_name="kma-weather",
server_version="0.1.0",
))
if __name__ == "__main__":
asyncio.run(main())
파일을 저장한 경로를 기억해 두세요. 예: /Users/본인이름/mcp-servers/weather_mcp.py
4단계 — Claude Desktop 설정 파일 편집
Claude Desktop의 설정 파일 위치는 운영체제별로 다릅니다.
| 운영체제 | 설정 파일 경로 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
설정 파일을 텍스트 에디터로 열고 아래 내용을 추가합니다. 파일이 없으면 새로 만드세요.
{
"mcpServers": {
"kma-weather": {
"command": "python3",
"args": ["/Users/본인이름/mcp-servers/weather_mcp.py"],
"env": {
"KMA_API_KEY": "발급받은_기상청_API_인증키"
}
}
}
}
주의사항:
args배열의 경로는 실제 파일 경로로 정확히 입력하세요.KMA_API_KEY값에는 공공데이터포털에서 발급받은 인증키를 그대로 넣으세요.- JSON 문법 오류(쉼표 누락, 따옴표 불일치)가 있으면 서버가 시작되지 않습니다.
5단계 — Claude Desktop 재시작 및 동작 확인
- Claude Desktop을 완전히 종료합니다. (macOS: Cmd+Q, Windows: 트레이 아이콘 우클릭 → 종료)
- 다시 실행합니다.
- Claude Desktop 화면 아래쪽에 망치 아이콘(도구 표시)이 나타나면 MCP 서버가 연결된 것입니다.
아래 질문으로 동작을 확인해 보세요.
- “오늘 날짜와 서울 기상청 격자 좌표(nx=60, ny=127)로 단기예보를 조회해줘”
- “내일 기온과 강수 확률을 알고 싶어. 기상청 API를 써서 부산 좌표(nx=98, ny=76)로 조회해줘”
Claude가 get_weather_forecast 도구를 호출하고 기상청 API 응답을 기반으로 날씨 정보를 정리해 답변하면 연결에 성공한 것입니다.
흔한 오류와 해결
| 오류 증상 | 원인 | 해결 방법 |
|---|---|---|
| 도구 아이콘이 보이지 않음 | 설정 파일 미저장 또는 JSON 오류 | JSON 문법 검사기로 유효성 확인 후 재시작 |
| ”SERVICE ERROR” 응답 | API 키 오류 또는 미승인 | 공공데이터포털에서 신청 상태 확인 |
| Python 명령 찾을 수 없음 | 경로 문제 | python3를 절대 경로(/usr/bin/python3)로 지정 |
| 모듈 없음 에러 | mcp, httpx 미설치 | pip3 install mcp httpx 재실행 |
| API 응답이 비어 있음 | base_time 오류 | 기상청은 특정 시각(0200, 0500, 0800…)에만 예보 발표 |
기상청 예보 발표 시각
기상청 단기예보는 하루 중 특정 시각에만 데이터가 갱신됩니다. base_time을 잘못 지정하면 데이터가 없거나 오류가 반환됩니다.
유효한 base_time: 0200, 0500, 0800, 1100, 1400, 1700, 2000, 2300
최신 데이터를 가져오려면 현재 시각보다 이전인 발표 시각 중 가장 최근 것을 사용하세요.
다른 공공데이터 MCP 서버와 함께 쓰기
날씨 데이터만으로도 유용하지만, 다른 공공데이터 MCP 서버와 함께 연결하면 활용도가 크게 높아집니다.
- 한국 부동산 MCP: 국토교통부 실거래가 데이터를 AI로 조회합니다. 날씨와 계절성을 결합한 부동산 분석에 활용할 수 있습니다.
- 공공데이터포털 MCP 서버 모음: 국민연금, 사업자등록 확인, 나라장터 등 다양한 공공 API를 지원합니다.
uvx data-go-mcp.nps-business-enrollment@latest명령으로 간단히 설치할 수 있습니다. - 표준국어대사전 MCP 서버: 날씨 관련 보고서나 문서 작성 시 정확한 표현을 찾는 데 도움이 됩니다.
여러 MCP 서버를 동시에 연결할 때는 설정 파일의 mcpServers 블록 안에 각각을 별도 항목으로 추가하면 됩니다.
{
"mcpServers": {
"kma-weather": {
"command": "python3",
"args": ["/Users/본인이름/mcp-servers/weather_mcp.py"],
"env": {
"KMA_API_KEY": "기상청_인증키"
}
},
"data-go": {
"command": "uvx",
"args": ["data-go-mcp.nps-business-enrollment@latest"],
"env": {
"DATA_GO_API_KEY": "공공데이터포털_인증키"
}
}
}
}
더 많은 한국 공공데이터 MCP 서버는 공공데이터 카테고리에서 찾아볼 수 있습니다. 전체 MCP 서버 목록은 서버 목록에서 확인하세요.
자주 묻는 질문
기상청 공공데이터 API는 유료인가요?
아닙니다. 공공데이터포털(data.go.kr)을 통해 발급받는 기상청 OpenAPI 인증키는 무료입니다. 일일 호출 횟수 제한이 있으므로 대량 조회 시에는 한도를 확인하세요.
Claude Desktop 말고 Claude Code나 Cursor에서도 쓸 수 있나요?
네. MCP 프로토콜을 지원하는 모든 클라이언트에서 사용할 수 있습니다. Claude Code는 ~/.claude/settings.json, Cursor는 ~/.cursor/mcp.json에 동일한 형식으로 서버 블록을 추가하면 됩니다.
API 키를 어디에 넣어야 하나요?
Claude Desktop 설정 파일의 mcpServers 블록 안 env 항목에 넣습니다. 코드나 명령어 인자로 직접 노출하면 보안에 취약하므로 반드시 env를 활용하세요.
연결 후 날씨를 어떻게 물어보면 되나요?
자연어로 그냥 물어보면 됩니다. “오늘 서울 날씨 어때?”, “내일 부산에 비 오나?”, “이번 주말 제주도 기온 알려줘” 같은 질문을 그대로 입력하면 Claude가 MCP 도구를 호출해 기상청 데이터를 가져옵니다. 다만 지역 격자 좌표(nx, ny)가 필요하므로 Claude에게 좌표를 먼저 알려주거나, 서버 코드에 주요 도시 좌표 매핑을 추가하면 더 자연스럽게 동작합니다.
설정 후 서버가 연결되지 않을 때 어떻게 해야 하나요?
Claude Desktop을 완전히 종료 후 재시작하고, 설정 파일의 JSON 문법 오류 여부를 확인하세요. 경로나 따옴표 누락이 흔한 원인입니다. Claude Desktop의 개발자 도구나 로그 파일에서 오류 메시지를 확인할 수 있습니다.
기상청 이외의 다른 공공데이터도 MCP로 연결할 수 있나요?
네. 공공데이터포털(data.go.kr)에서 제공하는 다양한 API를 MCP 서버로 연결할 수 있습니다. 부동산 실거래가, 국민연금, 사업자등록 확인 등을 지원하는 서버들이 이미 존재합니다. MCP모아의 공공데이터 카테고리에서 확인해 보세요.
다음 단계
기상청 MCP 서버 연결에 성공했다면, 이제 더 많은 가능성을 탐색해 보세요.
- 공공데이터 MCP 서버 전체 목록 보기 — 날씨 외에 어떤 한국 공공데이터를 AI와 연결할 수 있는지 확인해 보세요.
- MCP 서버 전체 목록 — MCP모아에 등록된 모든 서버를 탐색하고 본인의 용도에 맞는 서버를 찾아보세요.
- 직접 만든 MCP 서버가 있다면 등록 신청을 통해 한국 MCP 생태계에 기여할 수 있습니다.