cinii-mcp
cinii-mcp
Un servidor FastMCP stdio que expone la API de CiNii Research — la base de datos académica nacional de Japón, operada por el Instituto Nacional de Informática (NII) — como siete herramientas para usar con Claude Desktop y otros clientes MCP.
CiNii Research agrega metadatos de KAKEN, CiNii Articles, CiNii Books, IRDB, Crossref, DataCite, PubMed y NDL Search. No existe una herramienta MCP abierta establecida para ello, por lo que este servidor cubre esa carencia para investigadores que consultan la producción académica en japonés.
Para qué sirve
CiNii Research indexa la producción académica japonesa en cinco tipos de registro, y esto los pone todos dentro de una conversación de Claude: artículos de revistas, libros y monografías, tesis doctorales, proyectos de subvención KAKEN y perfiles de investigadores, además de la consulta de un único registro por CRID. Haz una pregunta en inglés y obtén producción académica en japonés, con el término japonés realmente enviado mostrado junto a los resultados.
KAKEN merece atención aparte: registra lo que se financió, por lo que saca a la luz proyectos en curso, colaboraciones en formación e investigaciones que llegaron a un informe de subvención antes de llegar a la imprenta.
Cada resultado lleva el término enviado, su escritura, cómo lo emparejó CiNii y un recibo que fija la consulta, de modo que una búsqueda que respalda una nota al pie pueda ser nombrada, citada y ejecutada de nuevo por otra persona.
Related MCP server: CiNii MCP Server
Herramientas
Herramienta | Propósito |
| Artículos de revistas (JALC, Crossref, PubMed, IRDB) |
| Libros y monografías (NACSIS-CAT, NDL Search) |
| Tesis doctorales de universidades japonesas |
| Proyectos de investigación financiados por KAKEN (科研費) |
| Búsqueda transversal en todos los tipos de contenido |
| Perfiles de investigadores y afiliaciones |
| Consulta de un único registro por URL o CRID |
Los resultados provienen de la API CiNii Research OpenSearch v2 como JSON-LD y se devuelven como un único sobre de respuesta JSON tipado; consulte Formato de respuesta más abajo. (Las versiones anteriores a la v2.0.1 devolvían texto markdown formateado; eso es un cambio disruptivo, no una preferencia de formato).
Formato de respuesta
Cada herramienta devuelve un sobre de respuesta JSON, construido por mediation.py y definido en response-schema.json. Versión de esquema 2.3.0. El mismo módulo y esquema se incluyen byte-idénticos en toda la familia de servidores, de modo que un sobre de un servidor puede ser leído por un consumidor escrito para otro.
El sobre informa de cómo se realizó la búsqueda, no solo de lo que encontró:
searched_for— en las operaciones de búsqueda, el término realmente enviado, su escritura detectada y el modo de emparejamiento, elevados a la parte superior del sobre para que un cliente intermediario no pueda descartarlos. Las operaciones de recuperación (cinii_get_record) lo omiten: recibieron un identificador y no eligieron ningún término.query—input_termstal como se proporcionó,normalizedtal como se envió y elscriptdetectado. Este par es el registro de cualquier transformación realizada entre el idioma del llamante y el corpus.matching_mode—metadata_conjunctionpara este servidor. Te indica cómo leerresult.total.result.breadth—none,narrow(1–50),broad(51–1000),very_broad(>1000). Los umbrales son bajos a propósito: unos cientos de resultados que parecen una bibliografía se marcan en lugar de dejarse pasar sin aviso.items[].matched_in— en qué campo se realizó la coincidencia, por registro.receipt— una marca de tiempo ISO 8601, un SHA-256 calculado sobre la consulta normalizada y sus parámetros, y los identificadores devueltos. El hash verifica un término que ya posees; no puede invertirse para producir uno, por lo que la unidad de depósito es el sobre, no el recibo.attribution— la línea de atribución requerida, en cada respuesta.
Códigos de diagnóstico
Tipados y cerrados. Un diagnóstico nunca es prosa que el cliente tenga que analizar.
Código | Nivel | Significado |
| info | Registros devueltos; nada que señalar. |
| warning | Sin registros. CiNii empareja metadatos catalogados y aplica AND a una consulta de varias palabras, por lo que un compuesto no indexado devuelve cero incluso cuando existe trabajo relacionado. Varíe la transformación antes de concluir que la bibliografía está ausente. |
| warning | La consulta estaba en escritura latina, por lo que solo coincidió con metadatos romanizados y en inglés. La forma en escritura japonesa alcanza un corpus diferente y más amplio. |
| error | La API respondió, y respondió con un error. |
| error | La solicitud no se completó. Se mantiene distinto de |
| info | La respuesta no se escribió en el registro de consultas, porque no hay ningún destino de recibos configurado. La búsqueda no se ve afectada; no sobrevive ningún recibo de ella. |
| warning | Hay un destino de recibos configurado, se intentó la escritura y no se completó. Se distingue de la línea anterior porque una es una elección y la otra es un fallo. |
Recibos de consulta
Cada sobre puede depositarse en un registro JSONL de solo añadido y encadenado por hash mediante ledger.py. Está desactivado a menos que se establezca MCP_RECEIPT_DIR (o el heredado MCP_RECEIPT_LOG), y un fallo de registro se traga en lugar de lanzarse: una búsqueda importa más que el registro de la misma. Los secretos se redactan antes de componer una línea.
Desde el esquema 2.3.0 el sobre lo dice. Cuando una respuesta no se deposita, emit() añade RECEIPT_NOT_DEPOSITED si la variable no está establecida, o RECEIPT_WRITE_FAILED si está establecida y la escritura no se completó. La brecha es entonces visible en el artefacto que se convierte en el registro, en lugar de solo en un archivo de configuración. mediation.deposit_enabled() informa del mismo hecho bajo demanda.
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 setUna carpeta y un archivo por servidor. MCP_RECEIPT_DIR apunta a un directorio
y cada servidor escribe su propio <server>.jsonl dentro. Eso no es pulcritud.
Añadir es leer-el-último-hash-y-luego-escribir, y el bloqueo que lo rodea es un bloqueo
de hilos, que se mantiene dentro de un proceso y no entre varios: seis servidores son
seis procesos, y dos que respondan al mismo momento leerán ambos el mismo
predecesor y ambos lo reclamarán. Medido, no teorizado: seis procesos escribiendo 150
líneas en un archivo produjeron catorce bifurcaciones. MCP_RECEIPT_LOG sigue funcionando y
sigue siendo correcto para un solo servidor; es la forma equivocada para una familia.
install.ps1 configura esto para los seis y escribe un README en la carpeta.
Verifique una cadena, o toda la carpeta:
cinii-mcp-ledger verify receipts/cinii.jsonl
cinii-mcp-ledger verify-dir receipts
cinii-mcp-ledger manifest receipts # writes receipts/manifest.jsonverify sale con código distinto de cero en caso de fallo y dice qué tipo encontró: una bifurcación
(escritores concurrentes: un fallo de configuración, y cada línea sigue ahí), una línea
faltante, un reordenamiento o manipulación (una línea que no se corresponde con su
propio contenido). Solo la última es una afirmación sobre la honestidad, y reportarlas
por igual invitaría al lector a confundir una con la otra. El manifiesto es el
objeto a citar: una descripción de todo el depósito: recuentos de líneas por archivo,
primeras y últimas marcas de tiempo, hashes terminales y totales combinados por servidor,
escritura y sesión.
Requisitos previos
Python 3.10+ en PATH.
Un ID de aplicación de CiNii Web API (
appid): gratuito; obligatorio.
Cómo obtener un ID de aplicación
La API de CiNii Research requiere un ID de aplicación registrado, enviado como parámetro en cada solicitud.
Regístrese en la página de Registro de desarrolladores de CiNii Web API y obtenga su ID de aplicación.
Acepte las regulaciones de la API de NII: las Regulaciones de Uso del Servicio de Contenido Académico, las Regulaciones Detalladas de Uso de CiNii Research y las Regulaciones Detalladas de Uso de la Web API del Servicio de Contenido Académico.
Para uso comercial, envíe un correo a
ciniiadm@nii.ac.jpantes de solicitarlo.
El mismo ID de aplicación también funciona para la API de KAKEN, que usa cinii_search_kaken.
Instalación
El paquete instala un script de consola cinii-mcp. Tiene espacio de nombres, por lo que puede
compartir un entorno con el resto de esta familia de servidores.
python3 -m venv .venv
.venv/bin/pip install .En Windows:
py -3.11 -m venv .venv
.venv\Scripts\pip.exe install .O directamente desde el repositorio, sin clonar:
uvx --from "git+https://github.com/ckgerteis/cinii-mcp" cinii-mcpVerifique la instalación:
.venv/bin/python -c "import cinii_mcp; print(cinii_mcp.__version__)"Eso falla de forma ruidosa si el paquete o uno de sus módulos incluidos falta. No
use cinii-mcp --help como comprobación: los argumentos desconocidos se ignoran, el
servidor se inicia, lee el fin de la entrada y sale con 0, por lo que informa éxito
cualquiera que sea el estado del código.
Instalar más de uno
Seis paquetes independientes. Ninguno importa a otro, ninguno depende de otro, y
cada uno se instala y responde por sí solo: pip install . en este directorio es una
instalación completa de este servidor y nada más.
Sí comparten tres cosas: un sobre de respuesta, un registro de consultas y — si
ejecuta más de uno — una carpeta de recibos. install.ps1 se incluye byte-idéntico
en los seis y se encarga de eso. Instala este servidor por defecto, porque
clonar un repositorio no es una solicitud de cinco más.
.\install.ps1 # this server
.\install.ps1 -All # all six
.\install.ps1 -Servers cinii,cinii # a chosen subsetCualquier subconjunto que nombre se registra contra una carpeta de recibos, solicitada
una vez. El script prefiere una copia hermana a la red, traslada
las credenciales ya registradas en lugar de volver a preguntar, deja en paz a los servidores
sobre los que no se le preguntó y se detiene en lugar de adivinar donde los servidores
ya registrados discrepan sobre la carpeta o el slug de sesión. También verifica que
ledger.py y mediation.py son byte-idénticos en todo lo que
instaló, de modo que dos versiones de sobre no pueden terminar en un entorno sin ser notadas.
Configuración
El servidor lee su ID de aplicación de la variable de entorno CINII_APPID. Copie el archivo de ejemplo y complételo (nunca confirme el valor real):
cp .env.example .envCINII_APPID=your_application_id_hereConfiguración de Claude Desktop
Añada una entrada a %APPDATA%\Claude\claude_desktop_config.json bajo
mcpServers, apuntando al script de consola en el entorno en el que instaló.
En macOS o Linux use la ruta absoluta a .venv/bin/cinii-mcp.
{
"mcpServers": {
"cinii": {
"command": "C:\\path\\to\\.venv\\Scripts\\cinii-mcp.exe",
"env": {
"CINII_APPID": "your_application_id_here"
}
}
}
}Cambiado en 3.0.0. Las versiones anteriores se registraban por ruta:
"command": "…\\python.exe", "args": ["…\\server.py"]. Esa entrada no
iniciará esta versión, porque server.py ahora es un módulo dentro de un paquete en lugar
de un script junto a sus importaciones. Reemplácela con el script de consola anterior.
Reinicie Claude Desktop. Las siete herramientas deberían aparecer bajo "cinii" en la lista de herramientas.
Reglas de uso
NII aplica reglas de uso; romperlas puede hacer que le bloqueen el acceso o le cancelen el registro. Este servidor envía su appid en cada solicitud (obligatorio) y está diseñado para respetar las reglas, pero usted sigue siendo responsable del uso:
No realice un gran volumen de solicitudes en un corto período de tiempo. El acceso excesivo que afecte a otros usuarios puede ser bloqueado sin previo aviso.
El
appides solo para solicitudes de API; no lo exponga en enlaces visibles para los usuarios a páginas de CiNii.Respete los derechos de autor al utilizar los datos obtenidos, según las regulaciones de NII.
Citación
Si este software respalda su investigación, por favor cítelo. Consulte CITATION.cff o use el botón "Cite this repository" en GitHub.
Licencia
MIT © 2026 Christopher Gerteis.
Esta licencia cubre únicamente el código del servidor. No otorga ningún derecho sobre los datos de CiNii ni sobre la API de CiNii, que siguen regidos por los términos de NII enlazados anteriormente.
Descargo de responsabilidad
Una herramienta de investigación, mantenida con el mejor esfuerzo posible y proporcionada "tal cual", sin garantía. No está afiliada ni respaldada por el National Institute of Informatics.
Autor
Dr Christopher Gerteis, SOAS University of London. Datos proporcionados por 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 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_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?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds non-obvious behavioral context: it returns a unified envelope and may emit records with a default record_type of 'article' because CiNii does not always disambiguate mixed types.
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 three tight sentences: purpose first, return envelope second, and a key caveat third. There is no filler, and the important type-disambiguation warning is front-loaded enough to be useful.
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?
Annotations cover safety behavior and an output schema exists, so the description needn't explain return values in full. However, with 0% schema description coverage, the missing parameter guidance and lack of explicit sibling routing leave meaningful gaps for correct invocation.
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 undocumented parameters, but it says nothing about query syntax, lang, count limits, start/pagination, or from_year/to_year filtering. The parameter names are mostly self-explanatory, but semantic meaning is left largely to inference.
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: 'Cross-type search across all CiNii content.' The word 'all' implicitly distinguishes it from the type-specific sibling tools, though it does not explicitly name them.
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 phrase 'across all CiNii content' implies this tool is for broad, cross-type queries, but the description gives no explicit when-to-use guidance, exclusions, or named alternatives such as cinii_search_articles or cinii_search_books.
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 readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral value beyond that: AND-semantics across catalogue metadata, two named diagnostics (ZERO_CONJUNCTION, SCRIPT_LATIN_QUERY), and a pointer to the unified envelope return shape.
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?
Front-loaded with the core purpose, then layered diagnostics and scope boundaries. Dense but nearly every sentence carries distinct information; the em-dash clause about ZERO_CONJUNCTION is slightly compressed but earns its space.
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 schema exists, so omitting return-value detail is fine, and the diagnostic behavior is well covered. However, a tool with eleven optional filter fields whose 0% schema coverage leaves them undocumented needs the description to say more about what those filters do to 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?
Schema description coverage is 0% and the description only illuminates the query parameter (multi-word AND behavior, romanized metadata). It says nothing about the title, author, journal, from_year/to_year, data_source, lang, sort, count, or start fields, which are the bulk of the input object.
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 journal articles) and explicitly excludes the sibling cinii_search_books ('Foundational monographs sit in cinii_search_books, not the article index'). It also contrasts against J-STAGE, so an agent can route queries without opening any 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?
Gives concrete when-to guidance: a zero result from a compound query should prompt re-rendering rather than a conclusion that literature is absent, and monograph searches belong to cinii_search_books. It stops short of explicit routing guidance against cinii_search_all or cinii_search_dissertations, which are also siblings.
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 declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds only that it 'Returns the unified envelope,' which is vague and adds little behavioral context beyond what the annotations and output schema already provide.
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 sentences, front-loaded with the main action and resource. It is appropriately concise, though the phrase 'unified envelope' is jargon that does not earn much informational value.
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 many search parameters, a nested input object, and no schema descriptions, so the description needs to compensate for parameter semantics and usage guidance. Instead it only names the resource, leaving significant gaps for correct invocation despite the presence of an output 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?
Schema description coverage is 0%, and the description says nothing about the many available filters (query, title, author, ISBN, year range, pagination, lang). It does not explain how required 'query' interacts with optional filters or what the parameters mean beyond their 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?
The description states a specific verb and resource ('Search CiNii Research for books and monographs'), making it distinguishable from the sibling article, dissertation, and researcher search tools. It does not explicitly name those alternatives, but the resource scope is clear.
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 by the resource ('books and monographs'), but the description gives no explicit guidance on when to choose this over cinii_search_all or other sibling search tools, nor any prerequisites or exclusions. An agent can infer the use case but is not routed explicitly.
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 declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The one behavioral claim offered, 'Returns the unified envelope,' is undefined jargon that tells the agent nothing about result shape, matching behavior, or pagination.
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 with the purpose front-loaded and no filler. The second sentence is borderline waste, but overall size is appropriate.
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, but with seven optional filters at 0% schema description coverage and no usage guidance, an agent cannot tell how to constrain or paginate the search from this description 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 actual inputs (query, lang, count, start, author, from_year, to_year). Field titles and defaults give partial self-documentation, but the description contributes zero semantic meaning for any parameter.
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 concrete verb (Search) plus a specific resource scope (CiNii Research doctoral dissertations), which implicitly separates it from the sibling article/book/kaken/researcher searchers. It never explicitly names the sibling it replaces, 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?
No guidance on when to pick this over cinii_search_all or the other typed searchers, no prerequisites, and no exclusions. The only hint is the resource name in the first sentence, which the agent must infer from.
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').
| 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 annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that results use the unified envelope with record_type 'project', but it does not explain pagination, result ordering, query behavior, or filtering constraints beyond what the schema and annotations provide.
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 sentences with no wasted language, and the core purpose is front-loaded. It efficiently covers what the tool searches and the result envelope shape.
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?
This is a search tool with several meaningful filters and 0% schema description coverage, yet the description explains none of the filter semantics or query expectations. Although an output schema exists and the envelope note is useful, an agent lacks enough context to use the filters 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%, and the description adds no meaning for the nested KakenSearchInput fields such as query, lang, count, start, from_year, to_year, researcher, or institution. The schema exposes these parameters by name only, so the description does not compensate for the missing parameter documentation.
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: "Search KAKEN research projects." This clearly distinguishes the tool from siblings such as cinii_search_articles, cinii_search_books, cinii_search_dissertations, and cinii_search_researchers.
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 intended use is implied by the resource name, but the description gives no explicit when-to-use guidance or comparison to alternatives such as cinii_search_all or cinii_search_researchers. An agent can infer that this tool is for projects, but not when another tool would be preferable.
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.
| 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, so safety is covered. The description adds genuinely useful structural disclosure beyond annotations: the unified envelope shape (record_type 'researcher') and the key caveat that affiliation is absent and name lives in title while profile URL is in ids.url_ja. This is real behavioral context an agent would otherwise miss.
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?
Front-loaded with the core purpose, followed by a compact and high-value note about record structure. No wasted sentences, though the note is slightly dense.
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 fully explained. The description covers the essential caveats an agent needs (envelope type, affiliation absence, field placement). The main remaining gap is behavioral detail on pagination (start/count), which is minor given the rich schema constraints.
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 nested object has five fields (query, lang, count, start, institution) with no textual descriptions. The description says nothing about these parameters or their semantics, so it fails to compensate for the low coverage. The field-mapping note concerns output, not input parameters.
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 for researchers in CiNii'. The 'record_type researcher' clarifies the return. It doesn't explicitly differentiate from siblings like cinii_search_articles or cinii_search_all, but the resource is distinct enough that selection is clear.
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 'researchers'. There is no explicit 'use this when...' guidance, no mention of when to prefer cinii_search_all or cinii_get_record, and no prerequisites. Adequate but with clear gaps.
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.
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 7 tools
The six search tools are separated by clear content type (articles, books, dissertations, KAKEN, researchers, all), so an agent can generally pick the right one. The only mild overlap is cinii_search_all versus the type-specific searches, but its cross-type role is explicit.
All tools use a consistent cinii_ prefix followed by a predictable verb_noun pattern: search_<content-type> or get_record. There are no mixed conventions or vague names.
Seven tools is a well-scoped set for a search-oriented CiNii API. Each content type earns its own search tool, plus one cross-search and one record-fetch tool.
The surface covers the major CiNii Research content types—articles, books, dissertations, KAKEN projects, researchers—and includes cross-type search plus direct record retrieval by URL or CRID. No obvious retrieval operation is missing for this domain.
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.3072 npm7MIT
- 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.-