Skip to content

feat(wikidata): 위키데이터 읽기 서비스 (검색·엔티티·statements·SPARQL)#29

Merged
ArcSolver merged 1 commit into
mainfrom
feat/wikidata
Jun 3, 2026
Merged

feat(wikidata): 위키데이터 읽기 서비스 (검색·엔티티·statements·SPARQL)#29
ArcSolver merged 1 commit into
mainfrom
feat/wikidata

Conversation

@ArcSolver

Copy link
Copy Markdown
Owner

무엇을

무인증·무료 공개 API인 Wikidata 를 감싼 읽기 전용 MCP 서비스. Wikipedia(#28)와 짝을 이루는 구조화 지식 그래프 축. 무료 API를 감싼 벤더 공식 MCP는 부재(Wikimedia Enterprise MCP=유료 상업 제품, WMDE의 Wikidata MCP=WIP 프로토타입) → 빈틈.

도구 4종 (전부 GET·읽기)

  • wikidata_search(query, language, type, limit) — Action API wbsearchentities
  • wikidata_entity(id, language) — Wikibase REST v1 /entities/items|properties/{id} (라벨·설명·별칭·statement 수·enwiki 사이트링크)
  • wikidata_statements(id, property) — REST v1 /statements (value.content 타입별 렌더링)
  • wikidata_sparql(query, limit) — WDQS /sparql(GET·format=json·timeout 60s)

설계 노트

  • Wikibase REST v1(2024-11 stable) 선호 — 레거시 wbgetentities보다 평탄한 JSON.
  • User-Agent 필수(WDQS 엄격 — 없으면 403). 키 선택(WIKIDATA_API_TOKEN Bearer = 레이트 완화).
  • value.content 타입 변형 처리: wikibase-item=평문 "Q5", quantity={amount,unit}(무차원 unit:"1" 특수처리), time={time,precision,...}, monolingualtext={text,language}, novalue/somevalue 분기. 라벨 미해석(추가 호출 0, 1콜) — 원시 P/Q id 노출(README 명시).
  • WDQS malformed 쿼리(400, 자바 스택트레이스/HTML)는 원문 비노출.
  • 코어 변경 0(get_json 재사용).

검증

  • 계약 + 도구 = 49 테스트 통과, ruff 클린, 전체 스위트 green, 드리프트 클린.
  • 독립 교차검증(작성자 아닌 에이전트가 라이브 curl로 대조 — 본 서비스는 문서 기반 모델링이라 고위험): wbsearchentities 봉투·REST v1 엔티티/프로퍼티 키·value.content 모든 타입 변형·WDQS SPARQL JSON 형태·malformed 쿼리 비노출·404/200+error·Q/P 정규식 전부 라이브 확인 → 확정 버그 0, SHIP. 미매핑 상태코드 raw 본문 NIT 1건 하드닝 반영.

🤖 Generated with Claude Code

- wikidata_search(wbsearchentities)·wikidata_entity(REST v1)·wikidata_statements(REST v1)·wikidata_sparql(WDQS) 4개 GET 도구
- 무인증이나 식별 가능한 User-Agent 필수(기본값 상수, WIKIDATA_USER_AGENT로 덮어씀) + (선택) WIKIDATA_API_TOKEN Bearer로 레이트리밋 완화
- 세 상류 혼용: Action API 검색·Wikibase REST v1 엔티티/statements·WDQS SPARQL
- Action API 200+error 봉투 별도 처리, REST statements 가변 value.content(string/item/time/quantity/monolingualtext) compact 렌더링(P/Q 라벨은 raw id)
- WDQS는 timeout=60 전달, 구문 오류 400 원문(자바 예외/HTML) 비노출
- 계약(contract)·도구(tools) 테스트 2종(네트워크 없음, 49 passed)
- docs/providers.md 블록 + .env.example 섹션 추가

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@ArcSolver ArcSolver merged commit de91220 into main Jun 3, 2026
2 checks passed
@ArcSolver ArcSolver deleted the feat/wikidata branch June 3, 2026 16:46
ArcSolver added a commit that referenced this pull request Jun 4, 2026
- wikidata_search(wbsearchentities)·wikidata_entity(REST v1)·wikidata_statements(REST v1)·wikidata_sparql(WDQS) 4개 GET 도구
- 무인증이나 식별 가능한 User-Agent 필수(기본값 상수, WIKIDATA_USER_AGENT로 덮어씀) + (선택) WIKIDATA_API_TOKEN Bearer로 레이트리밋 완화
- 세 상류 혼용: Action API 검색·Wikibase REST v1 엔티티/statements·WDQS SPARQL
- Action API 200+error 봉투 별도 처리, REST statements 가변 value.content(string/item/time/quantity/monolingualtext) compact 렌더링(P/Q 라벨은 raw id)
- WDQS는 timeout=60 전달, 구문 오류 400 원문(자바 예외/HTML) 비노출
- 계약(contract)·도구(tools) 테스트 2종(네트워크 없음, 49 passed)
- docs/providers.md 블록 + .env.example 섹션 추가

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant