Skip to main content
Glama
cinii-mcp

cinii-mcp

by ckgerteis

cinii-mcp

一个 FastMCP stdio 服务器,将 CiNii Research API — 日本国家学术数据库,由国立情报学研究所(NII)运营 — 以七个工具的形式提供给 Claude Desktop 和其他 MCP 客户端使用。

CiNii Research 聚合了来自 KAKEN、CiNii Articles、CiNii Books、IRDB、Crossref、DataCite、PubMed 和 NDL Search 的元数据。目前没有成熟的开放 MCP 工具支持它,因此这个服务器填补了研究人员查询日语学术文献的空白。

用途

CiNii Research 索引了五种类型的日语学术记录,这个服务器将所有这些记录带入 Claude 对话中:期刊论文、图书和专著、博士论文、KAKEN 科研费资助项目、研究人员简介,以及通过 CRID 进行的单条记录查询。用英语提问,得到日语学术文献,实际发送的日语术语会与结果一起显示。

KAKEN 值得单独关注——它记录的是已获资助的项目,因此能揭示正在进行的研究、正在形成的合作,以及在成果出版之前就已提交资助报告的研究。

每条结果都带有发送的术语、其文字体系、CiNii 的匹配方式,以及固定查询的收据,因此支撑脚注的搜索可以被命名、引用,并由他人重新执行。

Related MCP server: CiNii MCP Server

工具

工具

用途

cinii_search_articles

期刊论文(JALC、Crossref、PubMed、IRDB)

cinii_search_books

图书和专著(NACSIS-CAT、NDL Search)

cinii_search_dissertations

日本大学的博士论文

cinii_search_kaken

KAKEN(科研費)资助的研究项目

cinii_search_all

跨所有内容类型的综合搜索

cinii_search_researchers

研究人员简介和所属机构

cinii_get_record

通过 URL 或 CRID 进行单条记录查询

结果来自 CiNii Research OpenSearch v2 API,格式为 JSON-LD,并以一个类型化的 JSON 响应信封返回——见下文响应格式。(v2.0.1 之前的版本返回格式化的 markdown 文本;这是一个破坏性变更,而非格式偏好。)

响应格式

每个工具返回一个 JSON 响应信封,由 mediation.py 构建,定义于 response-schema.json。Schema 版本 2.3.0。同一模块和 schema 在服务器家族中以字节完全相同的方式内置,因此一个服务器的信封可以被为另一个服务器编写的消费者读取。

信封报告的是搜索是如何进行的,而不仅仅是找到了什么:

  • searched_for — 在搜索操作中,实际发送的术语、检测到的文字体系以及匹配模式,被提升到信封顶部,以便中继客户端不会丢弃它。获取操作(cinii_get_record)省略此项:它们被赋予了一个标识符,没有选择术语。

  • query — input_terms 按提供的原样,normalized 按发送的,以及检测到的 script。这一对是调用者语言与语料库之间任何渲染处理的记录。

  • matching_mode — 此服务器为 metadata_conjunction。它告诉你如何解读 result.total。

  • result.breadth — none、narrow(1–50)、broad(51–1000)、very_broad(>1000)。阈值有意设得很低:几百条看起来像文献的结果会被标记出来,而不是直接通过。

  • items[].matched_in — 每条记录中匹配发生的字段。

  • receipt — ISO 8601 时间戳、对规范化查询及其参数计算的 SHA-256 哈希,以及返回的标识符。哈希可以验证你已持有的术语;它不能被反推来生成术语,因此存入的对象是信封,而非收据。

  • attribution — 每个响应中必需的署名行。

诊断代码

类型化且封闭。诊断信息绝不是客户端需要解析的散文。

代码

级别

含义

OK

info

返回了记录;无需标记。

ZERO_CONJUNCTION

warning

无记录。CiNii 匹配编目元数据并将多词查询进行 AND 连接,因此即使存在相关工作,未索引的复合词也会返回零结果。在断定文献不存在之前,先改变渲染方式。

SCRIPT_LATIN_QUERY

warning

查询是拉丁文字,因此只匹配了罗马化和英文元数据。日文形式会触及一个不同且更大的语料库。

API_ERROR

error

API 已响应,但返回了错误。

TRANSPORT_ERROR

error

请求未完成。与 API_ERROR 保持区分,因为失败的搜索结果未知,绝不能将其写为不存在。

RECEIPT_NOT_DEPOSITED

info

响应未写入查询账本,因为未配置收据目标。搜索不受影响;没有收据留存。

RECEIPT_WRITE_FAILED

warning

已设置收据目标,尝试了写入,但未成功。与上一行不同,因为一个是选择,另一个是故障。

查询收据

每个信封都可以由 ledger.py 存入一个仅追加、哈希链式的 JSONL 日志。除非设置了 MCP_RECEIPT_DIR(或旧版 MCP_RECEIPT_LOG),否则默认关闭,日志记录失败会被吞掉而不是抛出——搜索比记录更重要。在组成一行之前,机密信息会被脱敏。

自 schema 2.3.0 起,信封会说明这一点。当响应未被存入时,emit() 会在变量未设置时追加 RECEIPT_NOT_DEPOSITED,或在变量已设置但写入未成功时追加 RECEIPT_WRITE_FAILED。这个缺口随后在成为记录的人工制品中可见,而不仅仅在配置文件中。mediation.deposit_enabled() 可按需报告同一事实。

MCP_RECEIPT_DIR=C:\path\to\receipts        # a folder, not a file
MCP_RECEIPT_SESSION=project-or-article-slug
MCP_RECEIPT_STRICT=1                         # optional: make logging failure raise
MCP_RECEIPT_LOG=C:\path\to\receipts.jsonl  # legacy single file; ignored when _DIR is set

