Korea Opendata Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Korea Opendata Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
한국 홍수통제소 실시간 수문 데이터 AI 친화적 제공 플랫폼
홍수통제소 API를 MCP 프로토콜로 제공하는 TypeScript 서버 ChatGPT 무한 반복 호출 방지 기능 포함 실시간 데이터 구조 표준화 및 다중 데이터 타입 지원
get_water_info{
"name": "get_water_info",
"description": "관측소 검색 및 실시간 수위 데이터 통합 조회 (ChatGPT 무한 반복 방지용)",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "검색어 (관측소명, 하천명, 위치)"
}
},
"required": ["query"]
}
}홍수통제소 실시간 수문 데이터 AI 친화적 제공 플랫폼
npm installcp .env.example .env
# .env 파일에서 HRFCO_API_KEY 설정npm run buildnode test-integration.jsGET /health - 헬스체크POST /mcp - MCP 프로토콜 엔드포인트get_water_level - 실시간 수위 조회get_rainfall - 실시간 강우량 조회get_observatory_list - 관측소 목록search_observatory - 관측소 검색🌊 **대청댐 실시간 수위 정보**
📊 **현재 상태**: 대청댐의 현재 수위는 120.5m이며, 저수율 41.0%로 정상 상태입니다.
📈 **상세 정보**:
• 수위: 120.5m
• 저수율: 41.0%
• 상태: 정상
• 추세: 상승
• 최종 업데이트: 2025. 10. 2. 오전 2:16:48
🔗 **관련 관측소**:
• 소양댐 (코드: 1018681)
• 충주댐 (코드: 1018682)
⏰ 조회 시간: 2025. 10. 2. 오전 2:16:48chatgpt_mcp_config.json 파일을 ChatGPT MCP 설정에 추가하세요.
feature/dynamic-station-mapping#### 현재 배포 URL
#### 지원 플랫폼
npm run deploy:netlify#### 배포 전 체크리스트
.env 파일)HRFCO_API_KEY)npm run build)node test-*.js)#### 환경변수
# .env 파일
HRFCO_API_KEY=your_api_key_here
NODE_ENV=production # 프로덕션 배포시# 의존성 설치
npm install
# 개발 서버 실행
npm run dev
# 타입스크립트 컴파일
npm run build
# 테스트 실행
node test-dynamic-stations.js
node test-station-list.js
node test-vercel.js/health 엔드포인트GET /.netlify/functions/healthPOST /.netlify/functions/mcp#### 1. 도구 목록 조회
curl -X POST https://hrfco-mcp-functions.netlify.app/.netlify/functions/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'#### 2. 통합 수위 정보 조회 (권장)
curl -X POST https://hrfco-mcp-functions.netlify.app/.netlify/functions/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "get_water_info", "arguments": {"query": "대청댐"}}}'#### 3. 직접 수위 데이터 조회
curl -X POST https://hrfco-mcp-functions.netlify.app/.netlify/functions/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "get_water_level", "arguments": {"obs_code": "1018680"}}}'#### 4. 강우량 데이터 조회
curl -X POST https://hrfco-mcp-functions.netlify.app/.netlify/functions/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "get_rainfall", "arguments": {"obs_code": "관측소코드"}}}'chatgpt_mcp_config.json):{
"mcpServers": {
"hrfco": {
"command": "node",
"args": ["-e", "console.log('MCP server not directly executable')"],
"env": {
"HRFCO_API_ENDPOINT": "https://hrfco-mcp-functions.netlify.app/.netlify/functions/mcp"
}
}
}
}사용자: "대청댐 수위가 어떻게 되나요?"
ChatGPT: get_water_info 도구를 사용하여 대청댐의 실시간 수위 정보를 조회합니다.결과: ChatGPT가 한 번의 호출로 완전한 답변을 받아 사용자에게 직접 전달합니다.
#### 1. 수위 관측소 (Water Level)
wlobscd (예: "1001602")obsnm (예: "평창군(송정교)")wl (수위 값)#### 2. 강우량 관측소 (Rainfall)
rfobscd (예: "10014010")rf (강우량 값)#### 3. 댐 관측소 (Dam)
dmobscd (예: "1001210")swl (수위), inf (유입량), sfw (저수량), ecpc (공용량)| 데이터 타입 | 전체 목록 | 실제 데이터 | 상태 |
|---|---|---|---|
| 수위 | 1,366개 | 1,142개 | 대부분 활성 |
| 강우량 | 742개 | 628개 | 일부 비활성 |
| 댐 | 200+개 | 200+개 | 대부분 활성 |
#### 💡 관측소 수 관련 참고사항
#### 통합 관측소 코드 매핑
// 각 타입별 코드 필드 통합
obs_code: item.wlobscd || item.rfobscd || item.dmobscd
// 각 타입별 이름 필드 통합
obs_name: item.obsnm || item.rfobsnm || item.damnm#### 실시간 데이터 필터링
// 수위 데이터
const stationData = data.content.find(item => item.wlobscd === obsCode);
// 강우량 데이터
const stationData = data.content.find(item => item.rfobscd === obsCode);
// 댐 데이터
const stationData = data.content.find(item => item.dmobscd === obsCode);#### 다양한 댐 데이터 지원
// 댐은 수위 외에 추가 데이터 제공
return [{
obs_code: obsCode,
obs_time: stationData.ymdhm,
water_level: parseFloat(stationData.swl), // 현재 수위
inflow: parseFloat(stationData.inf), // 유입량
storage: parseFloat(stationData.sfw), // 저수량
capacity: parseFloat(stationData.ecpc), // 공용량
discharge: parseFloat(stationData.tototf) // 총 방류량
}];#### ✅ 실제 데이터 조회 성공
#### 1. 데이터 타입별 불일치한 설계
// 현재: 각 타입이 다른 코드 체계를 사용
{
"waterlevel": { "code": "wlobscd", "data": "wl" },
"rainfall": { "code": "rfobscd", "data": "rf" },
"dam": { "code": "dmobscd", "data": "swl" }
}#### 2. 비표준화된 데이터 형식
#### 3. 엔드포인트 구조의 혼동
/info.json과 /list.json에 혼재/data.json 엔드포인트가 존재하지 않음 (404 발생)#### 1. 통합된 데이터 모델 도입
// 권장: 표준화된 관측소 모델
interface StandardizedObservatory {
id: string; // 통합 관측소 ID
type: 'waterlevel' | 'rainfall' | 'dam';
name: string; // 관측소 이름
location: {
latitude: number; // 십진수 위도
longitude: number; // 십진수 경도
address: string; // 주소
};
agency: string; // 관리 기관
thresholds?: { // 경보 기준 (선택적)
attention: number;
warning: number;
alarm: number;
};
}#### 2. 일관된 API 엔드포인트 설계
# 관측소 정보 조회
GET /api/v2/observatories/{type}
# 실시간 데이터 조회
GET /api/v2/observatories/{id}/realtime
# 시계열 데이터 조회
GET /api/v2/observatories/{id}/data?period=1H&limit=24#### 3. 표준화된 응답 형식
// 권장: 일관된 응답 구조
{
"success": true,
"data": {
"observatory": {
"id": "WL_1001602",
"type": "waterlevel",
"name": "평창군(송정교)",
"location": {
"latitude": 37.624167,
"longitude": 128.551111,
"address": "강원특별자치도 평창군"
}
},
"realtime": {
"timestamp": "2025-10-02T20:10:00Z",
"value": 1.73,
"unit": "m",
"status": "normal"
}
},
"meta": {
"last_updated": "2025-10-02T20:10:00Z",
"next_update": "2025-10-02T21:00:00Z"
}
}#### 4. 데이터 품질 개선
// 권장: 명시적 데이터 타입과 null 처리
{
"coordinates": {
"latitude": 37.624167, // number (십진수)
"longitude": 128.551111 // number (십진수)
},
"water_level": 1.73, // number (실수)
"thresholds": { // 명시적 null 허용
"attention": 3.1, // number | null
"warning": 4.1, // number | null
"alarm": 5.0 // number | null
}
}#### 5. 버전 관리 및 하위 호환성
# API 버전 지정
GET /api/v2/observatories/waterlevel
Accept: application/vnd.hrfco.v2+json
# 하위 호환성 유지
GET /api/v1/waterlevel/info.json # 기존 엔드포인트 유지#### 6. 실시간 스트리밍 지원
# WebSocket 실시간 데이터
GET /api/v2/stream/observatories/{id}
# Server-Sent Events
GET /api/v2/events/observatories/{id}#### 개발자 경험 향상
#### 성능 및 확장성
#### 유지보수성
#### 단계적 개선 접근
#### 호환성 유지
// 기존 클라이언트 지원
GET /waterlevel/info.json → GET /api/v1/waterlevel/info.json
// 새 클라이언트 권장
GET /api/v2/observatories/waterlevel이러한 개선안을 통해 HRFCO API는 더 안정적이고 개발자 친화적인 서비스로 진화할 수 있습니다.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.