kci-openapi-mcp
This server provides MCP tools to search, retrieve, harvest, and collect Korean academic literature and citation data from the Korea Citation Index (KCI) using both the authenticated REST Open API and the unauthenticated OAI-PMH protocol, with options to save data to various file formats.
Check server status (
kci_status) — verify connectivity and REST API key availability.Search articles (
kci_search) — search papers by title (required), with optional filters (author, journal, keyword, abstract, DOI, date range); requiresKCI_API_KEY.Get article details (
kci_detail) — retrieve full details (abstract, keywords, authors, affiliations) for a specific paper via its KCI Control Number (e.g.,ART003047608); requiresKCI_API_KEY.Collect references (
kci_references) — obtain reference lists for papers matching a title search; requiresKCI_API_KEY.Query journal citation data (
kci_journal_citation) — access journal metrics, impact factors, JCR history, and listing information by year or journal ID; requiresKCI_API_KEY.Bulk harvest via OAI-PMH (
kci_harvest) — large-scale harvesting without an API key, filtering by set (articles, conference proceedings, journals), date range, metadata prefix, and optional local keyword filtering.Flexible collection (
kci_collect) — automatically selects REST or OAI-PMH based on API key availability and parameters, then saves results to XLSX, CSV, JSON, or SQLite files.
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., "@kci-openapi-mcpsearch for papers on 'deep learning'"
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.
kci-openapi-mcp
📈 사용량 — 최근 14일 조회 20회(고유 10) · 클론 212회(고유 96) · 릴리스 자산 누적 다운로드 266
2026-09-04 자동 갱신 · 전체 이력은
docs/usage.csv. GitHub 트래픽 통계는 14일 창만 제공하므로 이 저장소가 매일 찍어 누적한다.
한국연구재단(NRF) KCI(Korea Citation Index) 문헌·인용지수 검색·수집 MCP 서버 + CLI. REST Open API(키워드 검색)와 OAI-PMH(무인증 대량 수확)를 함께 다룬다.
기능
논문 검색·상세 — 서지 · 국문/영문 초록 · 키워드 · 저자/소속
참고문헌 수집 — 원형 텍스트 + 피인용 논문의 KCI ID(
arti_id) → 인용 네트워크 구성저널 인용지수 — 연도별 IF · 등재이력
OAI-PMH 대량 수확 — 인증키 없이 세트 + 날짜범위 전수 수집
내보내기 — xlsx · csv · json · sqlite
Related MCP server: KISTI-MCP
두 인터페이스
REST Open API | OAI-PMH | |
엔드포인트 |
|
|
인증 |
| 불필요 |
질의 | 키워드 검색( | 세트 + 날짜범위 수확 |
인용지수·참고문헌 | ✅ | ❌ |
규격: docs/KCI_API_GUIDE.md · docs/KCI_OAI_PMH_GUIDE.md · 설계: docs/ARCHITECTURE.md
인증키 없이 바로 써보기
REST 검색만 인증키가 필요하고, OAI-PMH 수확은 키 없이 동작한다.
uvx --from git+https://github.com/rubatoyd/KCI_openAPI kci identifyuvx --from git+https://github.com/rubatoyd/KCI_openAPI kci harvest --set ARTI --from 2024-01-01 --until 2024-03-31 --contains 학부모 --max 200MCP 로 붙였다면 kci_status → kci_harvest 순으로 바로 쓸 수 있다. 키가 없으면 REST 도구는
오류 대신 OAI 대안을 안내한다.
인증키 발급
REST 도구(kci_search · kci_detail · kci_references · kci_journal_citation)에만 필요하다.
open.kci.go.kr 에서 Open API 이용 신청
발급된 인증키 문자열 1개를 받는다
아래 중 한 곳에 넣는다 — 코드나 커밋에는 넣지 않는다
사용 환경 | 넣는 곳 |
Claude Code |
|
Claude Desktop |
|
| 설치 창의 입력란 |
CLI / 로컬 개발 |
|
AES 암호화·토큰 발급·공인 IP 등록은 불필요하다. 평문 key 쿼리 파라미터 하나로 호출한다.
설치
Claude Desktop
자체완결 .mcpb(권장) — Python·uv 불필요. 릴리스에서
OS에 맞는 파일을 받아 더블클릭(또는 Settings → Extensions → Install) → KCI_API_KEY 입력(선택).
자산 | 특징 |
| 자체완결 — 사전 설치물 없음 |
| 경량. 실행에 |
수동 config — %APPDATA%/Claude/claude_desktop_config.json:
{ "mcpServers": { "kci": {
"command": "uvx",
"args": ["--from", "git+https://github.com/rubatoyd/KCI_openAPI", "kci-mcp"],
"env": { "KCI_API_KEY": "<발급키 또는 비움>", "KCI_OS_TRUST": "1" }
} } }Claude Code
claude mcp add kci --env KCI_API_KEY=$KCI_API_KEY -- uvx --from git+https://github.com/rubatoyd/KCI_openAPI kci-mcp프로젝트 루트의 .mcp.json 도 자동 인식된다.
다른 MCP 클라이언트
표준 stdio MCP 서버이므로 MCP 를 지원하는 에이전트면 그대로 붙는다 — Cursor · Windsurf · Cline ·
Zed · VS Code Copilot(agent mode) · OpenAI Agents SDK · 자체 클라이언트 등. 위 command/args/env
3요소를 각 클라이언트 설정에 옮기면 된다.
from mcp import StdioServerParameters
params = StdioServerParameters(
command="uvx",
args=["--from", "git+https://github.com/rubatoyd/KCI_openAPI", "kci-mcp"],
env={"KCI_API_KEY": "..."}, # 비우면 OAI 무인증 도구만
)전송 방식
kci-mcp # stdio (기본)
kci-mcp --transport streamable-http # http://127.0.0.1:8000/mcp
kci-mcp --transport sse --port 9000 # http://127.0.0.1:9000/sse환경변수: KCI_MCP_TRANSPORT · KCI_MCP_HOST · KCI_MCP_PORT.
MCP 도구
도구 | 하는 일 |
| 연결 점검 — OAI Identify + 인증키 보유 여부 |
| 논문 검색 — |
| Control Number( |
| 제목 검색어에 매칭된 논문들의 참고문헌 원형 |
| 저널 인용지수 — 연도 목록 / |
| OAI-PMH 무인증 대량 수확 — 세트 + 날짜범위, |
| 라우터 — 키 유무·요청 성격으로 REST↔OAI 자동 선택 후 파일 저장 |
알아둘 제한
articleSearch 는 키워드·ISSN·UCI 를 응답에 싣지 않는다. keyword= 로 검색은 되지만 결과에는
없다. 검색 결과의 빈 keywords 는 '키워드 없는 논문'이 아니다 — 필요하면 kci_detail 로 건별 보강한다.
kci_collect 의 REST 경로는 제목축 ∪ 키워드축이다. 각 검색어를 두 축으로 조회해 합집합을 만든다.
결과는 '제목검색 결과'가 아니므로 코퍼스 경계를 기술할 때 명시해야 한다. meta.axes 에 축별 total 이 담긴다.
참고문헌의 arti_id 는 KCI 등재분에만 붙는다. 단행본·보고서·해외문헌은 빈 문자열이다.
인용 네트워크는 이 ID 가 있는 항목으로만 구성할 수 있다(references_linked_count 로 확인).
referenceSearch 는 페이지 파라미터가 없어 1회 100건이 상한이다. 부족한 이유가 둘이고 처방이
정반대이므로 경고 문구를 확인해야 한다.
상황 | 처방 |
|
|
|
|
KCI 가 보고하는 total 은 실제로 받을 수 있는 건수보다 클 수 있다. 그래서 두 상황을 다른
플래그로 구분한다.
플래그 | 뜻 | 대처 |
|
| 상한을 올려 재수집하면 늘어난다 |
| 끝까지 페이징했는데 | 상한을 올려도 늘지 않는다. 회수량을 확정 수치로 쓴다 |
다중 페이지 질의는 호출마다 결과가 미세하게 달라진다. 단일 페이지 질의는 안정적이다.
total 에 못 미치고 상한도 아니면 한 번 더 훑어 합집합을 취한다(meta.sweeps 가 1보다 크면 보정된 것,
수집 전체는 meta.sweeps_total).
보정이 걸린 축은 전체를 재페이징하므로 그만큼 요청이 늘어난다. 대규모 수집에서 부담되면
kci_collect 의 retry_incomplete=0 으로 끈다 — 대신 결손이 남고 total_mismatch 로만 표시된다.
출력 파일명은 정규화된다. name 을 지정하지 않으면 검색어가 그대로 파일명이 되므로,
경로 구분자·..·윈도 금지문자는 제거되고 결과는 항상 out_dir 안에만 저장된다.
한글 파일명은 그대로 보존된다.
정렬 인자는 전송 전에 검증한다. sort_by 는 title/author/pubiYr, sort_dir 은 asc/desc.
허용값 밖이면 오류를 돌려준다.
Claude 앱 안에서 검색해 설치할 수는 없다. 공식 MCP 레지스트리 등재와 Claude Desktop 인앱 커넥터 디렉터리는 별개이고 자동 동기화되지 않는다. 위 설치 방법 중 하나를 쓴다.
도구 설명이 한국어다. 한국어를 다루는 모델이어야 도구 선택이 정확하다.
mcp SDK 는 1.x 로 고정된다(mcp>=1.2.0,<2). 2.0 에서 mcp.server.fastmcp 가 제거되어
상한이 없으면 기동에 실패한다.
CLI
kci identify # OAI 무인증 — 키 없이 즉시
kci harvest --set ARTI --from 2024-01-01 --until 2024-12-31 --contains 학부모 --max 500
kci search --title 경계선지능 --rows 20 # REST(인증키 필요)
kci collect --config config/borderline_slow.yaml로컬 개발은 uv sync. 클라우드 동기화 폴더(OneDrive 등)라면 venv 를 폴더 밖에 두기를 권한다
(UV_PROJECT_ENVIRONMENT).
네트워크
KCI 방화벽은 User-Agent 필터를 건다.
curl기본 UA 는 차단 안내페이지를 받는다. 본 서버는requests로 호출하므로 정상 동작한다.교육망·사내망 SSL 인터셉션 환경에서는
truststore로 OS 신뢰저장소를 사용해 통과한다 (TLS 검증을 끄지 않는다). 비활성은KCI_OS_TRUST=0.HTTP 전송에는 인증이 없다. 기본 바인드는 루프백(
127.0.0.1)이다.--host 0.0.0.0으로 외부에 열면 인증키를 가진 서버가 그대로 노출되므로 신뢰된 망에서만 쓴다.
라이선스
MIT. 본 프로젝트는 한국연구재단의 비공식 클라이언트이며 제휴 관계가 없다. KCI 데이터 이용은 KCI 약관을 따른다.
Available Tools
7 toolskci_collectA
[혼용] 요청 성격·키 유무로 REST↔OAI 자동 선택 후 수집 → 파일 저장.
terms/title 있고 인증키 보유 → REST 변형어 합집합 검색(year_from/to·contains 적용)
retry_incomplete: 다중 페이지 질의는 호출마다 결과가 흔들려 1~2건이 빠질 수 있다. 기본 1 이면 total 에 못 미쳤을 때 검색축마다 한 번 더 훑어 합집합을 취한다(meta.sweeps_total 로 확인). ⚠️ 보정이 걸린 축은 전체를 재페이징하므로 요청 수가 그 축만큼 늘어난다. 대규모 수집에서 비용이 부담되면 0 으로 끈다 — 대신 결손이 남고 meta.total_mismatch 로만 표시된다.
terms/title 있고 키 없음 → OAI 수확(date_from/until) + terms/contains 로컬 필터
terms/title 없음 → OAI 세트/날짜범위 전수 수확 out_dir 미지정 시 홈의 kci-output/. OAI 날짜는 YYYY-MM-DD, REST 연도는 정수.
⚠️ REST 경로는 각 검색어를 제목축·키워드축 두 번 조회해 합집합한다 → 결과는 '제목검색 결과'가 아니라 제목∪키워드다. 반환값 meta.axes 에 축별 total 이 담긴다. ⚠️ truncated=true 면 max_records 상한에 잘린 것이다 — 그대로 분석에 쓰면 안 된다. meta.union_upper_bound 위로 max_records 를 올려 재수집할 것.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| terms | No | ||
| title | No | ||
| formats | No | ||
| out_dir | No | ||
| year_to | No | ||
| contains | No | ||
| set_spec | No | ARTI | |
| date_from | No | ||
| year_from | No | ||
| date_until | No | ||
| max_records | No | ||
| retry_incomplete | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (write), openWorldHint=true (unbounded/stateful), destructiveHint=false. The description complements these by disclosing that the tool saves files to disk (out_dir), automatically routes between REST/OAI, performs dual-axis union searches on REST path, and may produce multiple sweeps with retry_incomplete. It also warns about truncated results (truncated=true) and how to interpret meta fields. The only minor gap is that it doesn't explicitly state file write permissions or overwrite behavior.
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 quite long, with dense text covering multiple scenarios. While it packs valuable information, it lacks clear section breaks or bullet points for readability. Key warnings are fronted with ⚠️, which helps, but the overall structure is a single block of Korean text that could be better organized for an AI agent to parse quickly.
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's high complexity (13 params, no output schema, multimodal routing), the description does a commendable job of covering core behaviors: REST vs OAI selection, dual-axis queries, retry logic, file output, date formats, and truncated data warnings. It is functionally complete for an experienced user, though it could benefit from an explicit listing of output file format or return value shape (since no output schema exists).
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 carry full weight. The description explains many parameters implicitly: terms, title, retry_incomplete, out_dir, date_from/until, year_from/to, contains, max_records, set_spec. It clarifies that dates are YYYY-MM-DD and years are integers. However, it does not explain formats, name, or provides a formal parameter-by-parameter mapping. But given the complexity (13 params), the description does a good job making sense of the core parameters through contextual examples.
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 precisely states that the tool collects (saves) articles from KCI by automatically choosing between REST (with key) or OAI (without key) based on the presence of authentication key and the nature of the request. It distinguishes itself from sibling tools like kci_search (which likely only searches), kci_detail (single article details), and kci_harvest (which may be a different collection method) by describing its dual-mode routing logic and file-saving behavior.
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 clear when-to-use guidelines by outlining the decision logic: use REST if terms/title are present and auth key exists, use OAI otherwise. It also warns about the behavior of retry_incomplete and when to set it to 0 to save cost. However, it does not explicitly compare against each sibling tool (e.g., when to use kci_harvest instead), and it lacks an explicit 'do not use if' clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kci_detailARead-only
[REST] Control Number(ART…)로 논문 상세 조회. 인증키 필요.
저자 키워드·ISSN·등재여부·FWCI·저자 소속·참고문헌의 유일한 출처다 (articleSearch 응답에는 이 필드들이 없다). 검색 결과의 키워드 결측은 이 도구로 보강한다.
| Name | Required | Description | Default |
|---|---|---|---|
| arti_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to cover safety. It adds useful context: the tool is RESTful, requires an authentication key, and provides fields absent from other endpoints. However, it does not detail rate limits, response size, or error handling. The description adds value beyond annotations without contradicting them.
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 brief: two sentences plus a bolded summary. It front-loads the REST nature and authentication requirement, then explains unique value and use case. Every sentence adds value, though the first sentence could be more explicit about the input parameter.
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 a simple input schema (1 required string param) and no output schema, the description covers purpose, unique fields, and relation to other endpoints. It does not explain the output format or other potential usage nuances, but the tool appears simple and the description is largely complete for its 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?
There is only one required parameter (arti_id) with 0% schema description coverage. The description does not directly explain the parameter, but the tool name and context ('Control Number(ART…)') imply the parameter is a Control Number. Since the schema is minimal and the description adds some implicit meaning, a baseline of 3 is appropriate.
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 retrieves detailed paper information by Control Number (ART…). It distinguishes itself from siblings by explicitly listing unique fields (author keywords, ISSN, indexing status, FWCI, author affiliations, references) not available in other tools like articleSearch. This is a specific verb+resource combination with explicit 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 explains when to use this tool: for fields missing from articleSearch (e.g., keywords). It also mentions the prerequisite of an authentication key. However, it does not explicitly state when not to use it or name specific sibling alternatives, only contrasting with articleSearch which is not listed among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kci_harvestARead-only
[OAI-PMH·무인증] 세트+날짜범위 대량 수확. 인증키 불필요.
set_spec: ARTI(논문)/ARTI_CONF(학술대회)/JOUR(학술지) date_from/date_until: YYYY-MM-DD. metadata_prefix: oai_kci(상세)/oai_dc(간략). contains: 제목/초록/키워드 등에 이 문자열(들) 포함분만(키워드 검색 대용 로컬 필터).
| Name | Required | Description | Default |
|---|---|---|---|
| contains | No | ||
| set_spec | No | ARTI | |
| date_from | No | ||
| date_until | No | ||
| max_records | No | ||
| metadata_prefix | No | oai_kci |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only and open-world behavior, and the description adds valuable context: it's an OAI-PMH harvest requiring no authentication, and the 'contains' filter is a local post-filter rather than a server-side query. This discloses behavior not evident from annotations alone.
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 compact block with a leading summary and a short parameter legend. Every sentence delivers useful information without redundancy.
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?
It covers all critical parameters and usage conditions, but does not describe the return format or pagination behavior, which is relevant for a bulk harvest tool. However, with no output schema, the description could have mentioned output details; still, the provided info is strong.
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?
Despite 0% schema description coverage, the description manually explains the meaning and allowed values for set_spec (ARTI/ARTI_CONF/JOUR), date formats (YYYY-MM-DD), metadata_prefix (oai_kci/oai_dc), and contains (local filter on title/abstract/keywords). It also specifies the no-auth condition, leaving only max_records implicit, which is self-explanatory.
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 explicitly states '세트+날짜범위 대량 수확' (batch harvest by set+date range) and identifies the OAI-PMH protocol and no-auth requirement. This clearly differentiates it from siblings like kci_search/kci_detail which are not bulk harvesting operations.
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 implies usage for bulk harvesting via '대량 수확' and notes no auth key is needed, but does not explicitly compare against sibling tools or state when not to use it. There is no mention of alternatives like kci_search for targeted queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kci_journal_citationARead-only
[REST] 저널 인용지수 — year(+years 2~5)로 목록 / journal_id 로 상세(등재이력·연도별 IF). 인증키 필요.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | ||
| year | No | ||
| years | No | ||
| journal_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds the API key requirement and clarifies the two operational modes (year/year range for list, journal_id for detail), which is valuable context beyond annotations. However, it does not describe pagination or response formatting.
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 sentence that front-loads the tool's purpose and key parameters with no filler or redundant 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?
The description covers the API key, list/detail modes, and detail content (registration history and yearly IF), but with no output schema it does not describe the list response structure or the rows parameter behavior, making it incomplete for thorough understanding.
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. It explains that year and years (2-5) drive list queries and journal_id drives detail, but it does not explain the rows parameter or how it interacts with the others, leaving a notable gap.
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 identifies the tool as a journal citation index REST API with two distinct modes: listing by year (with years range) and retrieving details by journal_id. It is specific and distinguishable from sibling tools like kci_search and kci_detail.
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 usage for citation index lookups and outlines the parameter-driven modes, but it does not explicitly state when to choose this tool over alternatives or provide exclusions. It mentions the API key requirement as a prerequisite, which is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kci_referencesARead-only
[REST] 제목 검색어에 매칭된 논문들의 참고문헌 원형 수집. 인증키 필요.
반환 레코드의 article_id 는 인용하는 쪽(참고문헌을 단 논문)이다.
institution: 발행기관명 필터. sort_by: title|author|pubiYr, sort_dir: asc|desc.
⚠️ referenceSearch 에는 page 파라미터가 없어 1회 100건이 API 상한이다. total>100 이면
나머지는 이어 받을 수 없으므로 truncated 를 반드시 확인할 것. 상한을 넘겼다면
sort_dir 를 뒤집어 반대쪽 100건을 추가로 받아 합집합을 취하는 것이 유일한 우회책이다.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | ||
| title | Yes | ||
| author | No | ||
| sort_by | No | ||
| pub_year | No | ||
| sort_dir | No | ||
| institution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint, aligning with the description's data retrieval purpose. The description adds key behavioral details not in annotations: API has a 100-record limit per request, no pagination support, and the workaround of flipping sort_dir. It also clarifies that article_id in results is the citing article. No contradictions with annotations.
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 relatively concise but includes a mix of Korean and English, potentially adding cognitive load. Key information is front-loaded (purpose, auth requirement). The workaround explanation is detailed but necessary; one sentence could be slightly trimmed.
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 moderate complexity (7 parameters, 1 required, no output schema, 0% schema coverage), the description covers core functionality, edge cases (100-record limit), and provides workarounds. It explains the return field meaning (article_id is citing article) and filter options, sufficient for an agent to use correctly without output schema.
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. It adds meaning by explaining institution filters, sort_by and sort_dir options, and the significance of the page parameter absence. However, it does not fully explain all parameters (e.g., author, pub_year, rows) leaving some burden on the agent to infer from names.
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 fetches raw reference records matching a title search term, specifying the resource (reference raw data), action (collect), and scope (title-matched articles). It distinguishes from siblings like kci_search (which likely searches articles directly) by focusing on references of matched articles.
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 explicit context on when to use this tool, including authentication requirements and filter usage. It also details workarounds for API limits when total records exceed 100. However, it does not mention when NOT to use this tool or explicitly compare against sibling tools for reference-related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kci_searchARead-only
[REST] 논문 검색 — title 필수 + 선택 필터. 인증키 필요.
date_from/date_to: 발행연월 YYYYMM. rows: 반환 건수(최대 100). institution: 발행기관명 필터. sort_by: title|author|pubiYr, sort_dir: asc|desc. (정렬은 페이징 상한에 걸렸을 때 sort_dir 를 뒤집어 반대쪽을 추가 수집하는 데도 쓴다.) 반환값의 total 은 KCI 가 보고한 전체 건수이고, truncated=true 면 rows 상한에 잘린 것이다.
⚠️ articleSearch 응답에는 저자 키워드·ISSN·UCI 가 아예 없다(원본 XML 에 필드 부재). keyword= 로 검색은 되지만 결과에는 실리지 않는 비대칭이므로, 결과의 빈 keywords 를 '키워드 없는 논문'으로 오독하면 안 된다. 키워드·ISSN 이 필요하면 kci_detail 로 건별 보강할 것. 인증키가 없으면 kci_harvest(OAI 무인증) 사용을 안내한다.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | ||
| rows | No | ||
| title | Yes | ||
| author | No | ||
| date_to | No | ||
| journal | No | ||
| keyword | No | ||
| sort_by | No | ||
| abstract | No | ||
| sort_dir | No | ||
| date_from | No | ||
| institution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true (safe read) and openWorldHint=true (may not be exhaustive). The description adds substantial behavioral context: authentication requirement, the truncated flag meaning, and the critical warning that keyword search may not include keywords in results. The description is open about field absence, which goes beyond annotations. Minor deduction: does not explicitly state it is a REST-based tool beyond the tag, but that is acceptable.
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 well-structured with a first line giving the core purpose, then parameter details, and finally a warning section and alternative. The warning about missing fields is front-loaded after the parameters. It is slightly long but every sentence adds value. Could be marginally more concise by combining some sentences, but overall efficient.
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 12 parameters, no output schema, and complex sibling tools, the description covers the essential usage: required auth, parameter formats, behavior for pagination and truncation, and field limitations compared to kci_detail. It lacks an explicit mention of the response structure beyond total/truncated, but since the tool is a search with a likely list response, the absence of output schema is partially mitigated. A more complete description might list other response fields (e.g., title, author, journal), but not required.
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?
Despite 0% schema description coverage (the schema has no descriptions), the narrative description explains the meaning of date_from/date_to (YYYYMM format), rows (max 100), institution filter, sort_by/sort_dir values, and the behavioral note about using sort_dir for pagination. It also explains the total and truncated fields. This is strong compensation for the missing schema descriptions. One minor gap: 'author' and 'journal' are listed in schema but not explained in text, though their names are self-describing.
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 begins with '[REST] 논문 검색 — title 필수 + 선택 필터', which clearly states the tool searches for KCI papers, identifies the required parameter (title), and notes optional filters. It distinguishes itself from siblings like kci_detail (used for per-item enrichment) and kci_harvest (for unauthenticated access), so purpose is very clear.
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 explicitly says '인증키 필요' (API key required) and directs users to kci_harvest (OAI without auth) when no key is available. It explains the sorting strategy for pagination and warns about the absence of certain fields in articleSearch. These provide both use-case guidance and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kci_statusARead-only
연결 점검 — OAI(무인증) Identify + REST 인증키 보유 여부.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior. The description adds specific behavioral details by stating it checks OAI Identify without authentication and whether a REST API key exists. It does not contradict the annotations.
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 succinct line in Korean, immediately conveying the tool's purpose without any extraneous words or repetition.
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?
With no parameters and no output schema, the description covers the core purpose and scope adequately. It could optionally mention the return format, but for a simple status check, the description is reasonably 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?
The tool has zero parameters, so the baseline score is 4. The description does not need to explain parameter behavior since there are none.
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 performs a connection check, specifying both OAI Identify (no authentication) and REST API key possession status. This distinguishes it from sibling tools like kci_search and kci_detail.
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 clear context that this is a connectivity/status check, implying it should be used to verify API access before other operations. However, it does not explicitly name alternatives or state when not to use it.
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. Dates show when Glama detected each change.
3 tool updates
v0.3.6- Changed
kci_collect1 field changed- added
Input schema / properties / retry_incompleteAdded value: +{ + "default": 1, + "title": "Retry Incomplete", + "type": "integer" +}
- Changed
kci_references3 fields changed- added
Input schema / properties / institutionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Institution" +} - added
Input schema / properties / sort_byAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sort By" +} - added
Input schema / properties / sort_dirAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sort Dir" +}
- Changed
kci_search3 fields changed- added
Input schema / properties / institutionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Institution" +} - added
Input schema / properties / sort_byAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sort By" +} - added
Input schema / properties / sort_dirAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sort Dir" +}
7 tool updates
v0.1.0- First observed
kci_collect - First observed
kci_detail - First observed
kci_harvest - First observed
kci_journal_citation - First observed
kci_references - First observed
kci_search - First observed
kci_status
TDQS
Most tools have clearly distinct purposes: status, detail, search, references, citation, harvest, and collect. However, kci_search and kci_collect could be confused since kci_collect also performs searches, and the distinction between REST and OAI modes is described but not immediately obvious from names alone.
Tool names follow a consistent kci_ prefix with a noun-like suffix (status, detail, search, references, journal_citation, harvest, collect). This pattern is clear and predictable, though kci_journal_citation is slightly longer than others. No mixing of camelCase or snake_case issues.
Seven tools is well-scoped for the domain of Korean citation index access. Each tool serves a distinct function (connection check, detail lookup, search, references, journal metrics, bulk harvest, combined collection). No tool feels redundant or unnecessary.
The tool set covers key operations: search, detail retrieval, references, journal citation metrics, bulk harvesting, and a combined collector. Minor gaps exist: there is no direct tool for author lookup, no tool for updating/correcting entries, and no delete functionality, but these are appropriate for a read-only API service.
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
Search 150M+ academic works, journals, and funders via Crossref API.
Korean business registry, corporate info, parcel tracking, validation APIs
Scholarly search: OpenAlex, Crossref, arXiv, OpenCitations and PubMed in one endpoint.
Multi-engine scholarly research server for search, traversal, full text, and reading lists.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to search and analyze Korean academic papers using the Korea Citation Index (KCI) Open API. Supports paper search, detailed metadata retrieval, reference analysis, author and keyword searches, and citation index queries.1-
- AlicenseNot gradedqualityAmaintenanceIntegrates with KISTI's ScienceON, NTIS, and DataON APIs to search and retrieve scientific papers, patents, reports, national R\&D projects, and research data.15Creative Commons Attribution Non Commercial 4.0 International
- AlicenseAqualityAmaintenanceEnables searching and collecting academic literature metadata from KISTI ScienceOn via Claude or CLI, supporting various document types and export formats.5MIT
- FlicenseAqualityCmaintenanceEnables querying the Korea Citation Index (KCI) Open API to search reference lists, retrieve journal citation indices, and view citation detail history for Korean academic journals.5-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rubatoyd/KCI_openAPI'
If you have feedback or need assistance with the MCP directory API, please join our Discord server