mcpField
N
na-openapi-mcp

na-openapi-mcp

本地服务
github.com搜索与检索11 天前更新

关于 na-openapi-mcp

na-openapi-mcp 将韩国国会图书馆资料检索 OpenAPI 接入 MCP 客户端,并提供 CLI。它覆盖图书、论文、文章、会议记录和议案等数据库,除搜索与导出外,还会识别无效搜索项及结果截断。

主要功能

  1. 01搜索 21 类资料数据库
  2. 02合并多个搜索词的结果
  3. 03查询单条资料详情和目录
  4. 04导出 xlsx、csv、json、sqlite
  5. 05提示无效搜索项及结果限制

适用场景

  1. 01跨数据库查找图书和论文
  2. 02收集多主题检索结果并导出
  3. 03检查搜索字段或目录补全状态

MCP 相关

提供 `na_search`、`na_collect`、`na_detail`、`na_toc` 等 MCP 工具,用于搜索、收集及查看韩国国会图书馆记录。支持 stdio 和 Streamable HTTP。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbna-openapi-mcp.mcpb0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

na-openapi-mcp

CI Release Downloads

📈 使用量 — 最近 14 天查看 1 次(唯一用户 1)· 克隆 157 次(唯一用户 97)· 发布资产累计下载 94

每日克隆·查看趋势

2026-10-27 自动更新 · 完整历史记录见 docs/usage.csv。GitHub 流量统计仅提供 14 天的数据窗口,因此本仓库每天记录并累积数据。

国会图书馆(National Assembly Library of Korea)资料检索 OpenAPI,可供 Claude 等 MCP 客户端直接使用的服务 + CLI。可搜索和采集图书、学位论文、国内外文章、国会会议记录、议案信息等 21 种数据库,并导出为 xlsx/csv/json/sqlite。

姊妹项目:nl-openapi-mcp(国立中央图书馆图书·灰色文献)· kci-openapi-mcp(学术论文·引用指数)· scienceON-mcp(KISTI 文献)


本工具特别关注的问题

① 对不支持的检索项,返回整个目录,而不是报错

这是此 API 最大的陷阱。综合检索在无法识别检索项名称时,不会拒绝请求,而是直接忽略整个检索词。

저자,오욱환      →  total=76          ← 정상
저자명,오욱환    →  total=13,097,591  ← 전체 DB. 오류도 경고도 없다

作者名 在高级检索中是有效名称,因此很容易误以为它不是拼写错误而使用。 照此检索会把 1,300 万条记录误认为是“搜索结果”。 → 本服务会通过白名单在调用前拒绝请求,并告知正确名称。

检索项搜索 오욱환 的结果
全部 · 基本检索 · 资料名 · 作者 · 关键词105 · 88 · 4 · 76 · 7
作者名 · ISBN · 发行年份 · 拼写错误各 13,097,591(整个数据库)
② 防止静默截断

我们会始终通过元数据告知收到的结果是否完整,还是遭到了截断。

信号含义解决办法
truncated在 max_records 处停止提高上限即可解决
cap_hittotal > 可提取上限 — API 不会再返回更多结果必须拆分检索式
early_stop_note因无新增记录而提前结束可能是响应重复或服务器异常
stopped_early_note因预算耗尽,某些检索词甚至未能查询提高 max_records
zero_yield_warning检索项被接受,但始终返回 0 条使用其他检索项
option_ignored_warning年份筛选器被忽略(综合检索)同时指定 dbname
ignored_search_warning返回了整个目录的规模检查检索项
toc_enrich_truncated_note仅补充了部分目录候选项提高 toc_max
toc_enrich_incomplete_note有些目录查询失败提高上限无济于事 — 请检查控制编号
toc_enrich_aborted_note因配额或密钥问题而中止补充提高上限反而会恶化 — 请查看 na_status

可提取上限为 pageno 最大 99 × page_size(实测)。默认值(1000)对应 99,000 条; 降低 page_size 也会相应降低上限 — 本服务会将这一点纳入报告。

③ 通过实测确认官方文档与实际情况不符之处

如果只依据文档(.hwp/.docx)开发,以下这些地方会悄无声息地出错。

项目官方文档✅ 实际情况
记录标签<record><recode> — 按文档处理会导致未能提取任何记录,但 total 正常
<item> 子项顺序value → namename → value
控制编号字段名controlno제어번호
displaylines 上限1001000
认证密钥(未提及)必须将 Encoding 值直接拼接到 URL 中
高亮标记(未提及)在匹配字段中插入 <font color="red">

完整对照表和依据见 docs/NA_API_GUIDE.md。


安装

1) Claude Code / Claude Desktop(uvx — 推荐)
{
  "mcpServers": {
    "na": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/rubatoyd/na-openapi-mcp", "na-mcp"],
      "env": { "NA_API_KEY": "발급받은_인증키" }
    }
  }
}
2) Claude Desktop .mcpb 一键安装

从发布页面下载并运行。 提供轻量版(na-openapi-mcp.mcpb,通过 uvx 运行)以及无需 Python 和 uv 的独立完整版本 (win-x64 · macos-arm64 · linux-x64)。

3) 本地开发
git clone https://github.com/rubatoyd/na-openapi-mcp
cd na-openapi-mcp
uv sync --all-groups
uv run pytest -q
uv run na status
4) 其他 MCP 客户端

默认使用 stdio 传输。需要 HTTP 时,请运行 na-mcp --transport streamable-http --host 127.0.0.1 --port 9126 (也支持环境变量 NA_MCP_TRANSPORT·NA_MCP_HOST·NA_MCP_PORT)。


认证密钥

