korea-scholarship-mcp
korea-scholarship-mcp
Сервер FastMCP stdio, предоставляющий две корейские библиографические службы — Korea Citation Index (KCI, 한국학술지인용색인, Национальный исследовательский фонд Кореи) и Open Access Korea (OAK, 오픈액세스코리아, Национальная библиотека Кореи) — в виде восьми инструментов для Claude Desktop и других MCP-клиентов.
Это корейский аналог cinii-mcp и jstage-mcp, возвращающий ту же обёртку ответа, так что все три можно читать бок о бок в трёхсторонней работе.
Инструменты
Инструмент | Источник | Требуется ключ | Назначение |
| KCI REST | да | Поиск статей по названию, автору, журналу, учреждению, аффилиации, ключевому слову, аннотации, DOI, диапазону дат |
| KCI REST | да | Полная запись по контрольному номеру — единственная конечная точка, содержащая ключевые слова, ISSN, UCI и аннотации |
| KCI REST | да | Произведения, цитируемые в одной статье |
| KCI REST | да | Индексы цитируемости журнала (импакт-фактор, индекс оперативности, доля самоцитирования) |
| KCI OAI-PMH | нет | Сбор по окну дат поступления, фильтрация на стороне клиента, следование токенам возобновления |
| OAK OAI-PMH | нет | Сбор корейских институциональных репозиториев по окну дат поступления |
| OAK OAI-PMH | нет | Одна запись OAK по идентификатору OAI |
| — | — | Что настроено, что доступно и что этот сервер не охватывает |
Четыре из восьми работают вообще без учётных данных — всё OAI-PMH, а также статус.
Related MCP server: Literatür MCP
Что представляют собой источники на самом деле
KCI индексирует статьи в корейских рецензируемых журналах. Он не индексирует монографии, главы или диссертации. Его REST-интерфейс — это настоящий интерфейс запросов; его интерфейс OAI-PMH — нет.
OAK агрегирует корейские институциональные репозитории — отчёты об исследованиях, диссертации, монографии, фонды 고서, статьи открытого доступа — неравномерно пополняемые учреждениями-участниками.
Обе службы были протестированы вживую 19 августа 2026 года, и три свойства определяют, как написаны инструменты:
Метки времени OAI — это даты поступления, а не публикации. Окно сбора за май 2019 года возвращает статьи, опубликованные в период с 2010 по 2015 год. Часто повторяемое утверждение, что канал OAI KCI раскрывает только недавние материалы, является неверным прочтением этого: канал охватывает весь корпус, просто его невозможно ни о чём спросить. Поэтому
kci_harvestфильтрует на стороне клиента и сообщает об этом в диагностике при каждом вызове.
1a. oai_dc у KCI полностью типизирован, и этот сервер читает типы. По результатам измерений на 500 живых записях: identifier[type=artiId|uci|doi|citedCnt|regularity|journalInfo], атрибут issn= в 500/500 и lang="original|english" в каждом заголовке и описании. Версия 0.2.0 утверждала обратное — «позиционный нетипизированный мешок», который нужно сопоставлять по шаблону, — и, следовательно, отбрасывала все ISSN, все аннотации и 371 реальный DOI на 500 записей. Сопоставление по шаблону остаётся только как запасной вариант для идентификаторов, поступающих без тегов. Обратите внимание, что KCI также выдаёт элементы type="doi", содержащие только префикс резолвера; они нормализуются до null, а не передаются как идентификаторы.
OAK не отправляет
resumptionToken. Он объявляетnoSetHierarchy, соблюдаетfrom/untilи ограничивает окно примерно 99 записями без продолжения. Сборщик, доверяющий протоколу, молча выдаст усечённое окно за полное.oak_harvestвызываетOAI_WINDOW_TRUNCATEDпри достижении предела и сообщает вам о необходимости разбить окно.OAK — это не стандартный Dublin Core. Он выдаёт
dc:title_h,dc:abstract_e,dc:publish_date,dc:location_org,dc:deep_link,dc:contents_urlи помещает тип материала вdc:keyword. Наличие полей зависит от репозитория-источника. Нераспознанные поля сохраняются вextra.raw_fields, а не отбрасываются.
Ещё две асимметрии сообщаются, а не сглаживаются:
articleSearchв KCI принимаетkeywordкак поле поиска, но опускает авторские ключевые слова, ISSN и UCI в ответе. Пустой список ключевых слов — артефакт конечной точки.kci_searchсообщает об этом при каждом вызове;kci_articleвосстанавливает их.KCI отвечает HTTP 200 при ошибке, помещая ошибку в
outputData/result/resultMsg. Клиент, проверяющий коды состояния, сообщит о незарегистрированном ключе как об успешном пустом поиске.
Обёртка ответа
Каждый инструмент возвращает обёртку, описанную в mediation.py (схема 2.1.0) — типизированные query/script, matching_mode, градуированную breadth, поэлементный matched_in, типизированные diagnostics, журналируемый receipt и attribution. Ничего не обобщается и не оценивается за вас.
mediation.py 2.2.0 — это примирение форка. До 19 августа 2026 года два разных файла называли себя 2.1.0: в японской копии был emit() — сохраняемость реестра, — но хангыль классифицировался как latin; корейская копия знала хангыль и расширения CJK, но не имела emit(), поэтому корейские запросы никогда не попадали в реестр, в который попадал каждый японский запрос. В 2.2.0 есть и то и другое, и он поставляется байт-в-байт одинаковым в cinii-mcp, jstage-mcp, ndl-mcp и этом сервере. Всё в нём аддитивно, поэтому японские серверы принимают его без миграции.
detect_script()распознаёт хангыль и расширения CJK B–G, а также Дополнение для совместимости.titleиsourceсодержат слотkoнаряду сja.emit()помещает обёртку в хэш-связанный реестр запросов;ledger_available()сообщает, может ли он это сделать, а не оставляет молчаливую заглушку.
title.romanized остаётся null, если источник не предоставляет романизацию. Ни KCI, ни OAK этого не делают, и этот сервер не будет её генерировать: исправленная романизация корейского имени требует знания имени, а строка, транслитерированная машиной и представленная как библиографические данные, — это фабрикация, имеющая форму факта.
Коды диагностики
OK · NO_KEY · KCI_REJECTED · KCI_KEYWORDS_ABSENT · ZERO_CONJUNCTION · TRUNCATED · PAGE_PAST_END · REFERENCE_DEPOSIT_UNEVEN · BIBLIOMETRIC_SCOPE · SCRIPT_LATIN_QUERY · INGEST_DATE_NOT_PUBLICATION_DATE · CLIENT_SIDE_FILTER · OAI_MORE_AVAILABLE · OAI_INCOMPLETE · OAI_STALLED · OAI_PAGE_CAP · OAI_NO_RECORDS · OAI_ERROR · OAI_WINDOW_TRUNCATED · OAK_NONSTANDARD_DC · WINDOW_DOMINATED_BY_ONE_REPOSITORY · REDIRECTED · TRANSPORT_ERROR · API_ERROR · PARSE_ERROR
Предварительные требования
Python 3.10+ в PATH.
Необязательно ключ API KCI — бесплатный, регистрируется самостоятельно, требуется только для четырёх инструментов REST.
Получение ключа KCI
Зарегистрируйтесь на open.kci.go.kr и подайте заявку на ключ Open API.
Один и тот же ключ обслуживает все пять значений
apiCode(articleSearch,articleDetail,referenceSearch,citation,citationDetail).
KCI также зеркалируется в виде четырёх наборов данных на data.go.kr под именем 한국연구재단; этот путь выдаёт другой ключ и здесь не используется.
Установка
Пакет использует структуру src/ и устанавливает консольный скрипт. Подойдёт любой из этих вариантов:
# from a release archive
pip install korea-scholarship-mcp.zip
# from a built wheel
pip install korea_scholarship_mcp-0.4.0-py3-none-any.whl
# from a clone, for development
pip install -e ".[dev]"
# without installing anything, straight from the repository
uvx --from "git+https://github.com/ckgerteis/korea-scholarship-mcp" korea-scholarship-mcpУстановка помещает команду korea-scholarship-mcp в PATH. python -m korea_scholarship_mcp эквивалентна.
Конфигурация
cp .env.example .envKCI_API_KEY=your_kci_api_key_hereClaude Desktop
Если пакет установлен, укажите на консольный скрипт:
{
"mcpServers": {
"korea-scholarship": {
"command": "C:\\path\\to\\.venv\\Scripts\\korea-scholarship-mcp.exe",
"env": {
"KCI_API_KEY": "your_kci_api_key_here"
}
}
}
}Или запустите его из клона без установки:
{
"mcpServers": {
"korea-scholarship": {
"command": "C:\\path\\to\\.venv\\Scripts\\python.exe",
"args": ["-m", "korea_scholarship_mcp"],
"env": {
"KCI_API_KEY": "your_kci_api_key_here"
}
}
}
}Полностью опустите блок env, чтобы запустить четыре инструмента без ключа.
Примечание об MCP SDK
mcp 2.0.0 удалил mcp.server.fastmcp. Этот сервер импортирует FastMCP, где он есть, и возвращается к MCPServer, где его нет, поэтому он работает в любом случае. Тот же самый шим был применён к cinii-mcp и jstage-mcp 19 августа 2026 года; до этого оба импортировали mcp.server.fastmcp напрямую, закрепляя mcp[cli]>=1.2.0 без верхней границы, поэтому свежая установка любого из них разрешалась в 2.0.0 и падала при импорте.
Обработка учётных данных
Ключ KCI передаётся в строке запроса, что делает его уязвимым для утечки двумя конкретными способами, которые этот сервер закрывает:
httpxрегистрирует каждый URL запроса на уровне INFO._silence_http_logging()отключает это и удаляет любой обработчик stdout — что в любом случае необходимо, поскольку stdout несёт JSON-RPC.Исключения транспорта и состояния содержат URL запроса. Каждое сообщение, предназначенное клиенту, проходит через
_redact(), а квитанция формируется из параметров с удалёнными учётными данными, а не с замаскированными.
Тесты
python -m pytest tests -q # offline, against fixtures captured 19 Aug 2026
RUN_LIVE=1 python -m pytest tests -q # also exercises the live KCI endpoints
RUN_LIVE_OAK=1 python -m pytest tests -q # adds OAK; needs a network that reaches oak.go.krЖивые тесты защищают утверждения, на которых основан этот README: что окно поступления KCI возвращает более старые публикации, что идентификаторы KCI типизированы, что max_records — это предел, а не подсказка, и что возобновляемый сбор не записывает окно дат, которое он никогда не отправлял. Тест OAK отдельно ограничен и громко падает, если OAK недоступен, а не проходит на невыполненной ветке.
Известные ограничения
Четыре инструмента KCI REST никогда не видели живого ответа — нет ключа API. Их сопоставление полей следует опубликованной документации и не проверено на проводе; тест успеха/неудачи намеренно структурный (наличие записей означает успех), чтобы ни многословное сообщение об успехе, ни краткий отказ не были истолкованы неверно. Считайте вывод REST предварительным, пока не появится ключ.
Что этот сервер не охватывает
ScienceON (KISTI) — намеренно вне области охвата. Его шлюз требует токен AES-256-CBC, созданный из зарегистрированного MAC-адреса, а также зарегистрированный публичный IP-адрес. rubato103/scienceon-mcp уже реализует его с реальными учётными данными и защищён от описанного выше пути утечки учётных данных; установите его рядом, а не дублируйте непроверяемый код аутентификации:
claude mcp add scienceon -- uvx --from "git+https://github.com/rubato103/scienceon-mcp" scienceon-mcpRISS (KERIS) — поисковый API существует по адресу https://www.riss.kr/openApi и охватывает диссертации, отечественные и зарубежные статьи, монографии, отчёты об исследованиях и серийные издания, но ключи выдаются только корейским некоммерческим учреждениям и университетам, каждая заявка одобряется сотрудниками KERIS; физические лица не могут подать заявку. Отвечает ли неккорейский университет требованиям, не проверялось. Если ключ когда-нибудь будет получен, RISS принадлежит этому серверу.
DBpia (Nurimedia) — ключи открыты и щедры (2500 вызовов в день), но условия использования ограничивают сервис некоммерческими целями и запрещают копирование, хранение или передачу результатов поиска, которые должны отображаться в реальном времени и без изменений. Это несовместимо со сбором в менеджер ссылок, индекс корпуса или реестр. Ограничение — это лицензия, а не API.
korea_sources_status сообщает обо всех трёх на месте, так что упущение видно изнутри инструмента, а не только в этом файле.
Правила использования
KCI и OAK — государственные сервисы без опубликованного лимита запросов. Собирайте данные благоразумно; нарезайте окна, а не долбите по широким диапазонам.
Метаданные, полученные здесь, являются библиографическими. Полный текст находится на условиях, установленных репозиторием-держателем —
contents_urlOAK указывает на репозитории-участники, каждый со своей лицензией.Строки атрибуции возвращаются в каждой обёртке; переносите их в любые публикации.
Цитирование
Если это программное обеспечение поддерживает ваше исследование, пожалуйста, процитируйте его. См. CITATION.cff или используйте кнопку «Cite this repository» на GitHub.
Лицензия
MIT © 2026 Christopher Gerteis.
Эта лицензия распространяется только на серверный код. Она не предоставляет никаких прав на данные KCI или OAK, которые по-прежнему регулируются условиями National Research Foundation of Korea и National Library of Korea соответственно.
Отказ от ответственности
Исследовательский инструмент, поддерживаемый по мере возможностей и предоставляемый «как есть», без гарантий. Не аффилирован с National Research Foundation of Korea, National Library of Korea, KERIS, KISTI или Nurimedia и не одобрен ими.
Автор
Dr Christopher Gerteis, SOAS University of London.
This server cannot be installed
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 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 gradedqualityDmaintenanceEnables searching, PDF conversion, and reference extraction for Turkish academic articles on DergiPark via MCP tools.39MIT
- AlicenseAqualityAmaintenanceEnables searching and harvesting Korean Citation Index literature, citation indices, and references via REST API and OAI-PMH.71MIT
- 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
Related MCP Connectors
IEEE Xplore MCP — BYOK wrapper over the IEEE Xplore Metadata Search API
MCP server for Altmetric APIs - track research attention across news, policy, social media, and more
MCP for CanLII: Canadian case law and legislation metadata (federal, provincial, territorial).
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/ckgerteis/korea-scholarship-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server