一个文件夹,每个服务器一个文件。 MCP_RECEIPT_DIR 指向一个目录,每个服务器在其中写入自己的 <server>.jsonl。这不是为了整洁。追加操作是先读最后一个哈希再写入,而围绕它的锁是线程锁,只在单个进程内有效,不跨多个进程——六个服务器是六个进程,两个同时响应的服务器会读取同一个前驱并都声称拥有它。这是实测而非理论:六个进程向一个文件写入 150 行产生了十四个分叉。MCP_RECEIPT_LOG 仍然可用,对单个服务器仍然正确;但对一个家族来说形状不对。

install.ps1 为全部六个服务器设置此配置,并在文件夹中写入一个 README。

验证一条链,或整个文件夹:

cinii-mcp-ledger verify      receipts/cinii.jsonl
cinii-mcp-ledger verify-dir  receipts
cinii-mcp-ledger manifest    receipts        # writes receipts/manifest.json

verify 在失败时以非零退出码退出,并说明发现的类型:分叉(并发写入者——配置故障,但每一行仍然存在)、缺失行、重排,或篡改(一行无法哈希到其自身内容)。只有最后一种是对诚实性的断言,将它们同等报告会引导读者混淆两者。清单(manifest)是应引用的对象:对整个存入内容的一份描述——每个文件的行数、首尾时间戳、终端哈希,以及按服务器、文字体系和会话的合计总数。

前提条件

  • Python 3.10+ 在 PATH 中。

  • CiNii Web API 应用程序 ID(appid)——免费;必需。

获取应用程序 ID

CiNii Research API 要求注册应用程序 ID,并在每个请求中作为参数发送。

  1. 在 CiNii Web API 开发者注册 页面注册并获取你的应用程序 ID。

  2. 同意 NII 的 API 规定:学术内容服务使用规定、CiNii Research 使用详细规定,以及学术内容服务 Web API 使用详细规定。

  3. 商业用途请在申请前发送邮件至 ciniiadm@nii.ac.jp。

同一个应用程序 ID 也适用于 cinii_search_kaken 使用的 KAKEN API。

安装

该包安装一个 cinii-mcp 控制台脚本。它是命名空间的,因此可以与这个服务器家族的其余部分共享一个环境。

python3 -m venv .venv
.venv/bin/pip install .

在 Windows 上:

py -3.11 -m venv .venv
.venv\Scripts\pip.exe install .

或者直接从仓库安装,无需克隆:

uvx --from "git+https://github.com/ckgerteis/cinii-mcp" cinii-mcp

验证安装:

.venv/bin/python -c "import cinii_mcp; print(cinii_mcp.__version__)"

如果包或其内置模块之一缺失,这会大声失败。不要使用 cinii-mcp --help 作为检查:未知参数会被忽略,服务器启动、读取输入结束并退出 0,因此无论代码状态如何都会报告成功。

安装不止这一个

六个独立包。没有一个导入另一个,没有一个依赖另一个,每个都独立安装和响应——在此目录中执行 pip install . 是对此服务器的完整安装,仅此而已。

它们确实共享三样东西:响应信封、查询账本,以及——如果你运行多个——收据文件夹。install.ps1 以字节完全相同的方式内置到全部六个中,并处理这些。它默认安装此服务器,因为克隆一个仓库并不是对另外五个的请求。

.\install.ps1                        # this server
.\install.ps1 -All                   # all six
.\install.ps1 -Servers cinii,cinii         # a chosen subset

无论你指定哪个子集,都会注册到一个收据文件夹,只询问一次。脚本优先使用同级检出而不是网络,沿用已注册的凭据而不是再次询问,不碰未被要求处理的服务器,并且在已注册的服务器对文件夹或会话 slug 意见不一致时停止而不是猜测。它还断言 ledger.py 和 mediation.py 在其安装的所有内容中字节完全相同,因此两个信封版本不可能在一个环境中不被察觉地共存。

配置

服务器从 CINII_APPID 环境变量读取你的应用程序 ID。复制示例文件并填写(切勿提交真实值):

cp .env.example .env
CINII_APPID=your_application_id_here

Claude Desktop 配置

在 %APPDATA%\Claude\claude_desktop_config.json 的 mcpServers 下添加一个条目,指向你安装到的环境中的控制台脚本。在 macOS 或 Linux 上,使用 .venv/bin/cinii-mcp 的绝对路径。

{
  "mcpServers": {
    "cinii": {
      "command": "C:\\path\\to\\.venv\\Scripts\\cinii-mcp.exe",
      "env": {
        "CINII_APPID": "your_application_id_here"
      }
    }
  }
}

3.0.0 中的变更。 早期版本通过路径注册——"command": "…\\python.exe", "args": ["…\\server.py"]。该条目无法启动此版本,因为 server.py 现在是包内的模块,而不是与导入并列的脚本。请用上面的控制台脚本替换它。

重启 Claude Desktop。七个工具应出现在工具列表中的 "cinii" 下。

使用规则

NII 强制执行使用规则;违反规则可能导致访问被阻止或注册被取消。此服务器在每个请求中发送你的 appid(必需),并设计为遵守规则,但你仍需对使用负责:

  • 请勿在短时间内发出大量请求。过度访问影响其他用户时,可能会在不事先通知的情况下被封锁。

  • appid 仅用于 API 请求;请勿将其暴露在面向用户的 CiNii 页面链接中。

  • 使用检索到的数据时,请遵守 NII 的规定,尊重版权。

引用

如果本软件支持了您的研究,请引用它。参见 CITATION.cff,或使用 GitHub 上的“Cite this repository”按钮。

许可证

MIT © 2026 Christopher Gerteis。

本许可证仅涵盖服务器代码。它不授予对 CiNii 数据或 CiNii API 的任何权利,这些权利仍受上述 NII 条款的约束。

免责声明

本工具为研究工具,按“现状”提供,以尽力维护为基础,不提供任何担保。与国立情报学研究所无关联,亦未获得其认可。

作者

Dr Christopher Gerteis,伦敦大学亚非学院(SOAS University of London)。数据由CiNii Research(国立情报学研究所)提供。

Available Tools

