cinii-mcp
cinii-mcp
일본의 국가 학술 데이터베이스인 CiNii Research API — 정보학 연구소(NII)가 운영 — 를 Claude Desktop 및 기타 MCP 클라이언트에서 사용할 수 있는 일곱 가지 도구로 노출하는 FastMCP stdio 서버입니다.
CiNii Research는 KAKEN, CiNii Articles, CiNii Books, IRDB, Crossref, DataCite, PubMed, NDL Search의 메타데이터를 집계합니다. 이를 위한 확립된 오픈 MCP 도구가 없으므로, 이 서버는 일본어 학술 자료를 검색하는 연구자들을 위해 그 공백을 메웁니다.
이 서버의 용도
CiNii Research는 다섯 종류의 레코드에 걸쳐 일본 학술 자료를 색인하며, 이 서버는 그 모두를 Claude 대화 안에 담습니다. 즉 학술지 논문, 도서 및 단행본, 박사 학위 논문, KAKEN 연구비 과제, 연구자 프로필, 그리고 CRID에 의한 단일 레코드 조회까지 포함됩니다. 영어로 질문하면 일본어 학술 자료가 반환되며, 실제로 전송된 일본어 용어가 결과 옆에 표시됩니다.
KAKEN은 별도의 관심을 기울일 만합니다. KAKEN은 연구비를 받은 것을 기록하므로, 진행 중인 과제, 형성 중인 공동 연구, 그리고 출판되기 전에 보조금 보고서에 도달한 연구를 드러냅니다.
모든 결과에는 전송된 용어, 해당 용어의 문자 체계, CiNii가 이를 어떻게 매칭했는지, 그리고 쿼리를 고정하는 영수증이 포함됩니다. 따라서 각주 뒤에 있는 검색은 이름을 붙이고, 인용하고, 다른 사람이 다시 실행할 수 있습니다.
Related MCP server: CiNii MCP Server
도구
Tool | Purpose |
| 학술지 논문 (JALC, Crossref, PubMed, IRDB) |
| 도서 및 단행본 (NACSIS-CAT, NDL Search) |
| 일본 대학의 박사 학위 논문 |
| KAKEN(科研費) 연구비 지원 과제 |
| 모든 콘텐츠 유형에 걸친 유형 간 검색 |
| 연구자 프로필 및 소속 |
| URL 또는 CRID로 단일 레코드 조회 |
결과는 CiNii Research OpenSearch v2 API에서 JSON-LD로 제공되며, 하나의 타입 있는 JSON 응답 엔벨로프로 반환됩니다 — 아래의 응답 형식을 참조하세요. (v2.0.1 이전 릴리스는 서식이 지정된 마크다운 텍스트를 반환했습니다. 이는 포맷팅 선호도가 아니라 호환성을 깨뜨리는 변경입니다.)
응답 형식
모든 도구는 mediation.py가 만들고 response-schema.json에 정의된 하나의 JSON 응답 엔벨로프를 반환합니다. 스키마 버전 2.3.0. 동일한 모듈과 스키마가 서버 계열 전체에 바이트 단위로 동일하게 벤더링되므로, 한 서버의 엔벨로프는 다른 서버용으로 작성된 소비자가 읽을 수 있습니다.
엔벨로프는 무엇을 찾았는지뿐만 아니라 검색이 어떻게 수행되었는지도 보고합니다.
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— 모든 응답에 포함되는 필수 저작자 표시 줄입니다.
진단 코드
타입이 지정되어 있고 폐쇄적입니다. 진단은 클라이언트가 파싱해야 하는 문장이 아닙니다.
Code | Level | Meaning |
| info | 레코드가 반환됨. 지적할 사항 없음. |
| warning | 레코드 없음. CiNii는 카탈로그화된 메타데이터를 매칭하고 여러 단어로 된 쿼리를 AND로 결합하므로, 색인되지 않은 복합어는 관련 연구가 존재하더라도 0건을 반환합니다. 문헌이 없다고 결론 내리기 전에 렌더링을 바꿔 보십시오. |
| warning | 쿼리가 라틴 문자였으므로 로마자 표기 및 영어 메타데이터에만 매칭되었습니다. 일본어 문자 형태는 더 크고 다른 말뭉치에 도달합니다. |
| error | API가 응답했지만 오류로 응답했습니다. |
| error | 요청이 완료되지 않았습니다. 실패한 검색은 결과를 알 수 없으며 결코 부재로 기록되어서는 안 되기 때문에 |
| info | 영수증 대상이 구성되지 않았기 때문에 응답이 쿼리 원장에 기록되지 않았습니다. 검색에는 영향이 없습니다. 이에 대한 영수증은 남지 않습니다. |
| warning | 영수증 대상이 설정되어 있고 쓰기가 시도되었지만 이루어지지 않았습니다. 하나는 선택이고 다른 하나는 오류이므로 위 항목과 구별됩니다. |
쿼리 영수증
모든 엔벨로프는 ledger.py에 의해 추가 전용(append-only), 해시 체인 방식의 JSONL 로그에 기록될 수 있습니다. 이 기능은 MCP_RECEIPT_DIR(또는 구버전 MCP_RECEIPT_LOG)이 설정되지 않으면 꺼져 있으며, 로깅 실패는 예외로 던져지지 않고 삼켜집니다 — 검색이 그 기록보다 중요하기 때문입니다. 비밀 값은 한 줄이 구성되기 전에 삭제됩니다.
스키마 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.jsonverify는 실패 시 0이 아닌 종료 코드로 종료하고 발견한 종류를 알려줍니다. 포크(동시 작성자 — 구성 오류이며 모든 줄은 여전히 존재함), 누락된 줄, 순서 변경, 또는 변조(자신의 내용에 대해 해시되지 않는 줄)입니다. 오직 마지막만 정직성에 대한 주장이며, 그것들을 동일하게 보고하면 독자가 서로 혼동하게 될 수 있습니다. 인용 대상은 매니페스트입니다. 즉 전체 기록에 대한 하나의 설명 — 파일별 줄 수, 첫 번째와 마지막 타임스탬프, 최종 해시, 그리고 서버·문자 체계·세션별 결합 합계입니다.
사전 요구 사항
PATH에 있는 Python 3.10 이상.
CiNii Web API 애플리케이션 ID(
appid) — 무료이며 필수입니다.
애플리케이션 ID 받기
CiNii Research API는 등록된 애플리케이션 ID를 요구하며, 모든 요청에 매개변수로 전송해야 합니다.
CiNii Web API Developer Registration 페이지에서 등록하고 애플리케이션 ID를 받으십시오.
NII의 API 규정, 즉 학술 콘텐츠 서비스 이용 규정, CiNii Research 이용 상세 규정, 학술 콘텐츠 서비스 웹 API 이용 상세 규정에 동의하십시오.
상업적 사용의 경우 신청 전에
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이름을 붙인 하위 집합은 무엇이든 하나의 영수증 폴더를 대상으로 한 번만 요청되어 등록됩니다. 이 스크립트는 네트워크보다는 같은 위치의 체크아웃(sibling checkout)을 선호하고, 다시 묻지 않고 이미 등록된 자격 증명을 이전하며, 요청받지 않은 서버는 그대로 두고, 이미 등록된 서버들이 폴더나 세션 슬러그에 대해 의견이 다른 경우 추측하지 않고 멈춥니다. 또한 설치한 모든 항목에서 ledger.py와 mediation.py가 바이트 단위로 동일한지 확인하므로, 두 엔벨로프 버전이 하나의 환경에 눈에 띄지 않게 들어갈 수 없습니다.
구성
서버는 CINII_APPID 환경 변수에서 애플리케이션 ID를 읽습니다. 예제 파일을 복사하여 값을 입력하십시오(실제 값을 커밋하지 마십시오):
cp .env.example .envCINII_APPID=your_application_id_hereClaude 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의 약관에 따라 관리됩니다.
면책 조항
연구용 도구로, 가능한 최선을 다해 유지 관리되며 보증 없이 "있는 그대로" 제공됩니다. National Institute of Informatics와 제휴하거나 보증되지 않습니다.
저자
Dr Christopher Gerteis, SOAS University of London. 데이터 제공: CiNii Research, National Institute of Informatics.
Available Tools
11 toolscinii_get_holdingsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_recordARead-onlyIdempotent
Fetch a single CiNii record by URL or CRID. Returns the unified envelope (operation 'get_record').
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_allBRead-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'.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_articlesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_booksARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_dataARead-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'.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_dissertationsBRead-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 (博士(文学), 博士(教育学), …).
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_kakenBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_librariesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_productsBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_researchersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v3.3.0- Added
cinii_get_holdings - Changed
cinii_search_all14 fields changed- added
Input schema / $defs / CrossSearchInput / properties / data_sourceAdded 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" +} - added
Input schema / $defs / CrossSearchInput / properties / has_fulltextAdded 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" +} - added
Input schema / $defs / CrossSearchInput / properties / languageAdded 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" +} - added
Input schema / $defs / CrossSearchInput / properties / query / anyOfAdded value: +[ + { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / CrossSearchInput / properties / query / defaultAdded value: +null - added
Input schema / $defs / CrossSearchInput / properties / query / descriptionAdded value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given." - removed
Input schema / $defs / CrossSearchInput / properties / query / maxLengthRemoved value: -2000 - removed
Input schema / $defs / CrossSearchInput / properties / query / minLengthRemoved value: -1 - removed
Input schema / $defs / CrossSearchInput / properties / query / typeRemoved value: -"string" - added
Input schema / $defs / CrossSearchInput / properties / researcher_idAdded 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" +} - added
Input schema / $defs / CrossSearchInput / properties / sortAdded 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)." +} - added
Input schema / $defs / CrossSearchInput / properties / start / maximumAdded value: +10000 - removed
Input schema / $defs / CrossSearchInput / requiredRemoved value: -[ - "query" -] - added
Input schema / $defs / SortOrderAdded 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" +}
- Changed
cinii_search_articles17 fields changed- added
Input schema / $defs / ArticleSearchInput / properties / data_source / descriptionAdded 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." - added
Input schema / $defs / ArticleSearchInput / properties / has_fulltextAdded 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" +} - added
Input schema / $defs / ArticleSearchInput / properties / journal / descriptionAdded value: +"Journal title. Sent as publicationTitle." - added
Input schema / $defs / ArticleSearchInput / properties / languageAdded 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" +} - added
Input schema / $defs / ArticleSearchInput / properties / query / anyOfAdded value: +[ + { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / ArticleSearchInput / properties / query / defaultAdded value: +null - changed
Input schema / $defs / ArticleSearchInput / properties / query / descriptionPrevious 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." - removed
Input schema / $defs / ArticleSearchInput / properties / query / maxLengthRemoved value: -2000 - removed
Input schema / $defs / ArticleSearchInput / properties / query / minLengthRemoved value: -1 - removed
Input schema / $defs / ArticleSearchInput / properties / query / typeRemoved value: -"string" - added
Input schema / $defs / ArticleSearchInput / properties / researcher_idAdded 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" +} - added
Input schema / $defs / ArticleSearchInput / properties / resource_typeAdded 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" +} - added
Input schema / $defs / ArticleSearchInput / properties / sort / descriptionAdded 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)." - added
Input schema / $defs / ArticleSearchInput / properties / start / maximumAdded value: +10000 - removed
Input schema / $defs / ArticleSearchInput / requiredRemoved value: -[ - "query" -] - added
Input schema / $defs / SortOrder / descriptionAdded 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." - changed
Input schema / $defs / SortOrder / enumPrevious value: -[ - "0", - "1", - "4", - "10" -]New value: +[ + "0", + "1", + "4", + "5", + "6", + "10", + "20", + "21", + "30", + "31", + "40" +]
- Changed
cinii_search_books18 fields changed- added
Input schema / $defs / BookSearchInput / properties / categoryAdded 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" +} - added
Input schema / $defs / BookSearchInput / properties / data_sourceAdded 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" +} - added
Input schema / $defs / BookSearchInput / properties / exact_titleAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "true: match `title` exactly. Sent as isFullTitle.", + "title": "Exact Title" +} - added
Input schema / $defs / BookSearchInput / properties / has_fulltextAdded 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" +} - added
Input schema / $defs / BookSearchInput / properties / languageAdded 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" +} - added
Input schema / $defs / BookSearchInput / properties / ncidAdded value: +{ + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "NACSIS-CAT record ID(s), comma-separated (e.g. BC08431161).", + "title": "Ncid" +} - added
Input schema / $defs / BookSearchInput / properties / query / anyOfAdded value: +[ + { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / BookSearchInput / properties / query / defaultAdded value: +null - added
Input schema / $defs / BookSearchInput / properties / query / descriptionAdded value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given." - removed
Input schema / $defs / BookSearchInput / properties / query / maxLengthRemoved value: -2000 - removed
Input schema / $defs / BookSearchInput / properties / query / minLengthRemoved value: -1 - removed
Input schema / $defs / BookSearchInput / properties / query / typeRemoved value: -"string" - added
Input schema / $defs / BookSearchInput / properties / researcher_idAdded 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" +} - added
Input schema / $defs / BookSearchInput / properties / resource_typeAdded 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" +} - added
Input schema / $defs / BookSearchInput / properties / sortAdded 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)." +} - added
Input schema / $defs / BookSearchInput / properties / start / maximumAdded value: +10000 - removed
Input schema / $defs / BookSearchInput / requiredRemoved value: -[ - "query" -] - added
Input schema / $defs / SortOrderAdded 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" +}
- Added
cinii_search_data - Changed
cinii_search_dissertations15 fields changed- added
Input schema / $defs / DissertationSearchInput / properties / award_institutionAdded value: +{ + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Degree-granting university (e.g. 東京大学). Sent as awardInstitution.", + "title": "Award Institution" +} - added
Input schema / $defs / DissertationSearchInput / properties / data_sourceAdded 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" +} - added
Input schema / $defs / DissertationSearchInput / properties / degreeAdded value: +{ + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Degree title as catalogued (e.g. 博士(教育学)). Sent as degree.", + "title": "Degree" +} - added
Input schema / $defs / DissertationSearchInput / properties / has_fulltextAdded 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" +} - added
Input schema / $defs / DissertationSearchInput / properties / languageAdded 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" +} - added
Input schema / $defs / DissertationSearchInput / properties / query / anyOfAdded value: +[ + { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / DissertationSearchInput / properties / query / defaultAdded value: +null - added
Input schema / $defs / DissertationSearchInput / properties / query / descriptionAdded value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given." - removed
Input schema / $defs / DissertationSearchInput / properties / query / maxLengthRemoved value: -2000 - removed
Input schema / $defs / DissertationSearchInput / properties / query / minLengthRemoved value: -1 - removed
Input schema / $defs / DissertationSearchInput / properties / query / typeRemoved value: -"string" - added
Input schema / $defs / DissertationSearchInput / properties / sortAdded 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)." +} - added
Input schema / $defs / DissertationSearchInput / properties / start / maximumAdded value: +10000 - removed
Input schema / $defs / DissertationSearchInput / requiredRemoved value: -[ - "query" -] - added
Input schema / $defs / SortOrderAdded 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" +}
- Changed
cinii_search_kaken14 fields changed- added
Input schema / $defs / KakenSearchInput / properties / data_sourceAdded 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" +} - added
Input schema / $defs / KakenSearchInput / properties / languageAdded 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" +} - added
Input schema / $defs / KakenSearchInput / properties / project_idAdded 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" +} - added
Input schema / $defs / KakenSearchInput / properties / query / anyOfAdded value: +[ + { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / KakenSearchInput / properties / query / defaultAdded value: +null - added
Input schema / $defs / KakenSearchInput / properties / query / descriptionAdded value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given." - removed
Input schema / $defs / KakenSearchInput / properties / query / maxLengthRemoved value: -2000 - removed
Input schema / $defs / KakenSearchInput / properties / query / minLengthRemoved value: -1 - removed
Input schema / $defs / KakenSearchInput / properties / query / typeRemoved value: -"string" - added
Input schema / $defs / KakenSearchInput / properties / researcher_idAdded 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" +} - added
Input schema / $defs / KakenSearchInput / properties / sortAdded 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)." +} - added
Input schema / $defs / KakenSearchInput / properties / start / maximumAdded value: +10000 - removed
Input schema / $defs / KakenSearchInput / requiredRemoved value: -[ - "query" -] - added
Input schema / $defs / SortOrderAdded 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" +}
- Added
cinii_search_libraries - Added
cinii_search_projects_and_products - Changed
cinii_search_researchers12 fields changed- added
Input schema / $defs / ResearcherSearchInput / properties / data_sourceAdded 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" +} - added
Input schema / $defs / ResearcherSearchInput / properties / query / anyOfAdded value: +[ + { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / ResearcherSearchInput / properties / query / defaultAdded value: +null - added
Input schema / $defs / ResearcherSearchInput / properties / query / descriptionAdded value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given." - removed
Input schema / $defs / ResearcherSearchInput / properties / query / maxLengthRemoved value: -2000 - removed
Input schema / $defs / ResearcherSearchInput / properties / query / minLengthRemoved value: -1 - removed
Input schema / $defs / ResearcherSearchInput / properties / query / typeRemoved value: -"string" - added
Input schema / $defs / ResearcherSearchInput / properties / researcher_idAdded 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" +} - added
Input schema / $defs / ResearcherSearchInput / properties / sortAdded 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)." +} - added
Input schema / $defs / ResearcherSearchInput / properties / start / maximumAdded value: +10000 - removed
Input schema / $defs / ResearcherSearchInput / requiredRemoved value: -[ - "query" -] - added
Input schema / $defs / SortOrderAdded 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" +}
7 tool updates
v3.2.0- Changed
cinii_get_record1 field changed- added
Input schema / $defs / RecordLookupInput / properties / record_url / maxLengthAdded value: +2000
- Changed
cinii_search_all1 field changed- added
Input schema / $defs / CrossSearchInput / properties / query / maxLengthAdded value: +2000
- Changed
cinii_search_articles5 fields changed- changed
Input schema / $defs / ArticleSearchInput / properties / author / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / $defs / ArticleSearchInput / properties / data_source / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / $defs / ArticleSearchInput / properties / journal / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / ArticleSearchInput / properties / query / maxLengthAdded value: +2000 - changed
Input schema / $defs / ArticleSearchInput / properties / title / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +]
- Changed
cinii_search_books5 fields changed- changed
Input schema / $defs / BookSearchInput / properties / author / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / $defs / BookSearchInput / properties / isbn / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / $defs / BookSearchInput / properties / publisher / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / BookSearchInput / properties / query / maxLengthAdded value: +2000 - changed
Input schema / $defs / BookSearchInput / properties / title / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +]
- Changed
cinii_search_dissertations2 fields changed- changed
Input schema / $defs / DissertationSearchInput / properties / author / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / DissertationSearchInput / properties / query / maxLengthAdded value: +2000
- Changed
cinii_search_kaken3 fields changed- changed
Input schema / $defs / KakenSearchInput / properties / institution / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / KakenSearchInput / properties / query / maxLengthAdded value: +2000 - changed
Input schema / $defs / KakenSearchInput / properties / researcher / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +]
- Changed
cinii_search_researchers2 fields changed- changed
Input schema / $defs / ResearcherSearchInput / properties / institution / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / $defs / ResearcherSearchInput / properties / query / maxLengthAdded value: +2000
7 tool updates
v3.0.0- First observed
cinii_get_record - First observed
cinii_search_all - First observed
cinii_search_articles - First observed
cinii_search_books - First observed
cinii_search_dissertations - First observed
cinii_search_kaken - First observed
cinii_search_researchers
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Search and read the aicoolies catalog of AI and developer tools via a remote MCP knowledge graph.
Related MCP Servers
- AlicenseAqualityAmaintenanceAn 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.3030 npm8MIT
- AlicenseCqualityCmaintenanceEnables searching and retrieving academic articles from CiNii, Japan's largest bibliographic database, with support for advanced filtering, sorting, and search range options.11Apache 2.0
- AlicenseAqualityDmaintenanceEnables searching CiNii Research for academic articles, books, grants, and research data, and retrieving metadata for individual items.2MIT
- FlicenseNot gradedqualityAmaintenanceEnables 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.-