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: article-mcp
도구
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
7 toolscinii_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 readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, covering the safety profile. The description adds value by stating the return envelope format (operation 'get_record'), which is not in annotations. No contradiction; it contextually enriches what the tool returns.
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 crisp sentences: the first states the action and input, the second the expected output. Front-loaded with the core purpose and no filler. Every word earns its place.
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 single-record fetch with a straightforward input and an output schema provided, the description covers the essential behavior. It mentions the envelope and the operation. The only omission is potential error handling or edge cases, but given the output schema and annotations, it is sufficiently complete for an agent to use 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?
Schema description coverage is 0% because the tool description does not discuss parameters. The single parameter 'record_url' is described in the schema as 'Full CiNii URL or CRID', but the description does not compensate for the low coverage. It adds nothing beyond the schema, so the agent must rely solely on the schema's minimal description.
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 ('Fetch'), a resource ('single CiNii record'), and the two identifier forms ('by URL or CRID'), which clearly distinguishes it from the sibling search tools (cinii_search_*). It also notes the return envelope with operation 'get_record', making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: you need a specific URL or CRID, which differentiates it from the search siblings. However, it does not explicitly say 'use this when you have an identifier' nor name the alternatives. The context of siblings makes it clear enough, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinii_search_allARead-onlyIdempotent
Cross-type search across all CiNii content. Returns the unified envelope.
Records are emitted with record_type 'article' as a default; the cross search mixes types and CiNii does not always disambiguate them in the OpenSearch response.
| 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?
The description adds meaningful behavioral detail beyond the annotations: records default to record_type 'article', mixed types are not always disambiguated, and a unified envelope is returned. This is exactly the kind of caveat an agent needs before relying on the output.
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: purpose first, then output envelope, then the critical record_type caveat. Every sentence earns its place with no 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 output schema and annotations cover return shape and safety, and the description covers the important cross-type ambiguity. Parameter semantics are missing from the description, but the schema's property names, defaults, and constraints make invocation reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain query, lang, count, start, from_year, or to_year. With no parameter guidance in the description, it fails to compensate for the low schema 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?
The description clearly identifies a specific operation: cross-type search across all CiNii content. 'All CiNii content' distinguishes this from the type-specific sibling tools without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this for cross-type/all-content searching. It does not explicitly name alternatives or state when not to use it, but the scope is sufficiently explicit.
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.
| 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, openWorldHint, idempotentHint, and destructiveHint false, covering safety. The description adds substantial behavioral detail: it explains the ANDing of multi-word queries, the ZERO_CONJUNCTION diagnostic suggesting the query may be unindexed, the SCRIPT_LATIN_QUERY diagnostic for romanized-only searches, and the difference from J-STAGE full-text searching. This goes well beyond the annotations and gives the agent critical insights for interpreting results correctly.
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 short paragraphs. The first sentence states the purpose and return envelope. The second paragraph packs three sentences of useful caveats. It is front-loaded with the core purpose and each subsequent sentence earns its place by clarifying search behavior or pointing to the right sibling tool. There is no fluff or repetition, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential behavioral quirks that could lead an agent astray (zero results, romanized search, J-STAGE differences) and routes monographs to the correct tool. It does not explain the 'unified envelope' return format, but an output schema exists so that is acceptable. It also does not detail pagination or sorting semantics, but those are likely standard and inferable from the schema. The description is sufficient for effective use given the existing schema and annotations.
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 schema has a description for the 'query' parameter, but the overall schema coverage is low (0% per signals, though query has a description). The description compensates by explaining how the query is interpreted (ANDs multi-word queries, may hit romanized metadata), which directly affects how to construct the query. It does not explain other parameters like sort, count, or filters, but those are standard and have defaults. Given the low coverage, the description adds meaningful semantic value for the most critical parameter, so a 4 is warranted.
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 'Search CiNii Research for journal articles' — a specific verb and resource, clearly distinguishing it from the other CiNii tools. It also explicitly notes that monographs belong in cinii_search_books, reinforcing the boundary to sibling tools. This is unambiguous and immediately tells an agent what the tool does and what it does not cover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use context: it tells the agent that the article index is for journal articles and that monographs should be searched in cinii_search_books. It also warns about behavioral differences from J-STAGE, which helps the agent decide if this is the right search. However, it does not explicitly name all alternatives (e.g., cinii_search_all) nor provide a comprehensive when-not-to-use list, so it slightly lacks in guiding against other nearby tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinii_search_booksCRead-onlyIdempotent
Search CiNii Research for books and monographs. Returns the unified envelope.
| 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 provide safety information (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds only the phrase 'Returns the unified envelope', which hints at the output format but is redundant given the output schema exists. It does not add behavioral context such as pagination limits, potential delays, or any special handling. Since annotations are present, the bar is lower, but the description still contributes almost nothing beyond 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?
The description is a single, compact sentence that is easy to read. It is appropriately sized for a simple search tool, but it is overly sparse — it does not elaborate on scope or usage. It is concise without being informative, so it earns a middle score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a rich schema with 10 parameters and is part of a family of similar search tools, the description is insufficient. It does not mention which parameters to use for common scenarios, does not clarify the 'unified envelope' output structure beyond the schema, and omits any guidance on how this tool differs from its siblings. The presence of an output schema covers return format but not usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the description does not explain any of the parameters (query, isbn, title, author, etc.). While some parameter names are self-explanatory, the description offers no guidance on how they interact or which are mutually exclusive. With low coverage, the description must compensate, but it does not, leaving the agent to rely on the schema alone.
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 ('Search') and a clear resource ('CiNii Research for books and monographs'). It implicitly differentiates from sibling search tools by specifying 'books and monographs', which is distinct from articles, dissertations, and researchers. However, it does not explicitly name a sibling or contrast them, so a 4 is appropriate rather than 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?
There is no guidance on when to use this tool versus alternatives. The description does not mention that this is the tool for book/monograph searches or that other tools are for different document types. No prerequisites, exclusions, or alternative tools are referenced, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinii_search_dissertationsCRead-onlyIdempotent
Search CiNii Research for doctoral dissertations. Returns the unified envelope.
| 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 convey readOnly, openWorld, idempotent, and non-destructive behavior, so the description need not repeat those. However, the only additional behavioral information, 'Returns the unified envelope,' is cryptic and unexplained, leaving the agent unsure about the actual output structure. This adds little transparent value.
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 very short (a single sentence), so it is concise in word count, but that brevity comes at the cost of essential detail. It lacks any structure (e.g., bullets, sections) to organize information, and the sentence itself is too terse to be complete.
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?
Despite having an output schema and a 7-field nested input schema, the description provides almost no context. It does not explain how to form queries, what the 'unified envelope' contains, or how filters work. An agent cannot confidently call this tool without additional documentation, making it severely inadequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has the full burden of explaining parameters. It mentions none of the seven parameters (lang, count, query, start, author, to_year, from_year) nor their meaning. The agent must rely solely on field titles and defaults, which is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search'), the resource ('CiNii Research'), and the specific scope ('doctoral dissertations'). It inherently distinguishes itself from sibling tools that target articles, books, researchers, etc., through the explicit mention of dissertations.
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?
No guidance is given on when to use this tool versus the alternative search tools (e.g., cinii_search_all, cinii_search_articles). The use case is only implied by the tool name and scope, with no explicit 'use this when' or 'for other content types use...' instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinii_search_kakenARead-onlyIdempotent
Search KAKEN (科研費) research projects. Returns the unified envelope (record_type 'project').
| 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, openWorldHint, idempotentHint, and destructiveHint, covering safety and side-effect expectations. The description adds that it returns the unified envelope with record_type 'project', which is a useful behavioral detail. However, it doesn't disclose pagination behavior, result ordering, or potential rate limits. With annotations covering the main traits, the added value is modest but non-trivial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the core purpose and the key return-type detail efficiently, which is ideal for an AI agent that needs to quickly parse tool intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has multiple optional parameters and 0% schema coverage, the description is under-specified. It doesn't explain how to construct a valid query, how filters interact, or any constraints. An output schema exists but is not visible in the prompt; the description only hints at the return envelope. An agent would likely need to inspect the schema or make trial calls to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the meaning of parameters like query, lang, count, start, from_year, to_year, researcher, and institution. The description only mentions the search action and return type, providing no explanation of how to use the filters. Field names are self-explanatory to some degree, but without any description guidance, an agent may not know parameter formats or combinations.
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 ('Search') and a clear resource ('KAKEN research projects'), and it distinguishes itself from sibling search tools by specifying the record_type 'project' in the unified envelope. This makes the tool's purpose unambiguous even without reading the 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?
The description implies usage for KAKEN projects but does not explicitly contrast with alternatives such as cinii_search_articles or cinii_search_all. There is no 'use this when' or 'not for' guidance. The sibling list is provided in context but the description itself doesn't reference it, so an agent must infer when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cinii_search_researchersCRead-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.
| 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, openWorldHint, idempotentHint, and destructiveHint. The description adds a useful, non-obvious note about field mapping (name in title, profile URL in ids.url_ja) that goes beyond the schema. No contradictions; the note clarifies result interpretation without repeating annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence followed by a clearly separated note. The main purpose is front-loaded, and the note is relevant without bloating the text. Efficient and well-structured.
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 schema has no parameter descriptions and the tool has multiple parameters (query, institution, pagination controls), the description is incomplete. The field-mapping note is helpful, but it doesn't cover parameter semantics or usage context. An agent would need to infer most functional details from parameter names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description mentions none of the parameters (query, lang, count, start, institution). The tool requires more than one parameter in practice (via the nested 'params' object), yet the description provides no semantic help, leaving the agent to guess from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for researchers in CiNii' with a specific verb and resource, and mentions the record_type 'researcher'. It differentiates from siblings like cinii_search_articles by resource type, though it doesn't explicitly name alternatives. The purpose is unambiguous.
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?
No guidance is provided on when to use this tool versus cinii_search_all or other sibling search tools. There is no mention of scenarios, prerequisites, or exclusions, leaving the agent to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each search tool explicitly targets a distinct content type (articles, books, dissertations, KAKEN projects, researchers, and a cross-type search), with no overlap in purpose. The get_record tool is clearly separate as a single-record fetcher by URL or CRID.
All tools follow the identical pattern 'cinii_search_<type>' for searches, plus 'cinii_get_record' for retrieval, maintaining consistent snake_case and verb-noun ordering throughout.
Seven tools is well-scoped for a literature search MCP server, covering the major CiNii content types without redundancy or unnecessary bloat. Each tool earns its place.
The surface covers all primary search categories (articles, books, dissertations, KAKEN, researchers) plus an all-search and a record fetch, leaving no obvious gaps for the stated purpose of querying CiNii Research.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
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.
Citable retrieval across papers, books, patents, Wikipedia, and live social sources.
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.292066MIT
- AlicenseAqualityDmaintenanceEnables multi-source literature search, full-text retrieval, reference analysis, and journal quality assessment across Europe PMC, PubMed, arXiv, CrossRef, OpenAlex, and EasyScholar via the MCP protocol.5201MIT
- 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
- AlicenseAqualityBmaintenanceEnables AI agents to search and retrieve academic papers, author profiles, and citation data from the Scopus database via MCP tools.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ckgerteis/cinii-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server