11 tools
cinii_get_holdingsA
Read-onlyIdempotent

List the libraries that hold a book or journal, by its NCID, from NACSIS-CAT through CiNii Research (/opensearch/holder, live since 30 March 2026). Returns the unified envelope (operation 'get_holdings', record_type 'holding'); each item names a library, its page, its NACSIS-CAT library ID (extra.library_id) and, where the library supplies one, a link into its own catalogue for this title (extra.catalog_url).

Filters narrow the list to libraries that take ILL requests, offer copy or loan service, belong to Japan–US or Japan–Korea ILL, or (journals) hold a given year, volume or number. Zero holdings is HOLDINGS_NONE_REGISTERED, not proof that no library has the item.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description focuses on what annotations can't say: the response envelope ('operation get_holdings', 'record_type holding'), the per-item fields including extra.library_id and extra.catalog_url, and the crucial semantic caveat that HOLDINGS_NONE_REGISTERED means zero holdings are registered, not that no library holds the item. That last point materially prevents misreading an empty result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight blocks: purpose first, then what each returned item contains, then filter scope and the zero-holdings caveat. Dense but front-loaded and free of filler; the parenthetical endpoint/date details are the only mildly expendable content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't document return values, and it correctly spends its budget on the empty-result semantics and filter scope instead. Remaining gaps are minor: no mention of how pagination behaves beyond the schema's count/start, and no note on rate limits or whether an NCID lookup can fail for non-NACSIS records.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Reported schema description coverage is 0% at the top level (the sole 'params' wrapper is undocumented), yet the description compensates by grouping the filter families in prose — ILL participation, copy/loan service, Japan–US and Japan–Korea ILL, and journal year/volume/number — and flagging that the last three are journals-only. It does not cover pagination (count/start), which is left entirely to the nested schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'List the libraries that hold a book or journal, by its NCID', plus the upstream source (NACSIS-CAT via CiNii Research) and endpoint. This is clearly distinguishable from every sibling, all of which are search_* or get_record tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the NCID requirement and the reference to 'cinii_search_books' (in the schema) tell an agent this is a follow-up call after a search, and the filter paragraph sketches when to narrow. But the description never explicitly says when to call this instead of cinii_get_record or cinii_search_libraries, and offers no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_get_recordA
Read-onlyIdempotent

Fetch a single CiNii record by URL or CRID. Returns the unified envelope (operation 'get_record').

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that it returns the unified envelope with operation 'get_record', which is mild context, but says nothing about error behavior for a bad CRID, unknown URLs, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource. The second sentence about the envelope is partly redundant given a full output schema exists, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with annotations and an output schema present, the description covers the essentials: what it fetches, the input formats accepted, and the return envelope. Only failure modes and CRID format details are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported as 0% for the single parameter, so the description must carry some weight; it does clarify that either a full URL or a CRID is accepted. However, it gives no format examples, no valid CRID pattern, and no guidance on the 2000-character limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a single CiNii record') and distinguishes itself from the search siblings by emphasizing a single record looked up by URL or CRID rather than a query. It does not name a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent infers this is the follow-up call after a search returns a record URL/CRID. There is no explicit statement of when to prefer it over re-searching, and no note about what to do if the lookup fails.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_allB
Read-onlyIdempotent

Cross-type search across all CiNii content. Returns the unified envelope.

The cross search mixes types. Each record's type is taken from its own dc:type (article, book, dataset, dissertation, project, researcher); a record without one is reported as 'article'.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, open-world behavior, so the description earns credit for disclosing something structured fields cannot: that records carry mixed types drawn from each record's own dc:type and that a missing dc:type is reported as 'article'. This is non-obvious, agent-relevant output behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose and the return shape, then the type caveat. No filler, though the second sentence ('The cross search mixes types') partly restates the first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the type-mapping note is a useful completion. However, for a broad multi-filter search with a notoriously silent-ignore sort parameter, the description gives no guidance on result ordering caveats or how the filters interact with the mixed types.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Reported schema description coverage is 0%, so the description carries the burden of compensating for undocumented parameters, and it adds nothing at all about sort codes, query, date ranges, data_source, or researcher_id. The nested schema does describe most of these fields in reality, but the description itself contributes no parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource: 'Cross-type search across all CiNii content', which implicitly distinguishes it from the type-specific siblings (cinii_search_articles, cinii_search_books, etc.). It does not name any sibling explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'cross-type' and 'all CiNii content' imply the tool is for broad queries where the type is unknown or mixed, but the description never says when to prefer it over the nine typed siblings, nor whether filters behave differently here. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_articlesA
Read-onlyIdempotent

Search CiNii Research for journal articles. Returns the unified envelope.

CiNii matches catalogued metadata and ANDs a multi-word query, so an un-indexed compound returns zero even when related work exists — a ZERO_CONJUNCTION diagnostic marks this; vary the rendering rather than concluding the literature is absent. A SCRIPT_LATIN_QUERY diagnostic means the query searched romanized metadata only. The same string may behave very differently on J-STAGE (full text). Foundational monographs sit in cinii_search_books, not the article index.

language filters by the language catalogued for the record (languageType): 'ja' for Japanese-language scholarship first, 'zh' or 'ko' for Chinese or Korean work indexed in CiNii.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, open-world, so the safety profile is free. The description earns its keep beyond that by disclosing that multi-word queries are ANDed, that un-indexed compounds silently return zero, that SCRIPT_LATIN_QUERY means romanized-metadata-only matching, and that results differ from J-STAGE full text — all real behavioral traps not visible in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in sentence one, and the diagnostic paragraph, though long, is dense with non-obvious failure modes rather than filler. Minor waste in "Returns the unified envelope," which is vague enough to add little without the output schema in hand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the tool-specific gotchas an agent would otherwise get wrong (false negatives, romanized-only matching, cross-database comparison). Only the response-language and paging parameters are left entirely to the schema, a small gap for a single-param wrapper.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although top-level coverage reads 0% (the single `params` object is undocumented), the nested schema documents most fields well, and the description adds meaning the schema does not carry: how `query` is matched (AND, romanization), and that `language` keys off catalogued languageType rather than query language. The `language` explanation partly repeats the schema's own field description, and `lang`/`count`/`start` behavior is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource ("Search CiNii Research for journal articles") and immediately scopes it against a sibling by stating "Foundational monographs sit in cinii_search_books, not the article index." An agent can tell this apart from the books and other typed-search siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditional guidance — a ZERO_CONJUNCTION diagnostic means vary the rendering rather than concluding the literature is absent, and the book alternative is named outright. It does not cover the other eight siblings (dissertations, data, all), so it stops short of a full routing rule set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_booksA
Read-onlyIdempotent

