Context7
Up-to-date docs for AI agents
제작자가 쓴 설명(영어 원문)
National Library of Korea holdings search - books, online materials, KDC classification
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
NL_API_KEY, NL_OS_TRUST비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
링크는 제작자의 파일로 바로 연결돼요. 우리가 보관하거나 다시 패키징하지 않아요. 파일을 열면 Claude Desktop이 설치해요.
터미널에서 이 명령어를 실행하세요
실행하기 전에 빈 값을 채워 주세요.
브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
NL_OS_TRUST env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 rubatoyd 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: NL_API_KEY
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.7.0)은 3개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 MCPB도 있어야 해요.
같은 카테고리에는: Context7, Codebase Memory, Exa
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
📈 사용량 — 최근 14일 조회 0회(고유 0) · 클론 0회(고유 0) · 릴리스 자산 누적 다운로드 —
2026-11-06 자동 갱신 · 전체 이력은
docs/usage.csv. GitHub 트래픽 통계는 14일 창만 제공하므로 이 저장소가 매일 찍어 누적한다.
국립중앙도서관 소장자료 검색 OpenAPI 를 Claude 등 MCP 클라이언트에서 바로 쓰는 서버 + CLI. 단행본·온라인자료의 서지, KDC 분류, 청구기호, 원문 제공 여부를 검색·수집하고 xlsx/csv/json/sqlite 로 내보냅니다.
자매 프로젝트: kci-openapi-mcp(학술논문·인용지수) · scienceON-mcp(KISTI 문헌)
국립중앙도서관 검색 API 는 한 검색식당 500건까지만 돌려줍니다(공식 오류코드 012 DATA LIMIT 500). 그런데 total 은 그보다 큰 값을 태연히 보고합니다.
교육복지: total=1,856 → 실제로 받을 수 있는 건 500건
이 사실을 모르면 부분 집합을 전수로 오인하게 됩니다. 그래서 모든 응답에 total·truncated·cap_hit 을 함께 싣고, 상한에 걸리면 처방까지 문장으로 알려줍니다.
| 신호 | 뜻 | 처방 |
|---|---|---|
truncated | 이번 호출이 total 보다 적게 받음 | 대개 max_records 를 올리면 해결 |
cap_hit | total > 500 — API 가 더 안 줌 | max_records 로는 불가 (아래 참조) |
meta.cap_hit_terms | 상한에 걸린 검색어 목록 | 그 검색어만 세분화 |
교육복지/도서(1,856건) 라이브 실측:
| 설정 | 회수 | 비율 | 요청 |
|---|---|---|---|
| 우회 없음 | 500 | 27% | 1 |
sort_depth=3 | 1,746 | 94% | 7 |
| `auto_partition=True` + `sort_depth=1` | 1,854 | 100% | 24 |
`sort_depth` 가 비용 대비 효과가 압도적입니다 — 같은 검색식을 정렬 순서만 바꿔 다시 훑는데, asc 와 desc 의 교집합이 0건이라 정렬축 하나가 상한을 사실상 2배로 늘립니다. 분할(auto_partition)과 직교하므로 함께 쓸 수 있습니다.
① `auto_partition=True` — 서버측 축으로 재귀 분할
응답 필드명을 파라미터로 넘겨보는 방식으로 실제 동작하는 축 3개를 찾았습니다: category → manageName(둘 다 완전분할) → licYn. 상한에 걸린 조각만 다음 축으로 더 쪼개고, 부모 조각도 합집합에 넣어 불완전한 축을 써도 손해가 나지 않게 했습니다.
교육복지(전체 7,028건) 실측:
| 깊이 | 축 | 회수 | 비율 | 요청 |
|---|---|---|---|---|
| — | 분할 없음 | 500 | 7% | 1 |
| 1 | category | 2,134 | 30% | 13 |
| 2 | +manageName (기본) | 3,265 | 46% | 25 |
| 3 | +licYn | 4,722 | 67% | 60 |
partition_depth(1~3)로 조절합니다. ⚠️ 전수는 아니며 — 깊이 3에서도 33%가 남습니다 — 못 받은 건수는 meta.axes[].partition.unreachable 로 보고합니다.
② `exact=True` — 큰따옴표 구문검색 (⚠️ 넓게 모을 때는 쓰지 마세요)
total 자체가 줄어들어(교육불평등 63 → 28) 상한 아래로 내려갈 수 있습니다. 다만 재현율 손실이 큽니다 — 실측 평균 47%, 최악 84%(교육형평성 31 → 5건). 구문검색은 토큰 인접을 요구하는데 한국어 복합어는 표제에서 조사·수식어로 갈라지기 때문입니다 (교육의 형평성, 초중등교육의 형평성과). 버려진 것의 76%가 관련 문헌이었습니다.
→ 코퍼스 수집은 기본 검색 + `contains` 후처리, exact 는 전체 표제를 아는 특정 자료 조회용.
⚠️
year_from/contains는 이미 받은 레코드에 대한 후처리라 상한을 풀어주지 않습니다.
서버측 연도 범위 필터는 확인되지 않았습니다(11개 후보 무시).
🔴 정정(2026-08-12) — 이전 판에서 "정렬은 존재하지 않습니다"라고 적었으나 틀렸습니다.
sort=ipub_year&order=asc|desc가 동작합니다 →sort_depth로 구현했습니다(위 표).
detailSearch=true+f1/v1/and1로 필드 간 AND/OR/NOT 도 됩니다(AND+NOT=부모검산 통과) —
이쪽은 아직 미구현입니다. 자세한 내용 → docs/NL_API_GUIDE.md §1-4-b·§1-6·§3-3
{
"mcpServers": { "nl": { "type": "stdio", "command": "uvx", "args": ["--from", "git+https://github.com/rubatoyd/nl-openapi-mcp", "nl-mcp"], "env": { "NL_API_KEY": "발급받은_인증키" } } } }
.mcpb 원클릭Releases 에서 내려받아 실행합니다. Python·uv 가 없는 환경이면 OS별 자체완결 번들(-win-x64 / -macos-arm64 / -linux-x64)을 쓰세요.
git clone https://github.com/rubatoyd/nl-openapi-mcp
cd nl-openapi-mcp uv sync uv run pytest -q
클라우드 동기화 폴더(OneDrive 등)에서 작업한다면 venv 를 폴더 밖에 두세요:
UV_PROJECT_ENVIRONMENT=~/.venvs/nl-openapi-mcp
표준 stdio MCP 서버이므로 MCP 를 지원하는 에이전트면 그대로 붙습니다 — Cursor · Windsurf · Cline · Zed · VS Code Copilot(agent mode) · OpenAI Agents SDK · 자체 클라이언트 등. 위 command/args/env 3요소를 각 클라이언트 설정에 옮기면 됩니다.
로컬 서브프로세스뿐 아니라 HTTP 로도 띄울 수 있습니다. 원격 호스팅이나 stdio 를 못 쓰는 클라이언트를 위한 경로입니다.
nl-mcp # stdio (기본)
nl-mcp --transport streamable-http # http://127.0.0.1:8000/mcp nl-mcp --transport sse --port 9000 # http://127.0.0.1:9000/sse
환경변수: NL_MCP_TRANSPORT · NL_MCP_HOST · NL_MCP_PORT.
⚠️ HTTP 전송에는 인증이 없습니다. 기본 바인드는 루프백(
127.0.0.1)이라 같은 PC 에서만
접근됩니다.
--host 0.0.0.0으로 외부에 열면 인증키를 품은 서버를 그대로 공개하는 것과
같습니다 — 신뢰된 망에서만 쓰세요. 서버도 기동 시 경고를 찍습니다.
Claude 앱 안에서 검색해 설치할 수는 없습니다. 공식 MCP 레지스트리 등재와 Claude Desktop
인앱 커넥터 디렉터리는 별개이고 자동 동기화되지 않습니다. 위 설치 방법 중 하나를 쓰세요.
www.nl.go.kr 오픈API 신청으로 발급받아 NL_API_KEY 로 설정합니다. 토큰 발급·AES 암호화·공인IP 등록이 필요 없습니다(평문 key 쿼리 파라미터).
cp .env.example .env # NL_API_KEY 를 채워 넣으세요 (.env 는 gitignore 됩니다)
| 환경변수 | 기본값 | 설명 |
|---|---|---|
NL_API_KEY | (필수) | 국립중앙도서관 오픈API 인증키 |
NL_OS_TRUST | 1 | 교육망·사내망 SSL 인터셉션 대응(OS 신뢰저장소 사용). 0 이면 비활성 |
학교·교육청·사내망은 자체서명 루트 CA로 TLS를 가로챕니다. 이 도구는 검증을 끄지 않고
truststore로 OS 신뢰저장소를 사용해 통과합니다.
| 도구 | 설명 |
|---|---|
nl_status | 인증키 유효성 + API 실제 왕복 1회 점검 |
nl_search | 소장자료 검색 (total·truncated·cap_hit 동반) |
nl_collect | 검색어 합집합 수집 → 파일 저장. save=false 면 미리보기만 |
"국립중앙도서관에서 '교육불평등', '교육격차', '학력격차' 관련 단행본을 모아서 xlsx로 저장해줘"
nl_collect 가 세 검색어를 각각 조회해 id 기준으로 합집합을 만들고, 상한에 걸린 검색어가 있으면 meta.cap_hit_terms 로 지목합니다.
출력 파일명은 정규화됩니다.
name을 지정하지 않으면 검색어가 그대로 파일명이 되므로,
경로 구분자·
..·윈도 금지문자는 제거되고 결과는 항상out_dir안에만 저장됩니다.
한글 파일명은 그대로 보존됩니다.
nl status
nl search 교육불평등 --category 도서 --rows 20 nl collect --terms 교육불평등 교육격차 학력격차 --category 도서 --format xlsx json
nl collect --kwd 교육복지 --category 도서 --sort-depth 3 --format xlsx
nl collect --kwd 교육복지 --category 도서 --auto-partition --sort-depth 1 --format xlsx
정규화 25개 컬럼 + 원본 24개 필드(raw) 보존. 전체 표와 결측률은 docs/NL_API_GUIDE.md §2 참조.
주의할 필드 2가지 — 이름이 …Yn 이지만 불리언이 아닙니다:
docYn → doc_type: NL_VIEWER · LD_VIEWER · FILE · LINK · NlicYn → lic_code: L · F · S · D · N · Y원문 보유 판정은 Holding.has_fulltext() 를 쓰세요("N"·빈값만 거짓).
srchTarget 지원/폴백, category 12종, sort 색인 필드명, ipub_year 연도 필터, f-슬롯 불리언, 오류 봉투, 0건 응답 형태. scripts/probe_api.py 로 재현 가능ipub_year)는 동작합니다MIT