在公共数据门户 data.go.kr 申请使用国会图书馆_资料检索服务 (数据集 15098174),即可获取认证密钥。开发账号的流量限额为每天 10,000 次。

要使用 na_detail·na_toc,还需同时申请详细信息查询服务(15098175)—— 认证密钥以账号为单位,因此同一个密钥即可使用。

NA_API_KEY=발급받은_키          # Decoding(원문) 권장
NA_API_KEY_ENCODED=            # Encoding 값만 있으면 이쪽에
NA_OS_TRUST=1                  # 교육망·사내망 SSL 인터셉션 대응(기본 1)

🔑 data.go.kr 会提供两种认证密钥:Encoding / Decoding。此 API 必须将 Encoding 值直接拼接到 URL 中(实测),如果通过库的 params= 传入,%2B 会被二次编码为 %252B,导致认证悄无声息地失败。无论输入哪种密钥,代码都会自动转换,无需担心。


MCP 工具

工具用途
na_status检查是否持有认证密钥 + 实际往返 1 次
na_search搜索资料,同时返回截断信号
na_collect合并搜索词进行并集收集 → xlsx/csv/json/sqlite。使用 toc_max 补充目录正文(默认关闭)
na_detail查询 1 条控制编号的详细信息
na_toc查询 1 条控制编号的目录
na_fields搜索字段、dbname 有效值 + 实测依据(普查)
搜索词格式

格式为 搜索字段,关键词。用 | 连接即组成 AND 条件。

전체,교육불평등
전체,교육|자료명,불평등          ← AND

API 没有 OR(并集)语法,因此由 na_collect(terms=[…]) 实现。

统一搜索字段(7 种):基本搜索 全部 资料名 作者 出版者 关键词 索书号

指定 dbname 后会切换为详细搜索,搜索字段词汇因 DB 而异 (学位论文 = 论文名·指导教授,国内文章 = 文章名,学术期刊·报纸 = 合并为一个字段的 收录刊名/报纸名)。 准确列表请通过 na_fields 查看。


CLI

na status
na fields                          # 검색항목·dbname 유효값 (--json 으로 census 전체)
na search "전체,교육불평등" --max-records 20
na search "저자명,양연동" --dbname 학위논문
na collect --terms "전체,교육불평등" "전체,교육격차" --max-records 2000

# 목차 본문까지 붙이기 — 건당 1회를 더 씁니다(기본 꺼져 있음). 본문은 json·sqlite 에만.
na collect --search "자료명,교육불평등" --dbname 일반도서 --toc-max 300 --formats json xlsx
na detail MONO12026000012887
na toc    MONO12026000012887

# 연도 범위는 상세검색의 option 으로만 걸립니다(통합검색에서는 무시됨)
na search "자료명,교육" --dbname 일반도서 --option "발행년도,2000|발행년도,2010"

响应字段

记录没有固定架构。它由 <item><name>·<value> 键值对组成,字段名称集合 因资料类型而异——仅标题字段就有 资料名(图书)/ 论文名(学位论文)/ 文章名(文章)/ 收录刊名/报纸名(学术期刊·报纸)/ 期刊名(电子期刊)/ 议题(会议记录)/ 议案名(议案信息)/ 翻译法令名 / 表图名 等不同名称。

已知名称会规范化为通用列,原始数据则原样保存在 raw 中。

需要注意的值(均为实测):

  • 说明文字可能出现在值的位置——E-BOOK 的 DDC 中,99.95% 的值为 仅可通过电子形式阅览。 规范化字段留空,名称保留在 placeholder_fields 中(原文保存在 raw 中)。
  • 年份可能不是 4 位数字——201u(MARC 不确定年份)、空值、0。
  • 即使 초록유무=Y,也无法获取摘要正文。 只有国会议案信息(제안이유 및 주요내용)和国会会议记录(내용)含有叙述性文本。
  • 所有记录均无目录的资料类型:E-BOOK · 学术期刊、杂志 · 报纸 · 国外文章 · 视频资料。
启用目录补充(toc_max)时

目录未附带的原因有 5 种,每种原因对应的处理方法都不同。如果把它们混作同一种空值,就会错误地得出“此资料没有目录”的结论,因此 toc_status 列会逐行区分原因。

toc_status含义处理方法
ok已获取正文—
skipped目录标记不是 Y,或没有控制编号——不调用—(不消耗配额)
empty响应正常,但没有正文 → 标记不准确—
sentinel正文重复出现 无目录信息—
failed查询失败使用 na_toc 重新查询单条记录
not_attempted因预算耗尽或中断而未调用提高 toc_max

has_toc='Y' 但 toc_status='empty' 的记录是最重要的信号,因此这两列会并排显示。 正文(toc_text)仅包含在 json·sqlite 中——正文可能长达数千字,会超出 xlsx 单元格上限(32,767),也会使 csv 文件变得臃肿。


验证状态

  • 209 项回归测试。 不仅固定解析器和收集器,也固定测量工具本身(tests/test_probe_instrumentation.py)——白名单来自探测器的输出,如果探测器悄然出错,该错误就会原样成为代码。CI 不仅运行测试,还会检查客户端能否实际启动——确认新依赖解析后存在 mcp.server.fastmcp、执行实际 stdio 握手、公开 6 种工具、无密钥时 CLI 能否启动,以及机密文件未被跟踪。
  • 所有 API 事实均通过实际在线往返确认(未从文档或姊妹项目照搬)。 13 种资料类型的字段普查样本约 21,000 条。复现方式:scripts/probe_*.py。
  • 详细依据和验证等级(✅ 实测 / 📄 文档依据 / ❓ 未验证)见 docs/NA_API_GUIDE.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。