Search CiNii Research for books and monographs (NACSIS-CAT, NDL Search). Returns the unified envelope.

A book can be looked up by ncid or isbn without a query. To find which libraries hold it, pass its NCID to cinii_get_holdings.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds that the call returns "the unified envelope" and that identifier-only lookups are permitted, which is genuinely useful. It does not mention the sortorder codes that CiNii silently ignores, which is the main behavioral trap for this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the verb and resource, then the identifier shortcut and the follow-up routing. Tight overall; "Returns the unified envelope" is the only phrase that is a bit opaque without prior context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description needn't explain return values, and it correctly focuses on entry paths and the holdings hand-off. What it omits (pagination limits, sort-code pitfalls) is documented in the schema, so an agent can still call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Reported schema description coverage is 0%, but the description only clarifies two inputs (ncid, isbn) and says a query is optional alongside them. The other filters (sort, data_source, resource_type, from_year/to_year, has_fulltext) get no mention in the description, relying entirely on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search CiNii Research for books and monographs") and names the underlying collections (NACSIS-CAT, NDL Search). It distinguishes itself from search siblings by resource type, though it never explicitly contrasts with cinii_search_articles or cinii_search_all.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete alternate entry path ("A book can be looked up by `ncid` or `isbn` without a query") and explicit routing for the natural follow-up ("To find which libraries hold it, pass its NCID to cinii_get_holdings"). No exclusion rules are given against the other search_* tools, so it stops short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_dataA
Read-onlyIdempotent

Search CiNii Research for research data (datasets). Returns the unified envelope.

Covers data deposited through DataCite, JDCAT, IRDB, institutional data archives and, since 21 April 2026, research data recorded in KAKEN. Records are typed from their own dc:type, normally 'dataset'.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds provenance and the fact that records are typed from their own dc:type, but 'Returns the unified envelope' is unexplained and pagination/sort caveats are left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Verb and resource are front-loaded in the first clause, and the following sentences add real scope information rather than filler. The KAKEN date note is a slightly odd detail but is genuinely informative about coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output shape is covered by an output schema and safety by annotations, so the description's job is scope — which sources are indexed and how records are typed — and it does that. Nothing an agent needs in order to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description contributes nothing about the filters (data_source, dataset_format, has_fulltext, sort, paging), but the nested schema carries rich per-field descriptions for most of them, including the dataSourceType and datasetFormat mappings. With the schema doing the work, this sits at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search CiNii Research for research data (datasets)'), which is enough to separate it from the articles, books, dissertations and KAKEN siblings by resource type. It stops short of explicitly contrasting itself with cinii_search_all, which overlaps in coverage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied only: the reader can infer 'use this when you want datasets', and the source list (DataCite, JDCAT, IRDB, KAKEN) narrows expectations. There is no explicit when-not-to-use, and no statement about whether cinii_search_all also returns these records.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_dissertationsB
Read-onlyIdempotent

Search CiNii Research for doctoral dissertations. Returns the unified envelope.

award_institution and degree filter by the degree-granting university and the degree title as catalogued (博士(文学), 博士(教育学), …).

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds little beyond that: "Returns the unified envelope" signals a shared response shape (and an output schema exists), and "as catalogued" hints that degree filters are exact catalogue strings rather than fuzzy matches, which is genuinely useful. Rate limits, paging behavior, and empty-result behavior are unmentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded lines: purpose first, then response shape, then the two filter semantics. "Returns the unified envelope" is the weakest sentence because it names a concept the reader may not know, but nothing is bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool takes a 13-field nested parameter object and an output schema exists, so return values need no explanation. However, the description omits that `query` is optional when another criterion is supplied, and says nothing about sort validity scope or the start/count paging limits — all things that affect a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only touches two of the many nested fields (award_institution, degree), leaving query, author, sort, count, start, from_year/to_year, language, data_source and has_fulltext unaddressed. The example values (博士(文学), 博士(教育学)) are a real addition over the schema, but the coverage gap is too large for the description to compensate at the reported 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search CiNii Research for doctoral dissertations") and implicitly distinguishes itself from the other cinii_search_* siblings by resource type. It never names a sibling, so the differentiation relies on the reader inferring that dissertations != articles/books/data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the resource name; there is no statement of when to prefer this over cinii_search_all or cinii_search_articles, and no prerequisites or exclusions. Adequate for a single-resource search tool, but no active guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_kakenB
Read-onlyIdempotent

Search KAKEN (科研費) research projects. Returns the unified envelope (record_type 'project').

A project can be looked up by project_id (e.g. 18K00968) without a query.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds some value by naming the return shape ('unified envelope, record_type project'), but says nothing about pagination (start/count limits), empty-result behavior, or the sort-order validation quirks the schema hints at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose and followed by the return type and the lookup shortcut. Nothing is padded, though 'unified envelope' is project-specific jargon an outsider may not decode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described, and annotations cover safety. What remains thin is filter semantics for a 13-field input model and the lack of sibling routing; the description covers only the identifier shortcut.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The reported schema description coverage is 0% for the top-level parameter, and the description only elaborates on one of the inner fields (project_id, with an example). The other inner options — researcher, institution, from_year/to_year, data_source, lang — get no explanation in the description, so the agent is left working from bare field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Search KAKEN (科研費) research projects') and states the record type it returns. It does not, however, distinguish itself from the close sibling cinii_search_projects_and_products, which also returns projects — an agent must guess which to pick for a projects-only query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

