datagokr
The server is a local MCP stdio server that wraps 공공데이터포털/odcloud access and exposes catalog search, metadata inspection, remote preview, local fetch/get, apply, download, and login-status tools while keeping API keys and login cookies local except where explicitly allowed.
search: query the public data catalog by keyword (e.g., '전국 주차장') with optional limits, organization, and dtype filters.
show/fields: retrieve dataset metadata, field/column details, access kind, and API request examples.
preview: fetch first rows/access guidance remotely; if DATAGOKR_API_KEY is set, it is sent to the remote server in the X-DataGoKr-Key header, and can be disabled with an empty key.
fetch/get: fetch rows, links, or API templates locally from odcloud/portal using the user's API key; supports no_apply by default, explicit consent for apply, probe-only checks, and version selection.
apply: submit a portal data utilization application using the local portal login session cookie; the cookie is never sent to the remote search/preview server.
download: download original data files to a local directory (default ~/datagokr/<dataset_id>/) with version/all-versions options and overwrite behavior.
login_status: check whether the portal login session is available/valid for authenticated operations.
Security: API keys and cookies are not sent to the remote MCP server for search/metadata; only preview may send the API key; get/fetch/apply/download make portal/odcloud requests directly from the user's machine.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@datagokrsearch for '전국 주차장' datasets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
datagokr
공공데이터포털의 데이터를 검색하고, 자기 키·자기 로그인·자기 디스크로 조회·활용신청·다운로드하는 Python 패키지다. CLI, Python API, 로컬 MCP stdio 서버를 제공한다.
검색과 메타데이터는 공개 원격 MCP 서버를 사용한다. get, fetch, apply, download는 메타데이터를 받은 뒤 사용자 컴퓨터에서 포털에 접속한다. preview는 원격 서버가 본문을 조회하므로, 키를 설정했다면 그 키도 원격 서버로 전송된다. 자세한 전송 범위는 아래 보안 안내를 확인하자.
설치와 첫 조회
Python 3.11 이상과 인터넷 연결이 필요하다. 명령은 macOS/Linux의 Bash 기준이다. 저장소는 https://github.com/datagokr-dev/datagokr 이고, PyPI 이름은 datagokr-mcp(import 이름과 CLI는 datagokr 그대로)라 pip install datagokr-mcp 로 설치할 수 있고, 최신 소스는 pip install git+https://github.com/datagokr-dev/datagokr 로 받는다.
git clone https://github.com/datagokr-dev/datagokr
cd datagokr
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
datagokr --version
datagokr search "전국 주차장"
datagokr show 15012896
datagokr get 1501289615012896은 전국주차장정보표준데이터다. get은 키와 로그인 없이 첫 5행을 반환한다. 검색 순위·전체 행 수·행 내용은 포털 갱신에 따라 달라진다. CLI 실행파일 대신 python -m datagokr도 사용할 수 있다.
원문 전체를 저장하려면 다음을 실행한다. 이 명령은 첫 5행이 아니라 전체 표준데이터를 CSV로 저장하므로 시간이 더 걸릴 수 있다.
datagokr download 15012896 --out ./downloads응답의 path가 실제 저장 경로다. 기본 저장 위치는 ~/datagokr/<dataset_id>/이고, --out을 주면 그 디렉터리에 저장한다. 같은 경로의 파일은 덮어쓴다.
Related MCP server: k-skill-korea
AI 에이전트에게 한 줄로 설치시키기
클로드 코드·코덱스·커서 등 어떤 에이전트든 아래 문장 하나를 그대로 던지면 클라이언트를 감지해 원격 서버를 등록하고 검색 1회로 검증까지 한다.
Fetch and execute the setup instructions from https://datagokr.dev/agent-setup/prompt.md설정
우선순위는 함수·CLI 인자 > 환경변수 > 현재 작업 디렉터리의 .env > ~/.config/datagokr/config.toml > 기본값이다. None은 하위 설정을 상속하고, 빈 API 키 문자열은 키 사용을 끈다. TOML과 .env 모두 아래 대문자 이름을 사용한다.
설정 키 | 용도 | 기본값 |
| 본인의 odcloud serviceKey, 디코딩 값 | 빈 값 |
| 원격 검색·메타·미리보기 MCP 주소 |
|
| 다운로드 기본 폴더 |
|
| 포털 로그인 세션 파일 |
|
여러 AI 클라이언트에서 함께 쓰려면 ~/.config/datagokr/config.toml에 설정하는 편이 간단하다. 아래 내용은 TOML 파일의 최상위에 넣는다. 키가 필요한 경우 빈 문자열을 본인 키로 바꾸고 파일 권한을 제한한다.
DATAGOKR_API_KEY = ""
DATAGOKR_REMOTE_URL = "https://datagokr.dev/mcp"
DATAGOKR_DOWNLOAD_DIR = "~/datagokr"
DATAGOKR_SESSION_FILE = "~/.config/datagokr/session.json"chmod 600 ~/.config/datagokr/config.toml
datagokr config
datagokr config --jsonconfig는 유효 설정을 조회만 하며 파일을 수정하지 않는다. 키가 있으면 실제 값 대신 [configured]를 표시한다. .env는 같은 네 이름을 이름=값으로 적는다. 셸 명령 실행이나 ${변수} 치환은 지원하지 않는다. MCP의 작업 디렉터리는 AI 클라이언트마다 다를 수 있어 프로젝트 .env에 의존하려면 실행 위치를 확인해야 한다.
한 번만 무키로 실행하거나 출력 경로를 바꿀 수도 있다.
DATAGOKR_API_KEY='' datagokr get 15012896
DATAGOKR_DOWNLOAD_DIR=./downloads datagokr download 15012896포털 로그인과 활용신청
검색·표준데이터 조회에는 로그인이 필요 없다. odcloud 활용신청에는 본인의 공공데이터포털 계정 세션이 필요하며 API 키와 로그인 쿠키는 서로 다른 인증정보다.
datagokr login을 실행하면 절차 안내가 나온다. 이 명령만으로 브라우저를 열거나 로그인하지 않는다.포털 활용신청 현황을 브라우저에서 열고 로그인한다. 보안문자는 직접 입력한다.
로그인 후
www.data.go.kr페이지에서 브라우저 쿠키를 가져온다. 다음 세 방법 중 하나를 사용한다.
브라우저 쿠키 읽기를 사용하려면 현재 소스 디렉터리에서 선택 의존성을 설치한다.
python -m pip install -e '.[browser]'
datagokr login --browser chrome
# 같은 방식으로 --browser safari 또는 --browser firefox브라우저·운영체제의 쿠키 암호화나 권한 때문에 읽기가 실패할 수 있다. 직접 입력하려면 개발자도구 콘솔에서 document.cookie를 평가해 복사한다. 값을 생략한 datagokr login --cookie는 숨김 입력으로 받는다(권장). --cookie "값"처럼 명령줄에 직접 넣으면 셸 기록과 프로세스 인자에 남는다.
python - <<'PY'
from getpass import getpass
from datagokr.session import login
result = login(cookie=getpass("포털 쿠키: "))
print(result["message"])
PY계정 페이지에서 로그인을 확인한 뒤 세션을 저장하며, 파일 권한은 0600이다. document.cookie로는 HttpOnly 쿠키를 읽을 수 없으므로 복사한 값으로 검증이 실패하면 브라우저 쿠키 읽기 경로를 사용하거나 다시 로그인한다. 만료된 세션은 datagokr login으로 갱신한다. MCP에서는 login_status 툴로 상태를 확인할 수 있다.
키가 필요한 포털 파일을 검색하고 show의 상세 페이지·요청 예시를 확인한 다음, 검색 결과의 id로 신청·조회한다. 아래 셸 변수에는 실제 검색 결과의 id를 입력한다.
read -r -p '포털 파일 dataset id: ' dataset_id
datagokr show "$dataset_id"
datagokr apply "$dataset_id" --purpose "공공데이터 통계 분석"
datagokr fetch "$dataset_id" -n 5
datagokr get "$dataset_id" -n 5apply는 저장된 세션으로 실제 신청을 제출한다(한 번에 1~50개 id). applied나 portal_status를 확인하자. 이미 신청했거나 자동 신청 대상이 아니면 not_applicable, 로그인이 필요하면 manual 등이 반환된다. 일반 오픈API는 상세 페이지에서 별도 신청이 필요할 수 있다. 승인 직후에도 키 반영이 늦어 401이 계속되면 잠시 후 재시도하거나 get의 원문 경로를 이용한다.
CLI와 데이터 접근 방식
--json은 명령 앞이나 뒤에 붙일 수 있다. 성공 결과는 stdout, 실패 안내는 stderr에 출력하며 CLI 요청 실패는 종료 코드 1, 잘못된 인자는 2다. 성공적으로 전달된 응답 안에 status_code=401이나 신청 상태가 있을 수 있으므로 자동화에서는 응답 내용도 확인한다.
명령 | 예시 | 동작 |
|
| 주제 검색; |
|
| 컬럼·접근 방식·요청 예시 조회 |
|
| 지정 컬럼을 모두 가진 데이터 검색 |
|
| 원격 서버에서 미리보기; 설정 키 전송 |
|
| 본인 로컬 키로 odcloud 조회; |
|
| 접근 방식별 조회·신청·원문 폴백 |
|
| 본인 세션으로 활용신청 제출 |
|
| 원문을 로컬 디스크에 저장 |
|
| 로그인 안내 또는 쿠키 등록 |
|
| 키를 가린 유효 설정 조회 |
각 명령의 전체 옵션은 datagokr <명령> --help로 확인한다. 검색·컬럼 검색은 원격 서버에서 최대 20건, 원격 미리보기는 최대 20행·50컬럼이다. show도 컬럼을 최대 50개 표시한다.
|
|
| 무키로 표준데이터 첫 n행. 파일이 없는 API 전용 표준은 요청 템플릿 안내 |
| 전국판 부모가 있으면 그 본문과 부모 id 반환; 없으면 카탈로그 안내 |
| 제공기관의 외부 URL |
| 본인 serviceKey로 호출할 요청 템플릿 또는 포털 상세 페이지 |
| 키로 odcloud 조회 → 401이면 로그인 세션으로 신청 → 승인 확인 후 재조회 → 원문 미리보기·다운로드 폴백. 키가 없으면 바로 원문 경로 |
get은 기본적으로 활용신청을 하지 않고 원문 파일 저장으로 폴백한다. 본인 계정으로 신청까지 하려면 get --apply를 명시한다(MCP·Python API는 no_apply=False). get --probe는 신청·파일 저장 없이 접근을 확인한다. download --probe도 저장하지 않는다. 포털 원문 미리보기는 CSV/TSV/TXT/XLSX를 지원하고, 지원하지 않는 형식이나 미리보기 실패는 원문 다운로드로 이어질 수 있다.
포털 파일은 download --version 버전키 또는 download --all-versions로 버전을 선택한다(동시 사용 불가). show의 요청 예시를 참고한다. --utf8은 CSV 원문과 함께 UTF-8 변환본을 추가 저장한다. 표준데이터 CSV는 기본적으로 UTF-8 BOM 인코딩이다.
AI 클라이언트에 MCP 등록
로컬 datagokr-mcp가 stdio로 실행되며 툴 9개를 제공한다: search, show, fields, preview, fetch, get, apply, download, login_status. 툴 설명은 한국어·영어를 함께 제공한다. login과 config는 CLI에서 실행하고, MCP에는 키·쿠키 입력 인자가 없다.
먼저 설치한 가상환경에서 command -v datagokr-mcp로 실행파일의 절대경로를 확인한다. 아래 예시는 datagokr-mcp가 AI 클라이언트의 PATH에도 있을 때 동작한다. 찾지 못하면 각 command 또는 CLI의 마지막 실행파일을 방금 확인한 절대경로로 바꾼다. JSON/TOML의 명령 경로에 ~ 확장을 기대하지 말자. command를 가상환경 Python 절대경로로 하고 args를 ["-m", "datagokr.mcp"]로 지정해도 된다.
각 설정은 기존 파일의 다른 항목을 유지하며 병합한다. 키는 개인 ~/.config/datagokr/config.toml에 두면 아래 예시에 비밀값을 넣지 않아도 된다. 등록 후 클라이언트에서 MCP 연결을 새로고침하거나 재시작한다.
Claude Code
claude mcp add datagokr-local -s user -- /absolute/path/to/.venv/bin/datagokr-mcp
claude mcp add --transport http datagokr-public https://datagokr.dev/mcp -s user
claude mcp list로컬은 사용자 컴퓨터에서 실행되고 원격은 검색·조회용 공개 서버에 연결한다. 필요한 연결만 등록하면 된다. -s user는 모든 프로젝트에 적용되며, claude mcp list 또는 대화창의 /mcp에서 연결을 확인한다. 삭제는 claude mcp remove datagokr-local -s user와 claude mcp remove datagokr-public -s user다. Claude Code 공식 MCP 문서.
Codex CLI
CLI로 필요한 연결을 등록한다.
codex mcp add datagokr-local -- /absolute/path/to/.venv/bin/datagokr-mcp
codex mcp add datagokr-public --url https://datagokr.dev/mcp
codex mcp list
codex exec --skip-git-repo-check "datagokr-public 서버의 search 툴로 '전국 주차장' 1건만 검색해서 제목만 답해"list의 enabled는 등록 상태다. 실제 연결·호출 성공은 대화의 툴 응답으로 확인한다. 삭제는 codex mcp remove datagokr-local과 codex mcp remove datagokr-public이다. 직접 설정하려면 CLI 등록 대신 ~/.codex/config.toml에 추가한다.
[mcp_servers.datagokr-local]
command = "datagokr-mcp"
startup_timeout_sec = 30
tool_timeout_sec = 180codex mcp list 또는 /mcp에서 확인한다. 환경변수 방식으로 키를 관리한다면 위 테이블에 env_vars = ["DATAGOKR_API_KEY"]를 추가해 전달할 수 있다. OpenAI 공식 MCP 문서.
Cursor
프로젝트의 .cursor/mcp.json에 추가한다. 모든 프로젝트에서 사용하려면 ~/.cursor/mcp.json을 사용한다.
{
"mcpServers": {
"datagokr": {
"command": "datagokr-mcp",
"args": []
}
}
}Gemini CLI
~/.gemini/settings.json에 추가한다.
{
"mcpServers": {
"datagokr": {
"command": "datagokr-mcp",
"args": [],
"timeout": 180000
}
}
}/mcp에서 연결을 확인한다. timeout 단위는 밀리초다. Gemini CLI 공식 MCP 문서.
Windsurf
~/.codeium/windsurf/mcp_config.json에 추가한다.
{
"mcpServers": {
"datagokr": {
"command": "datagokr-mcp",
"args": []
}
}
}Cascade의 MCP 설정에서 서버와 툴을 확인한다. Windsurf 공식 MCP 문서.
다른 클라이언트도 로컬 stdio MCP를 지원하면 같은 명령으로 연결할 수 있다. datagokr-mcp는 MCP 클라이언트가 시작하는 프로세스이므로 터미널에서 직접 실행해 출력이 없어도 입력 대기일 수 있다. 대화에서 “전국 주차장 데이터를 검색하고 15012896의 첫 3행을 보여줘”처럼 요청하면 된다. 대용량 다운로드는 클라이언트 제한 시간을 넘을 수 있으므로 CLI로 실행할 수도 있다.
Python API
import datagokr
search = datagokr.search("전국 주차장", n=5)
print(search["summary"])
datasets = search["results"]
details = datagokr.show("15012896")
result = datagokr.get("15012896", n=3, api_key="")
print(result["data"]["columns"])
print(result["data"]["rows"])
files = datagokr.download("15012896", out="./downloads")search와 fields는 {"summary": {...}, "results": [...]} dict를 반환한다. 같은 주제의 지자체 자료는 대표 한 줄로 접힌다. 다음은 필드 의미를 보여 주는 축약 예시이며 건수·순위는 실제 검색에 따라 달라진다.
{
"summary": {
"total_groups": 1,
"total_datasets": 2,
"by_dtype": {"FILE": 2},
"by_access_kind": {"PORTAL_FILE": 2},
"by_org_level": {"national": 0, "local": 2},
"region_hint": null,
"dtype_hint": null,
"note": "지자체별로 나뉜 주제를 접었습니다. group_ids의 id를 show로 펼쳐 보세요."
},
"results": [{
"id": "<대표 id>",
"title": "부산광역시 북구_재난문자 발송 현황",
"group_count": 2,
"group_ids": ["<대표 id>", "<다른 지자체 id>"],
"group_orgs": ["부산광역시 북구", "제주특별자치도"],
"group_kinds": {"PORTAL_FILE": 2},
"desc_short": "재난문자 발송 현황입니다.",
"top_columns": ["발송일시", "내용"],
"portal_updated": "2026-09-10",
"org_level": "local"
}]
}summary는 n개로 자르기 전 검색 후보의 개요이며 전체 카탈로그 건수가 아니다. group_count는 대표를 포함한 후보 멤버 수, group_ids는 순위순 최대 60개 id다. 각 id를 datagokr.show(dataset_id)에 넣어 펼쳐 본다. desc_short는 설명 앞 120자에서 개행을 뺀 값, top_columns는 등록순 컬럼명 최대 5개, portal_updated는 ISO 날짜 또는 null, org_level은 national 또는 local이다. 지역·API/파일 의도는 서버가 추출하지만 dtype·org 인자를 주면 더 정확하다.
최상위 공개 함수는 search, show, fields, preview, fetch, get, apply, download다. fields에는 컬럼명 리스트, apply에는 id 리스트를 전달한다. 원격 주소는 remote_url=, 키를 사용하는 함수에는 api_key=로 설정을 덮어쓸 수 있다. get의 no_apply(기본 True, 신청 안 함)·probe=True와 download의 probe=True는 CLI와 같은 의미다. 반환값은 dict 또는 list이고 Python API는 동기 호출이다.
보안과 데이터 전송
원격 서버로 전송되는 것 / 안 되는 것
작업 | 원격 MCP 서버로 전송되는 것 | 원격 MCP 서버로 전송되지 않는 것 |
| 질의·필드 조건·식별자·건수 등 조회 인자만 | API 키·로그인 쿠키·로컬 파일 |
| 조회 인자 + 설정 시 API 키 헤더 | 로그인 쿠키·로컬 파일 |
|
| 키·쿠키·신청 본문: 사용자 컴퓨터에서 포털/odcloud로 직접 전송; 파일은 로컬 저장 |
record·download_url은 원격 툴이며 최상위 Python API나 CLI 명령은 아니다. 로그인 쿠키는 어떤 경우에도 원격 MCP 서버로 보내지 않는다. AI 클라이언트에 반환한 데이터의 처리는 해당 클라이언트의 정책을 따른다.
검색어·필드 조건·데이터셋 id는 설정한 원격 MCP 서버로 전달된다. 서버는 검색·메타·원격 미리보기를 제공하며 원격 서버 자체는 활용신청이나 사용자 파일 저장을 하지 않는다.
preview는 설정된 API 키를X-DataGoKr-KeyHTTP 헤더로 원격 서버에 보낸다. 해당 연결의 초기화·툴 목록 요청에도 이 헤더가 포함된다. 표준데이터 미리보기여도 키가 설정돼 있으면 전송된다. 원격 서버로 키를 보내지 않으려면preview(..., api_key=""), CLIpreview --api-key ''를 쓰거나 로컬get/fetch를 사용한다. MCPpreview는 인자로 키를 끌 수 없으므로 서버 프로세스의DATAGOKR_API_KEY를 빈 값으로 설정한다.get/fetch의 API 키는 로컬에서 odcloud로 전달된다. 포털 로그인 쿠키는 사용자 세션 파일에 저장하고 포털 접속에 사용하며 원격 검색 MCP에는 보내지 않는다. 다운로드는 MCP 서버 프로세스가 실행되는 컴퓨터에 저장된다.CLI/MCP는 키·쿠키를 출력하거나 오류 메시지에 포함하지 않도록 처리한다. 하지만 사용자가 직접 인쇄하거나 HTTP 디버그 로깅을 켜거나 명령줄 인자에 비밀값을 넣으면 노출될 수 있다. 키·쿠키를 AI 대화, 버그 보고, 커밋에 붙여 넣지 않는다.
세션 파일은
0600으로 저장한다..env·개인 설정 파일도 접근 권한을 제한하고 버전 관리에서 제외한다. 원격 주소를 변경하면 그 서버가 검색 입력과preview의 키를 받으므로 신뢰하는 HTTPS 주소를 사용한다.get은 기본적으로 자동 활용신청을 하지 않으며 파일 저장으로 폴백할 수 있다.get --apply로 신청을 허용할 수 있고,apply는 신청 제출,download는 파일 저장을 수행한다.get/download는 같은 파일을 덮어쓸 수 있다. 조회만 원하면probe옵션을 사용한다.
데이터 출처와 이용조건
데이터 출처는 공공데이터포털(data.go.kr)과 각 제공기관이다. 데이터셋별 이용허락(공공누리 유형, 출처표시 등)은 검색 결과의 page_url에 표시된 조건을 따른다. 이 패키지와 원격 서버는 카탈로그 색인과 접근 안내를 제공하며, 미리보기·조회·다운로드로 받은 데이터의 별도 이용권을 부여하지 않는다. 패키지의 MIT 라이선스는 코드에 적용되고 데이터셋의 이용조건을 대체하지 않는다.
레이트리밋
공개 원격 서버는 IP당 최근 60초 30회, UTC 날짜당 2,000회 HTTP 요청을 허용한다. 초기화·툴 목록 요청도 포함되며 /health는 제외된다. 전체 IP 합계 제한(최근 60초 120회·최근 24시간 10,000회)도 적용된다. HTTP 429를 받으면 Retry-After만큼 기다린다. 패키지는 이를 읽어 한 번 재시도한다. 자체 호스팅 서버의 한도는 운영 설정에 따라 달라질 수 있다.
문제 신고
오류·문서 수정·서비스 문의는 GitHub Issues에 남긴다. 패키지 버전과 재현 명령, 비밀값을 제거한 오류를 함께 적고 API 키·로그인 쿠키·개인 설정 파일은 첨부하지 않는다.
검증과 문제 해결
개발 테스트는 HTTP mock과 실제 stdio 프로세스를 사용한다. 기본 실행에서는 외부 네트워크 테스트 한 개를 건너뛴다. 모든 테스트 출력에 [TEST]를 붙이는 실행 예시는 다음과 같다.
python -m pip install -e '.[dev]'
set -o pipefail
python -m pytest -q 2>&1 | sed 's/^/[TEST] /'
DATAGOKR_LIVE_TEST=1 python -m pytest -q -s 2>&1 | sed 's/^/[TEST] /'실서버 테스트는 기본 공개 서버와 포털에 접속해 무키 CLI 검색·get 15012896·MCP stdio 목록/검색을 검증한다. 다운로드·로그인 세션 경로는 임시 디렉터리로 지정한다. 최초 health 연결 자체가 불가능하면 skip하고, 연결 후 잘못된 응답·데이터·툴 계약은 실패로 처리한다. 실제 환경 점검에서는 skip을 성공으로 간주하지 말자.
증상 | 확인할 것 |
| 설치한 가상환경의 절대경로를 MCP 설정에 지정 |
검색·메타 조회 실패 | 인터넷· |
| 본인의 디코딩 키·활용신청·승인 반영 상태 확인; 무키 조회는 |
로그인 실패·만료 |
|
|
|
원문이 없거나 빈 파일 안내 | 포털 상세 페이지와 제공기관 링크 확인; 모든 카탈로그 항목이 다운로드 가능한 파일인 것은 아님 |
Available Tools
9 toolsapplyA
본인의 저장된 포털 세션으로 활용신청을 제출합니다. Submit access applications with saved login. ids: 1~50개 데이터셋 id; purpose: 활용 목적 / intended use. 로그인: datagokr login. 반환 / Returns: id, status, portal_status, page_url; manual means login is required. 쿠키는 포털에만 전송됩니다. Cookies are sent only to the portal.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| purpose | No | 공공데이터 색인·검색 도구 개발 및 통계 분석 연구 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral details beyond the annotations: it discloses that cookies are sent only to the portal, and that a 'manual' status indicates login is required. This goes beyond the minimal readOnlyHint/destructiveHint flags, which are false (write operation, not destructive). It does not contradict the annotations; the 'submit' action aligns with readOnlyHint=false. The disclosure of cookie scope and login requirement is valuable for an agent assessing side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary action. It then covers parameters, return values, and cookie behavior in a structured sequence. While bilingual repetition adds slight redundancy (e.g., both Korean and English for the same idea), the overall length is appropriate and each sentence adds information. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return values (id, status, portal_status, page_url) and the meaning of 'manual' status, which is important for interpreting results. It also mentions the login requirement and cookie scope. Given the tool's complexity (a submission action with session reliance), this is fairly complete. However, it does not cover edge cases like invalid session or rate limits, but these are not essential for basic invocation. The presence of an output schema (not shown) further reduces the need to detail return formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description carries the full burden for parameter explanation. It explicitly defines 'ids' as dataset IDs (1~50개) and 'purpose' as intended use (활용 목적 / intended use), adding meaning beyond the raw schema fields. This is a clear compensation for the schema's lack of descriptions, though it could be more detailed about the exact format of ids (e.g., are they numeric or strings?) but the provided clarity is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Submit access applications with saved login' (활용신청을 제출합니다). It specifies the verb 'submit' and the resource 'access applications', and it is distinct from sibling tools like search, show, download, etc., none of which handle submissions. The bilingual phrasing reinforces the core action without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about login ('로그인: datagokr login') and the meaning of 'manual' status, which hints at prerequisites. However, it does not explicitly say when to prefer this tool over siblings, nor when not to use it. The guidance is implied rather than explicit, leaving the agent to infer the use case from the action of submitting applications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downloadADestructive
원문을 이 컴퓨터에 저장합니다(같은 경로는 덮어씀). Save originals locally, overwriting the same path. version 또는 all_versions 중 하나 / choose version or all_versions; out: 이번 저장 폴더, 기본 DATAGOKR_DOWNLOAD_DIR / destination directory; utf8: CSV UTF-8 변환본 추가. probe=True는 저장 없이 확인합니다. probe checks without saving. 반환 / Returns: files with path, version, optional utf8_path, or an external url; STD_FILE is saved as a full CSV.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | ||
| utf8 | No | ||
| probe | No | ||
| version | No | ||
| dataset_id | Yes | ||
| all_versions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behaviors beyond the destructiveHint annotation: it explicitly states that files are overwritten ('overwriting the same path') and that probe=True performs a dry-run without saving ('probe checks without saving'). It also describes the return format (files with path, version, etc.). These details add value beyond the annotations, though it doesn't cover authentication or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph mixing Korean and English, which is a bit cluttered but front-loaded with the core purpose. It contains some redundancy (both languages for the same idea) and could be tightened, but it's not excessively long. The structure is acceptable but not exemplary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description still covers the main behavior, parameter semantics, and return details. It explains the overwriting behavior and probe mode, which are crucial for safe usage. It lacks guidance on when to use this tool vs siblings, which prevents a perfect score, but overall it's reasonably complete for a download operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters, and it does for most: version/all_versions (mutually exclusive choice), out (destination directory, with default), utf8 (CSV UTF-8 conversion), and probe (dry-run). It doesn't explicitly explain dataset_id, but that's the required identifier and is fairly obvious from context. It also mentions the special case of STD_FILE being saved as a full CSV, adding nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary action: saving originals locally ('Save originals locally'). It also notes overwriting behavior, which is a specific detail. However, it doesn't differentiate this tool from sibling tools like 'fetch' or 'get', which might also retrieve files, so it loses a point for lacking sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives parameter-level guidance (e.g., 'choose version or all_versions') but provides no guidance on when to use this tool versus alternatives. It doesn't mention any exclusion criteria or conditions that would route an agent to a sibling tool. This is a significant gap for a tool with many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchARead-only
본인 로컬 키로 odcloud 첫 n행을 조회합니다. Fetch rows locally with DATAGOKR_API_KEY. version 생략 시 최신 / latest version by default. 반환 / Returns: API data or request_templates; status_code=401 means access must be requested. STD_FILE은 get/download. 활용신청·파일 저장은 하지 않습니다. Does not apply for access or save files.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| version | No | ||
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds valuable context: it returns API data or request_templates, status_code=401 signals access must be requested, and it doesn't save files or apply for access. This goes beyond the annotation and clarifies error semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by defaults, returns, and special cases. It is slightly redundant due to bilingual repetition, but each sentence adds value and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and low parameter complexity, the description covers the essential behaviors: fetch semantics, default version, return types, error code, and exclusions. It is adequate for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains version defaults to latest and implies n is the number of rows via '첫 n행', but it doesn't explicitly describe dataset_id or provide detailed syntax for any parameter. It adds some meaning but not complete compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'fetch' and resource 'odcloud first n rows', and specifies it queries locally with an API key. It hints at differentiation by noting that STD_FILE should use get/download, which distinguishes it from those siblings, though it doesn't explicitly name all alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides partial guidance: it says it does not apply for access or save files, and that STD_FILE should use get/download. However, it doesn't explicitly state when to use this tool versus search, show, or preview, leaving some ambiguity for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fieldsARead-only
지정 컬럼을 모두 가진 데이터셋을 찾습니다. Find datasets matching ALL named columns. names 예시 / Example: ['위도', '경도']; n: 1~20; dtype: FILE/API/STD; org: 기관명. 반환은 search와 같은 메타데이터입니다. Returns ranked metadata as in search.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| org | No | ||
| dtype | No | ||
| names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint annotation: it specifies the matching logic ('ALL named columns') and the return type ('ranked metadata as in search'). This gives the agent a clear expectation of the tool's behavior and output without contradicting the read-only annotation. The description does not repeat the annotation but enriches it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by parameter examples and return info. Each sentence serves a purpose, though the bilingual repetition (Korean then English) adds slight redundancy. Overall, it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the readOnlyHint annotation, the description does not need to elaborate on return values or safety. It covers parameter semantics, matching logic, and return type. It does not mention pagination or ordering, but these are minor for a search tool. The description is sufficiently complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by providing concrete examples and constraints for each parameter: 'names 예시 / Example: ['위도', '경도']; n: 1~20; dtype: FILE/API/STD; org: 기관명.' This clarifies the format, allowed values, and meaning of parameters, which the schema alone does not convey. It does not explain what 'STD' stands for, but the given options are sufficient for basic usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find datasets matching ALL named columns.' This is a specific verb (find) + resource (datasets) + condition (matching ALL named columns). It distinguishes itself from siblings like search by focusing on column-based matching, making its intent unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples for parameters (names, n, dtype, org) and mentions it returns metadata 'as in search,' implying it is used when you have specific column names. However, it does not explicitly state when to use this tool over alternatives like search or when not to use it. The usage context is implied rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getADestructive
접근방식에 따라 첫 행·링크·API 템플릿을 돌려줍니다. Get rows, links or API templates. PORTAL_FILE 401은 기본적으로 신청 없이 원문 파일 저장으로 폴백합니다. 활용신청까지 하려면 사용자가 명시적으로 허락한 경우에만 no_apply=False 를 넘기세요 (본인 계정으로 신청이 나갑니다). By default no application is submitted on 401; pass no_apply=False only with the user's explicit consent. probe=True는 신청·파일 저장 없이 확인. probe checks access without applying or saving files. 반환 / Returns: access_kind with data, url, request_templates or files (local paths).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| probe | No | ||
| no_apply | No | ||
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as potentially destructive, but the description adds crucial specifics: it may save files locally (original file fallback) and can submit an application on the user's behalf when no_apply=False. It also explains probe as a safe check. This exceeds the annotation signal and fully discloses behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and structured logically (main purpose, side-effect warning, probe explanation, return summary). It is slightly verbose due to bilingual repetition, but every sentence adds value. Good organization.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values don't need detailed explanation, and the description still gives a concise return summary. It covers side effects, probe behavior, and fallback logic. The only gap is the meaning of n, which the schema may already describe. Overall, it's complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain parameters. It explains no_apply and probe clearly, but gives no meaning for n (likely row count) or dataset_id beyond being required. It partially compensates but leaves key parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns rows, links, or API templates depending on access method, which is a specific verb-resource combination. It also distinguishes itself from siblings by the mention of access_kind and the fallback behavior, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use probe and no_apply, but does not explicitly contrast with sibling tools like search, preview, or fetch. The guidance is present for specific scenarios (401 fallback, avoiding side effects) but not for general selection between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_statusARead-only
저장된 포털 세션의 유효성을 확인합니다. Check whether the saved portal login is valid. 반환 / Returns: authenticated, message. 세션이 없거나 만료되면 datagokr login 안내. Missing or expired sessions require datagokr login. Keys and cookies are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds important behavioral details: it explicitly states that keys and cookies are never returned, which is critical security context. It also discloses the return fields (authenticated, message) and the behavior on missing/expired sessions. This goes beyond the annotation and gives the agent a clear picture of what the tool does and does not expose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the purpose is stated first, then returns, then behavioral notes. It uses both Korean and English but is not verbose. Every sentence earns its place, and there is no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only tool with an output schema, the description is complete. It states the purpose, the return structure, the edge-case behavior (missing/expired session), and a security guarantee. An agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema covers 100% (empty). According to the rubric, baseline for 0 params is 4. The description does not need to elaborate on parameters, and it doesn't. It appropriately focuses on behavior and returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: checking the validity of a saved portal session. It uses a specific verb ('확인' / 'Check') and a specific resource (portal login). It is distinct from siblings like search, fetch, or download, which perform different operations. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to verify login status before performing other operations) but does not explicitly state when not to use it or mention alternatives. The line about guiding to login if session is missing/expired hints at usage context, but there is no explicit comparison with sibling tools. Given the tool's self-contained nature, this is adequate but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
previewBRead-only
원격 서버에서 첫 행·접근 안내를 조회합니다. Preview up to 20 rows remotely. 반환 / Returns: access_kind, data.columns/rows, total or access instructions. 설정된 본인 키는 원격 서버의 X-DataGoKr-Key 헤더로 전송됩니다. The configured API key is sent to the remote server in X-DataGoKr-Key. 신청·저장 없음 / No application or file saving.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds valuable behavioral context: no application or file saving, the API key is sent in X-DataGoKr-Key header, and the return includes access instructions if not authorized. These details go beyond the annotation and are not contradicted by it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual, repeating the same content in Korean and English. While structured with '반환 / Returns' and clear notes, the duplication adds length without adding informational value. It is not overly long, but the bilingual redundancy could be streamlined to a single language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return format (access_kind, data.columns/rows, total or access instructions) and mentions the key header behavior. With an output schema available, it does not need to detail the exact response structure. It lacks explicit error handling or pagination notes, but for a preview tool with annotations and output schema, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meanings. It mentions 'up to 20 rows' which hints that 'n' controls the row count, but it does not explicitly explain 'dataset_id' or the exact role of 'n'. The mapping is left to inference, making this a weak compensation for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (preview) and resource (remote server's first rows and access instructions). It specifies a row limit of 20, which distinguishes it from generic 'fetch' or 'get'. However, it does not explicitly name a sibling tool or contrast with alternatives, so it misses the highest bar for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any when-to-use guidance or exclusions. It does not mention alternatives like 'show' or 'fetch', nor does it indicate scenarios where preview would be preferred over other tools. The usage context is only implied by the word 'preview'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBRead-only
주제로 공공데이터를 원격 검색합니다. Search the remote catalog by topic. query: 자연어 / topic; n: 1~20; dtype: FILE/API/STD; org: 기관명 / provider; fields: 모두 필요한 컬럼 / required columns. 반환 / Returns: ranked id, title, org_nm, access_kind, page_url, matched_fields. 예시 / Example: query='전국 주차장'.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| org | No | ||
| dtype | No | ||
| query | Yes | ||
| fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds the return fields (ranked id, title, org_nm, etc.), which is helpful, but doesn't disclose other behavioral aspects like pagination, rate limits, or how the search ranking works. It adds some value beyond annotations but not a full behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the purpose front-loaded, followed by parameter hints and an example. It is not overly verbose and avoids redundancy, though it mixes languages (Korean and English) which slightly complicates parsing but remains clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: purpose, parameter meanings, return fields, and an example. Since there is an output schema, return values are already documented. It lacks details on edge cases or error conditions, but for a simple search tool it is fairly complete. Minor omissions like pagination behavior prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so: query (natural language/topic), n (1-20), dtype (FILE/API/STD), org (provider), fields (required columns). This gives meaningful context beyond the bare schema, though it could be more detailed (e.g., exact allowed values for dtype).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches a remote catalog by topic, using a verb ('search') and a resource ('remote catalog'). It provides a specific context (public data) and an example query. However, it doesn't explicitly differentiate from siblings like 'fetch' or 'get', which might also retrieve data, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description only states what it does and lists parameters, but doesn't mention scenarios where it should be preferred or avoided. No exclusions or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
showARead-only
검색한 데이터셋의 구조·사용법을 확인합니다. Inspect dataset metadata before use. 반환 / Returns: title, org_nm, access_kind, columns, operations, examples, page_url. dataset_id는 검색 결과의 id입니다. Use the id from search; use get for actual rows.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is consistent with the description, which describes an inspection operation. The description adds value by enumerating the returned metadata fields and clarifying that it does not return row data (implied by 'use get for actual rows'). This goes beyond the annotation by specifying what the tool returns and what it deliberately omits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with three sentences that lead with the purpose, then the return list, then the parameter guidance. There is no redundant wording, and the bilingual format does not obscure clarity. It is appropriately front-loaded and every sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple metadata-inspection tool with one parameter and an output schema, the description covers the essential usage context: what it does, what it returns, where the id comes from, and how it relates to 'get'. There are no gaps that would prevent an agent from calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining that dataset_id is the id from search results. This gives the agent both the source and the meaning of the parameter, which the schema alone does not provide. For a single-parameter tool, this is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inspects dataset metadata and lists the exact return fields (title, org_nm, access_kind, etc.). It explicitly contrasts with 'get' for actual rows, distinguishing it from a key sibling. The verb 'inspect' and resource 'dataset metadata' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to inspect metadata before use and explicitly says to use 'get' for actual rows, providing clear routing between two tools. It also instructs to use the dataset_id from search results. However, it does not mention other siblings like fields, preview, or fetch, so guidance is partial but sufficient for the primary alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
apply - First observed
download - First observed
fetch - First observed
fields - First observed
get - First observed
login_status - First observed
preview - First observed
search - First observed
show
TDQS
Scored across 9 tools
Most tools have distinct roles, but search and fields overlap because search already accepts a fields parameter, and preview/fetch/get all return row-level data with access-dependent behavior. The detailed descriptions help disambiguate, but an agent could still select the wrong retrieval tool without careful reading.
Most tools are short bare verbs (search, show, preview, fetch, get, apply, download), but fields is a noun and login_status uses snake_case, breaking the overall pattern. Names are readable but do not follow a consistent verb_noun or systematic convention.
Nine tools is well within the ideal range for a public-data portal MCP server. Each tool maps to a meaningful step in the workflow—search, inspect, preview, fetch, get, apply, download, and auth status—without bloating the surface.
The set covers the main data lifecycle: catalog search, metadata inspection, row preview/retrieval, access application, and file download. Minor gaps remain, such as no MCP login command (only login_status) and no way to list or track past application statuses.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Cloudflare Workers MCP server: govdata-korea
This MCP server provides seamless access to Malaysia's government open data, including datasets, w…
Korean government open data - weather, population, law search via data.go.kr
Find official Korean public datasets, agency-site menus, disclosure listings, and source URLs.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Korean public institution information, enabling AI clients to search, compare, and analyze disclosure data, public services, laws, and news.321MIT
- FlicenseNot gradedqualityBmaintenanceA read-only MCP server providing access to various Korean public data such as subway arrivals, weather, fine dust, bike availability, real estate, and more.-
- FlicenseNot gradedqualityDmaintenanceKorean public-data MCP servers for AI agents, enabling natural language queries to KOSIS statistics and other Korean official data sources without requiring local accounts or API keys.-
- AlicenseNot gradedqualityAmaintenanceBridges Korean public data APIs (data.go.kr) into MCP with automatic OpenAPI normalization, quota management, caching, and backoff. Enables natural language interaction with Korean government data through MCP.Apache 2.0