One concrete usage path is given: 'A project can be looked up by project_id ... without a query'. That is genuinely useful and would be hard to infer. But there is no guidance on when to prefer this over cinii_search_projects_and_products or cinii_search_all, which is the main routing decision an agent faces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_librariesA
Read-onlyIdempotent

Find NACSIS-CAT member libraries by name (/opensearch/library, live since 30 March 2026). Returns the unified envelope (record_type 'library'); each item carries the library's NACSIS-CAT ID in extra.library_id, which cinii_get_holdings takes as library_id.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the description does not need to restate safety. It adds useful behavioral context: the live endpoint, the unified envelope with record_type 'library', and where the library ID appears.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with the core action front-loaded, followed by the useful integration detail. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations, input schema, and existing output schema, the description supplies the missing operational context: endpoint currency, envelope shape, and the key output field used by a sibling tool. Nothing needed to call it correctly appears absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema itself documents the name partial-match behavior, page parameter mapping, and sort semantics, so the description does not need to repeat them. The description adds cross-tool meaning for extra.library_id, but it does not add parameter usage details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: finding NACSIS-CAT member libraries by name. It also explicitly relates the tool to cinii_get_holdings via extra.library_id, helping distinguish it from generic search siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies use when looking up libraries by name and explains that the returned library ID is consumed by cinii_get_holdings. It does not explicitly say when not to use it versus other cinii_search_* tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_projects_and_productsB
Read-onlyIdempotent

Search KAKEN projects together with their research products (articles, books, data, dissertations) in one result set. Returns the unified envelope.

Useful with researcher_id to list a researcher's grants and outputs together. Records are typed from their own dc:type.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds that results come back as a 'unified envelope' and that records are typed from their own dc:type — genuinely useful, but the envelope's shape, pagination and the fact that unrelated record types share one result list are left implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short lines, front-loaded with the core purpose before the usage note. The trailing 'Records are typed from their own dc:type.' is a sentence fragment that reads as an afterthought, but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. Still, for a 15-parameter cross-entity search, the description omits pagination, sort scope interactions and what 'unified envelope' yields — an agent knows roughly what it gets but not how to navigate the results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level coverage is reported at 0%, so the description carries some burden, and it does highlight researcher_id as the key lever for this mode. However it says nothing about sort, count, start, language, data_source or has_fulltext, which are documented only in the nested schema; the description adds one useful hint but does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and a specific resource pairing ('Search KAKEN projects together with their research products ... in one result set'), which is more precise than the sibling cinii_search_kaken or cinii_search_articles alone. It does not name those siblings, leaving the agent to infer that this is the combined-search tool rather than being told so.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

One usage hint is given: 'Useful with researcher_id to list a researcher's grants and outputs together.' There is no statement of when to prefer this over cinii_search_kaken, cinii_search_articles, or cinii_search_all, and no exclusions, so the routing decision is only loosely guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cinii_search_researchersA
Read-onlyIdempotent

Search for researchers in CiNii. Returns the unified envelope (record_type 'researcher').

Note: researcher affiliation is not carried by the record schema; the researcher name occupies the title field and the profile URL the ids.url_ja field. Researcher sorts: NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC, PRODUCTS_DESC/PRODUCTS_ASC, NEWEST, RELEVANCE.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a read-only, idempotent, non-destructive, open-world search. The description adds useful non-obvious behavior: it returns the unified envelope with record_type 'researcher', and it warns that affiliation is absent from the record schema while the researcher name and profile URL appear in specific fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the purpose first, then gives the most important schema caveat and sort constraints. Every sentence adds information without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema and complete safety annotations, so the description need not explain return values in detail. It covers the key researcher-specific schema quirk and sort options, though it leaves usage alternatives and several nested input fields unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema description coverage is reported as 0%, so the description should compensate. It does clarify researcher-specific sort options (NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC, PRODUCTS_DESC/PRODUCTS_ASC, NEWEST, RELEVANCE), but it does not explain other search criteria such as query, institution, or researcher_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search for researchers in CiNii.' It also states the returned record_type is 'researcher', which clearly distinguishes it from sibling searches for books, articles, projects, libraries, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool searches but gives no explicit when-to-use guidance, prerequisites, or comparison with alternatives such as cinii_search_all or cinii_search_projects_and_products. Usage is only implied by the resource name.

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.

  1. 10 tool updatesv3.3.0
    • Addedcinii_get_holdings
    • Changedcinii_search_all14 fields changed
      • addedInput schema / $defs / CrossSearchInput / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records.",
        +  "title": "Data Source"
        +}
      • addedInput schema / $defs / CrossSearchInput / properties / has_fulltext
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "true: only records CiNii links to full text; false: only records it does not. Sent as hasLinkToFullText.",
        +  "title": "Has Fulltext"
        +}
      • addedInput schema / $defs / CrossSearchInput / properties / language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Language(s) of the records, as ISO 639-1 codes, comma-separated: 'ja', 'en', 'zh', 'ko', or 'ja,en'. Sent as languageType. Filters by the language catalogued for the record, not the language of the query.",
        +  "title": "Language"
        +}
      • addedInput schema / $defs / CrossSearchInput / properties / query / anyOf
        Added value: +[
        +  {
        +    "maxLength": 2000,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / CrossSearchInput / properties / query / default
        Added value: +null
      • addedInput schema / $defs / CrossSearchInput / properties / query / description
        Added value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
      • removedInput schema / $defs / CrossSearchInput / properties / query / maxLength
        Removed value: -2000
      • removedInput schema / $defs / CrossSearchInput / properties / query / minLength
        Removed value: -1
      • removedInput schema / $defs / CrossSearchInput / properties / query / type
        Removed value: -"string"
      • addedInput schema / $defs / CrossSearchInput / properties / researcher_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Researcher identifier(s), comma-separated: a KAKEN researcher number, an NRID, a CiNii author ID (DA…) or a researcher CRID. Sent as researcherId.",
        +  "title": "Researcher Id"
        +}
      • addedInput schema / $defs / CrossSearchInput / properties / sort
        Added value: +{
        +  "$ref": "#/$defs/SortOrder",
        +  "default": "4",
        +  "description": "Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
        +}
      • addedInput schema / $defs / CrossSearchInput / properties / start / maximum
        Added value: +10000
      • removedInput schema / $defs / CrossSearchInput / required
        Removed value: -[
        -  "query"
        -]
      • addedInput schema / $defs / SortOrder
        Added value: +{
        +  "description": "CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE.",
        +  "enum": [
        +    "0",
        +    "1",
        +    "4",
        +    "5",
        +    "6",
        +    "10",
        +    "20",
        +    "21",
        +    "30",
        +    "31",
        +    "40"
        +  ],
        +  "title": "SortOrder",
        +  "type": "string"
        +}
    • Changedcinii_search_articles17 fields changed
      • addedInput schema / $defs / ArticleSearchInput / properties / data_source / description
        Added value: +"Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records."
      • addedInput schema / $defs / ArticleSearchInput / properties / has_fulltext
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "true: only records CiNii links to full text; false: only records it does not. Sent as hasLinkToFullText.",
        +  "title": "Has Fulltext"
        +}
      • addedInput schema / $defs / ArticleSearchInput / properties / journal / description
        Added value: +"Journal title. Sent as publicationTitle."
      • addedInput schema / $defs / ArticleSearchInput / properties / language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Language(s) of the records, as ISO 639-1 codes, comma-separated: 'ja', 'en', 'zh', 'ko', or 'ja,en'. Sent as languageType. Filters by the language catalogued for the record, not the language of the query.",
        +  "title": "Language"
        +}
      • addedInput schema / $defs / ArticleSearchInput / properties / query / anyOf
        Added value: +[
        +  {
        +    "maxLength": 2000,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / ArticleSearchInput / properties / query / default
        Added value: +null
      • changedInput schema / $defs / ArticleSearchInput / properties / query / description
        Previous value: -"Search query (Japanese or English)"New value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
      • removedInput schema / $defs / ArticleSearchInput / properties / query / maxLength
        Removed value: -2000
      • removedInput schema / $defs / ArticleSearchInput / properties / query / minLength
        Removed value: -1
      • removedInput schema / $defs / ArticleSearchInput / properties / query / type
        Removed value: -"string"
      • addedInput schema / $defs / ArticleSearchInput / properties / researcher_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Researcher identifier(s), comma-separated: a KAKEN researcher number, an NRID, a CiNii author ID (DA…) or a researcher CRID. Sent as researcherId.",
        +  "title": "Researcher Id"
        +}
      • addedInput schema / $defs / ArticleSearchInput / properties / resource_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Resource type(s), comma-separated, as CiNii names them: e.g. 'journal article', 'departmental bulletin paper', 'conference paper', 'review article', 'book', 'Dataset'. Sent as resourceType.",
        +  "title": "Resource Type"
        +}
      • addedInput schema / $defs / ArticleSearchInput / properties / sort / description
        Added value: +"Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
      • addedInput schema / $defs / ArticleSearchInput / properties / start / maximum
        Added value: +10000
      • removedInput schema / $defs / ArticleSearchInput / required
        Removed value: -[
        -  "query"
        -]
      • addedInput schema / $defs / SortOrder / description
        Added value: +"CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE."
      • changedInput schema / $defs / SortOrder / enum
        Previous value: -[
        -  "0",
        -  "1",
        -  "4",
        -  "10"
        -]New value: +[
        +  "0",
        +  "1",
        +  "4",
        +  "5",
        +  "6",
        +  "10",
        +  "20",
        +  "21",
        +  "30",
        +  "31",
        +  "40"
        +]
    • Changedcinii_search_books18 fields changed
      • addedInput schema / $defs / BookSearchInput / properties / category
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Classification, comma-separated (e.g. an NDC number such as 379). Sent as category.",
        +  "title": "Category"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records.",
        +  "title": "Data Source"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / exact_title
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "true: match `title` exactly. Sent as isFullTitle.",
        +  "title": "Exact Title"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / has_fulltext
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "true: only records CiNii links to full text; false: only records it does not. Sent as hasLinkToFullText.",
        +  "title": "Has Fulltext"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Language(s) of the records, as ISO 639-1 codes, comma-separated: 'ja', 'en', 'zh', 'ko', or 'ja,en'. Sent as languageType. Filters by the language catalogued for the record, not the language of the query.",
        +  "title": "Language"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / ncid
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "NACSIS-CAT record ID(s), comma-separated (e.g. BC08431161).",
        +  "title": "Ncid"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / query / anyOf
        Added value: +[
        +  {
        +    "maxLength": 2000,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / BookSearchInput / properties / query / default
        Added value: +null
      • addedInput schema / $defs / BookSearchInput / properties / query / description
        Added value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
      • removedInput schema / $defs / BookSearchInput / properties / query / maxLength
        Removed value: -2000
      • removedInput schema / $defs / BookSearchInput / properties / query / minLength
        Removed value: -1
      • removedInput schema / $defs / BookSearchInput / properties / query / type
        Removed value: -"string"
      • addedInput schema / $defs / BookSearchInput / properties / researcher_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Researcher identifier(s), comma-separated: a KAKEN researcher number, an NRID, a CiNii author ID (DA…) or a researcher CRID. Sent as researcherId.",
        +  "title": "Researcher Id"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / resource_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Resource type(s), comma-separated, as CiNii names them: e.g. 'journal article', 'departmental bulletin paper', 'conference paper', 'review article', 'book', 'Dataset'. Sent as resourceType.",
        +  "title": "Resource Type"
        +}
      • addedInput schema / $defs / BookSearchInput / properties / sort
        Added value: +{
        +  "$ref": "#/$defs/SortOrder",
        +  "default": "4",
        +  "description": "Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
        +}
      • addedInput schema / $defs / BookSearchInput / properties / start / maximum
        Added value: +10000
      • removedInput schema / $defs / BookSearchInput / required
        Removed value: -[
        -  "query"
        -]
      • addedInput schema / $defs / SortOrder
        Added value: +{
        +  "description": "CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE.",
        +  "enum": [
        +    "0",
        +    "1",
        +    "4",
        +    "5",
        +    "6",
        +    "10",
        +    "20",
        +    "21",
        +    "30",
        +    "31",
        +    "40"
        +  ],
        +  "title": "SortOrder",
        +  "type": "string"
        +}
    • Addedcinii_search_data
    • Changedcinii_search_dissertations15 fields changed
      • addedInput schema / $defs / DissertationSearchInput / properties / award_institution
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Degree-granting university (e.g. 東京大学). Sent as awardInstitution.",
        +  "title": "Award Institution"
        +}
      • addedInput schema / $defs / DissertationSearchInput / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records.",
        +  "title": "Data Source"
        +}
      • addedInput schema / $defs / DissertationSearchInput / properties / degree
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Degree title as catalogued (e.g. 博士(教育学)). Sent as degree.",
        +  "title": "Degree"
        +}
      • addedInput schema / $defs / DissertationSearchInput / properties / has_fulltext
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "true: only records CiNii links to full text; false: only records it does not. Sent as hasLinkToFullText.",
        +  "title": "Has Fulltext"
        +}
      • addedInput schema / $defs / DissertationSearchInput / properties / language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Language(s) of the records, as ISO 639-1 codes, comma-separated: 'ja', 'en', 'zh', 'ko', or 'ja,en'. Sent as languageType. Filters by the language catalogued for the record, not the language of the query.",
        +  "title": "Language"
        +}
      • addedInput schema / $defs / DissertationSearchInput / properties / query / anyOf
        Added value: +[
        +  {
        +    "maxLength": 2000,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / DissertationSearchInput / properties / query / default
        Added value: +null
      • addedInput schema / $defs / DissertationSearchInput / properties / query / description
        Added value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
      • removedInput schema / $defs / DissertationSearchInput / properties / query / maxLength
        Removed value: -2000
      • removedInput schema / $defs / DissertationSearchInput / properties / query / minLength
        Removed value: -1
      • removedInput schema / $defs / DissertationSearchInput / properties / query / type
        Removed value: -"string"
      • addedInput schema / $defs / DissertationSearchInput / properties / sort
        Added value: +{
        +  "$ref": "#/$defs/SortOrder",
        +  "default": "4",
        +  "description": "Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
        +}
      • addedInput schema / $defs / DissertationSearchInput / properties / start / maximum
        Added value: +10000
      • removedInput schema / $defs / DissertationSearchInput / required
        Removed value: -[
        -  "query"
        -]
      • addedInput schema / $defs / SortOrder
        Added value: +{
        +  "description": "CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE.",
        +  "enum": [
        +    "0",
        +    "1",
        +    "4",
        +    "5",
        +    "6",
        +    "10",
        +    "20",
        +    "21",
        +    "30",
        +    "31",
        +    "40"
        +  ],
        +  "title": "SortOrder",
        +  "type": "string"
        +}
    • Changedcinii_search_kaken14 fields changed
      • addedInput schema / $defs / KakenSearchInput / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records.",
        +  "title": "Data Source"
        +}
      • addedInput schema / $defs / KakenSearchInput / properties / language
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Language(s) of the records, as ISO 639-1 codes, comma-separated: 'ja', 'en', 'zh', 'ko', or 'ja,en'. Sent as languageType. Filters by the language catalogued for the record, not the language of the query.",
        +  "title": "Language"
        +}
      • addedInput schema / $defs / KakenSearchInput / properties / project_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "KAKEN project or area number(s), comma-separated (e.g. 18K00968). Sent as projectId.",
        +  "title": "Project Id"
        +}
      • addedInput schema / $defs / KakenSearchInput / properties / query / anyOf
        Added value: +[
        +  {
        +    "maxLength": 2000,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / KakenSearchInput / properties / query / default
        Added value: +null
      • addedInput schema / $defs / KakenSearchInput / properties / query / description
        Added value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
      • removedInput schema / $defs / KakenSearchInput / properties / query / maxLength
        Removed value: -2000
      • removedInput schema / $defs / KakenSearchInput / properties / query / minLength
        Removed value: -1
      • removedInput schema / $defs / KakenSearchInput / properties / query / type
        Removed value: -"string"
      • addedInput schema / $defs / KakenSearchInput / properties / researcher_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Researcher identifier(s), comma-separated: a KAKEN researcher number, an NRID, a CiNii author ID (DA…) or a researcher CRID. Sent as researcherId.",
        +  "title": "Researcher Id"
        +}
      • addedInput schema / $defs / KakenSearchInput / properties / sort
        Added value: +{
        +  "$ref": "#/$defs/SortOrder",
        +  "default": "4",
        +  "description": "Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
        +}
      • addedInput schema / $defs / KakenSearchInput / properties / start / maximum
        Added value: +10000
      • removedInput schema / $defs / KakenSearchInput / required
        Removed value: -[
        -  "query"
        -]
      • addedInput schema / $defs / SortOrder
        Added value: +{
        +  "description": "CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE.",
        +  "enum": [
        +    "0",
        +    "1",
        +    "4",
        +    "5",
        +    "6",
        +    "10",
        +    "20",
        +    "21",
        +    "30",
        +    "31",
        +    "40"
        +  ],
        +  "title": "SortOrder",
        +  "type": "string"
        +}
    • Addedcinii_search_libraries
    • Addedcinii_search_projects_and_products
    • Changedcinii_search_researchers12 fields changed
      • addedInput schema / $defs / ResearcherSearchInput / properties / data_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records.",
        +  "title": "Data Source"
        +}
      • addedInput schema / $defs / ResearcherSearchInput / properties / query / anyOf
        Added value: +[
        +  {
        +    "maxLength": 2000,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / ResearcherSearchInput / properties / query / default
        Added value: +null
      • addedInput schema / $defs / ResearcherSearchInput / properties / query / description
        Added value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
      • removedInput schema / $defs / ResearcherSearchInput / properties / query / maxLength
        Removed value: -2000
      • removedInput schema / $defs / ResearcherSearchInput / properties / query / minLength
        Removed value: -1
      • removedInput schema / $defs / ResearcherSearchInput / properties / query / type
        Removed value: -"string"
      • addedInput schema / $defs / ResearcherSearchInput / properties / researcher_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Researcher identifier(s), comma-separated: a KAKEN researcher number, an NRID, a CiNii author ID (DA…) or a researcher CRID. Sent as researcherId.",
        +  "title": "Researcher Id"
        +}
      • addedInput schema / $defs / ResearcherSearchInput / properties / sort
        Added value: +{
        +  "$ref": "#/$defs/SortOrder",
        +  "default": "4",
        +  "description": "Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
        +}
      • addedInput schema / $defs / ResearcherSearchInput / properties / start / maximum
        Added value: +10000
      • removedInput schema / $defs / ResearcherSearchInput / required
        Removed value: -[
        -  "query"
        -]
      • addedInput schema / $defs / SortOrder
        Added value: +{
        +  "description": "CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE.",
        +  "enum": [
        +    "0",
        +    "1",
        +    "4",
        +    "5",
        +    "6",
        +    "10",
        +    "20",
        +    "21",
        +    "30",
        +    "31",
        +    "40"
        +  ],
        +  "title": "SortOrder",
        +  "type": "string"
        +}
  2. 7 tool updatesv3.2.0
    • Changedcinii_get_record1 field changed
      • addedInput schema / $defs / RecordLookupInput / properties / record_url / maxLength
        Added value: +2000
    • Changedcinii_search_all1 field changed
      • addedInput schema / $defs / CrossSearchInput / properties / query / maxLength
        Added value: +2000
    • Changedcinii_search_articles5 fields changed
      • changedInput schema / $defs / ArticleSearchInput / properties / author / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / ArticleSearchInput / properties / data_source / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / ArticleSearchInput / properties / journal / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / ArticleSearchInput / properties / query / maxLength
        Added value: +2000
      • changedInput schema / $defs / ArticleSearchInput / properties / title / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcinii_search_books5 fields changed
      • changedInput schema / $defs / BookSearchInput / properties / author / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / BookSearchInput / properties / isbn / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / BookSearchInput / properties / publisher / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / BookSearchInput / properties / query / maxLength
        Added value: +2000
      • changedInput schema / $defs / BookSearchInput / properties / title / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcinii_search_dissertations2 fields changed
      • changedInput schema / $defs / DissertationSearchInput / properties / author / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / DissertationSearchInput / properties / query / maxLength
        Added value: +2000
    • Changedcinii_search_kaken3 fields changed
      • changedInput schema / $defs / KakenSearchInput / properties / institution / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / KakenSearchInput / properties / query / maxLength
        Added value: +2000
      • changedInput schema / $defs / KakenSearchInput / properties / researcher / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcinii_search_researchers2 fields changed
      • changedInput schema / $defs / ResearcherSearchInput / properties / institution / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / ResearcherSearchInput / properties / query / maxLength
        Added value: +2000
  3. 7 tool updatesv3.0.0
    • First observedcinii_get_record
    • First observedcinii_search_all
    • First observedcinii_search_articles
    • First observedcinii_search_books
    • First observedcinii_search_dissertations
    • First observedcinii_search_kaken
    • First observedcinii_search_researchers

TDQS

A3.8/5.0

Scored across 11 tools

Disambiguation4/5

Tools are partitioned mostly by record type (books, articles, dissertations, data, kaken, researchers, libraries, holdings), which gives clear primary boundaries. The main overlap is between cinii_search_all, cinii_search_kaken, and cinii_search_projects_and_products, which all return mixed/project records and require reading descriptions to choose correctly; well-written descriptions mitigate this rather than eliminate it.

Naming Consistency5/5

Every tool follows the same cinii_<verb>_<noun> snake_case pattern: search_books, search_articles, get_holdings, get_record, etc. Verbs are used consistently (search_ for queries, get_ for single-resource fetches), so the convention is fully predictable.

Tool Count5/5

Eleven tools map cleanly onto the distinct CiNii content types plus the two NACSIS-CAT auxiliary operations (holdings, libraries) and a single-record fetch. Each tool has a recognizable domain slice and none appear redundant enough to remove.

Completeness4/5

The surface covers search across all major record types, single-record retrieval by CRID/URL, ISBN/NCID lookup, library lookup, and holdings — a coherent discovery lifecycle. Minor gaps exist (no citation/export or bulk record retrieval, no explicit researcher-by-ID fetch aside from search), but agents can work around these.

Maintenance

ActivityActive
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An MCP server for Japanese literature research that provides unified search across NDL, CiNii, J-STAGE, and other Japanese academic databases, with Skills to assist in search planning and result evaluation.
    30
    502 npm
    8
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    Enables searching and retrieving academic articles from CiNii, Japan's largest bibliographic database, with support for advanced filtering, sorting, and search range options.
    1
    1
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables searching CiNii Research for academic articles, books, grants, and research data, and retrieving metadata for individual items.
    2
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables LLMs and compatible clients to search academic papers, retrieve detailed metadata and abstracts, access full-text content when available, and perform topic searches with optional date filters via MCP tools.
    -