Skip to main content
Glama
ckgerteis

cinii-mcp

by ckgerteis

cinii-mcp

CiNii Research API(CiNii Research API)を公開するFastMCP stdioサーバーです。CiNii Researchは、国立情報学研究所(NII)が運営する日本の学術データベースで、Claude Desktopやその他のMCPクライアントで利用できる7つのツールとして公開しています。

CiNii Researchは、KAKEN、CiNii Articles、CiNii Books、IRDB、Crossref、DataCite、PubMed、NDL Searchのメタデータを集約しています。これに対する確立されたオープンなMCPツールは存在しないため、このサーバーは日本語の学術文献を検索する研究者向けにそのギャップを埋めます。

これは何のためのものか

CiNii Researchは、5種類のレコードにわたって日本の学術情報を索引化しており、これをすべてClaudeの会話内に取り込むことができます。雑誌記事、書籍・モノグラフ、博士論文、KAKEN科研費プロジェクト、研究者プロフィールに加え、CRIDによる単一レコードの検索も可能です。英語で質問すると、日本語の学術情報が返ってきて、実際に送信された日本語の用語が結果の横に表示されます。

KAKENは特に注目に値します。KAKENは助成された研究を記録しているため、進行中のプロジェクト、形成されつつある共同研究、そして印刷物になる前に助成報告書に到達した研究を浮き彫りにします。

すべての結果には、送信された用語、その文字種、CiNiiがどのようにマッチングしたか、そしてクエリを確定するレシートが含まれているため、脚注の背後にある検索を特定し、引用し、他の誰かが再度実行することができます。

Related MCP server: CiNii MCP Server

ツール

ツール

目的

cinii_search_articles

雑誌記事(JALC、Crossref、PubMed、IRDB)

cinii_search_books

書籍・モノグラフ(NACSIS-CAT、NDL Search)

cinii_search_dissertations

日本の大学からの博士論文

cinii_search_kaken

KAKEN(科研費)助成研究プロジェクト

cinii_search_all

すべてのコンテンツタイプにわたる横断検索

cinii_search_researchers

研究者プロフィールと所属機関

cinii_get_record

URLまたはCRIDによる単一レコードの検索

結果はCiNii Research OpenSearch v2 APIからJSON-LDとして取得され、型付きのJSONレスポンスエンベロープとして返されます。詳細は下記のレスポンス形式を参照してください。(v2.0.1より前のリリースでは整形されたMarkdownテキストを返していました。これは破壊的な変更であり、書式設定の好みではありません。)

レスポンス形式

すべてのツールは、mediation.pyによって構築され、response-schema.jsonで定義された1つの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 — すべてのレスポンスに必要なクレジット行。

診断コード

型付きで閉じています。診断はクライアントが解析する必要のある散文ではありません。

コード

レベル

意味

OK

info

レコードが返されました。フラグはありません。

ZERO_CONJUNCTION

warning

レコードがありません。CiNiiはカタログ化されたメタデータをマッチングし、複数語のクエリをANDで結合するため、関連する研究が存在する場合でも、索引化されていない複合語はゼロを返します。文献が存在しないと結論する前に、レンダリングを変えてください。

SCRIPT_LATIN_QUERY

warning

クエリがラテン文字だったため、ローマ字化されたメタデータと英語のメタデータのみにマッチしました。日本語表記の形式は、異なる、より大きなコーパスに到達します。

API_ERROR

error

APIが応答し、エラーで応答しました。

TRANSPORT_ERROR

error

リクエストが完了しませんでした。失敗した検索は結果が不明であり、欠如として書き留めてはならないため、API_ERRORとは区別されています。

RECEIPT_NOT_DEPOSITED

info

レシートの宛先が設定されていないため、レスポンスはクエリ台帳に書き込まれませんでした。検索には影響ありません。レシートは残りません。

RECEIPT_WRITE_FAILED

warning

レシートの宛先が設定され、書き込みが試行されましたが、着地しませんでした。一方は選択であり、他方は障害であるため、上記の行とは区別されます。

クエリレシート

すべてのエンベロープは、ledger.pyによって追記専用のハッシュチェーンJSONLログに預託できます。MCP_RECEIPT_DIR(またはレガシーのMCP_RECEIPT_LOG)が設定されていない限りオフであり、ロギングの失敗は発生させるのではなく飲み込まれます。検索はその記録よりも重要です。シークレットは行が構成される前に編集されます。

スキーマ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

フォルダ1つ、サーバーごとにファイル1つ。 MCP_RECEIPT_DIRはディレクトリを指し、 各サーバーはその中に独自の<server>.jsonlを書き込みます。これは整理整頓ではありません。 追記は「最後のハッシュを読んでから書き込む」であり、その周りのロックはスレッドロックです。 これは1つのプロセス内で保持され、複数のプロセス間では保持されません。6つのサーバーは 6つのプロセスであり、同時に応答する2つは同じ先行者を読み取り、両方ともそれを主張します。 測定されたものであり、理論ではありません。6つのプロセスが1つのファイルに150行を書き込むと、 14のフォークが生成されました。MCP_RECEIPT_LOGは引き続き機能し、単一のサーバーでは正しいままです。 ファミリーにとっては間違った形です。

install.ps1はこれらすべてを6つすべてに設定し、フォルダにREADMEを書き込みます。

1つのチェーン、またはフォルダ全体を検証します:

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

verifyは失敗時に非ゼロで終了し、見つかった種類を報告します:フォーク(同時書き込み — 設定の欠陥であり、すべての行はまだ存在します)、欠落行、並べ替え、または改ざん(自身の内容にハッシュ化されない行)。最後のものだけが誠実さに関する主張であり、それらを同様に報告すると、読者が一方を他方と誤解する恐れがあります。マニフェストは引用する対象です。預託全体の1つの説明 — ファイルごとの行数、最初と最後のタイムスタンプ、終端ハッシュ、およびサーバー、スクリプト、セッションごとの合計。

前提条件

  • PATHにPython 3.10以上。

  • CiNii Web APIのアプリケーションID(appid)— 無料。必須。

アプリケーションIDの取得

CiNii Research APIを使用するには、登録済みのアプリケーションIDが必要で、すべてのリクエストでパラメータとして送信されます。

  1. CiNii Web API開発者登録ページで登録し、アプリケーションIDを取得します。

  2. NIIのAPI規約に同意します:学術コンテンツサービス利用規約、CiNii Research利用細則、学術コンテンツサービスWeb API利用細則。

  3. 商用利用の場合は、申請前にciniiadm@nii.ac.jpにメールで連絡してください。

同じアプリケーションIDは、cinii_search_kakenが使用するKAKEN APIでも機能します。

インストール

このパッケージはcinii-mcpコンソールスクリプトをインストールします。名前空間化されているため、このサーバーファミリーの残りと1つの環境を共有できます。

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__)"

パッケージまたはそのベンダリングされたモジュールの1つが欠落している場合、これは大きな音を立てて失敗します。チェックとしてcinii-mcp --helpを使用しないでください。不明な引数は無視され、サーバーが起動し、入力の終わりを読み取って0で終了するため、コードの状態に関係なく成功を報告します。

これ以上をインストールする場合

6つの独立したパッケージ。どれも他をインポートせず、どれも他に依存せず、それぞれが単独でインストールして応答します。このディレクトリでのpip install .は、このサーバーとそれ以外の何もない完全なインストールです。

ただし、3つのものを共有しています:レスポンスエンベロープ、クエリ台帳、そして複数を実行する場合はレシートフォルダ。install.ps1は6つすべてにバイト単位で同一にベンダリングされており、それを処理します。デフォルトでこのサーバーをインストールします。1つのリポジトリをクローンすることは、さらに5つを要求することではないからです。

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

名前を付けたサブセットは、1つのレシートフォルダに対して1回だけ要求され、登録されます。スクリプトはネットワークよりも兄弟チェックアウトを優先し、既に登録されている資格情報を再度尋ねるのではなく引き継ぎ、要求されなかったサーバーには触れず、既に登録されているサーバーがフォルダまたはセッションスラッグについて異なる場合、推測するのではなく停止します。また、インストールしたすべてのものにわたってledger.pyとmediation.pyがバイト単位で同一であることをアサートするため、2つのエンベロープバージョンが1つの環境に気付かれずに存在することはありません。

設定

サーバーはCINII_APPID環境変数からアプリケーションIDを読み取ります。サンプルファイルをコピーして記入してください(実際の値をコミットしないでください):

cp .env.example .env
CINII_APPID=your_application_id_here

Claude Desktopの設定

%APPDATA%\Claude\claude_desktop_config.jsonのmcpServersの下にエントリを追加し、インストールした環境のコンソールスクリプトを指すようにします。macOSまたはLinuxでは、.venv/bin/cinii-mcpへの絶対パスを使用します。

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

3.0.0で変更されました。 以前のバージョンはパスで登録されていました — "command": "…\\python.exe", "args": ["…\\server.py"]。そのエントリはこのバージョンを起動しません。server.pyは現在、インポートの隣にあるスクリプトではなく、パッケージ内のモジュールだからです。上記のコンソールスクリプトに置き換えてください。

Claude Desktopを再起動します。7つのツールがツールリストの「cinii」の下に表示されるはずです。

利用規則

NIIは利用規則を施行しています。違反すると、アクセスがブロックされたり、登録が取り消されたりする可能性があります。このサーバーは、すべてのリクエストでappidを送信し(必須)、規則を尊重するように設計されていますが、使用についてはお客様が責任を負います:

  • 短時間に大量のリクエストを送信しないでください。他のユーザーに影響を与える過剰なアクセスは、予告なくブロックされる場合があります。

  • appid はAPIリクエスト専用です。CiNiiページへのユーザー向けリンクに公開しないでください。

  • NIIの規約に従い、取得したデータを使用する際は著作権を尊重してください。

引用

このソフトウェアが研究に役立つ場合は、引用してください。CITATION.cff を参照するか、GitHubの「Cite this repository」ボタンを使用してください。

ライセンス

MIT © 2026 Christopher Gerteis.

このライセンスはサーバーコードのみを対象としています。CiNiiデータまたはCiNii APIに対する権利は付与されません。これらは上記のNIIの利用規約に従います。

免責事項

研究ツールであり、ベストエフォート方式で保守され、「現状のまま」提供され、保証はありません。国立情報学研究所とは提携しておらず、その承認も受けていません。

著者

Dr Christopher Gerteis、ロンドン大学SOAS。データ提供: CiNii Research、国立情報学研究所。

Available Tools

7 tools
cinii_get_recordA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

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

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

Conciseness4/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines3/5

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

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

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

cinii_search_allA
Read-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.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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_articlesA
Read-onlyIdempotent

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

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

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

States a specific verb and resource (search CiNii Research for 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.

Usage Guidelines4/5

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_booksC
Read-onlyIdempotent

Search CiNii Research for books and monographs. Returns the unified envelope.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description states a specific verb and resource ('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.

Usage Guidelines3/5

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_dissertationsC
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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

An output schema exists so return values need not be described, 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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_kakenB
Read-onlyIdempotent

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

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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

The description states a specific verb and resource: "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.

Usage Guidelines3/5

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_researchersA
Read-onlyIdempotent

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

Note: researcher affiliation is not carried by the record schema; the researcher name occupies the title field and the profile URL the ids.url_ja field.

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

An output schema exists, so return values 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.

Parameters2/5

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.

Purpose4/5

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

States a specific verb and resource: 'Search 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.

Usage Guidelines3/5

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

Usage is only implied by the resource name '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.

  1. 7 tool updatesv3.2.0
    • Changedcinii_get_record1 field changed
      • addedInput schema / $defs / RecordLookupInput / properties / record_url / maxLength
        Added value: +2000
    • Changedcinii_search_all1 field changed
      • addedInput schema / $defs / CrossSearchInput / properties / query / maxLength
        Added value: +2000
    • Changedcinii_search_articles5 fields changed
      • changedInput schema / $defs / ArticleSearchInput / properties / author / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / ArticleSearchInput / properties / data_source / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / ArticleSearchInput / properties / journal / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / ArticleSearchInput / properties / query / maxLength
        Added value: +2000
      • changedInput schema / $defs / ArticleSearchInput / properties / title / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcinii_search_books5 fields changed
      • changedInput schema / $defs / BookSearchInput / properties / author / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / BookSearchInput / properties / isbn / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / BookSearchInput / properties / publisher / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / BookSearchInput / properties / query / maxLength
        Added value: +2000
      • changedInput schema / $defs / BookSearchInput / properties / title / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcinii_search_dissertations2 fields changed
      • changedInput schema / $defs / DissertationSearchInput / properties / author / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / DissertationSearchInput / properties / query / maxLength
        Added value: +2000
    • Changedcinii_search_kaken3 fields changed
      • changedInput schema / $defs / KakenSearchInput / properties / institution / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / KakenSearchInput / properties / query / maxLength
        Added value: +2000
      • changedInput schema / $defs / KakenSearchInput / properties / researcher / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcinii_search_researchers2 fields changed
      • changedInput schema / $defs / ResearcherSearchInput / properties / institution / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / ResearcherSearchInput / properties / query / maxLength
        Added value: +2000
  2. 7 tool updatesv3.0.0
    • First observedcinii_get_record
    • First observedcinii_search_all
    • First observedcinii_search_articles
    • First observedcinii_search_books
    • First observedcinii_search_dissertations
    • First observedcinii_search_kaken
    • First observedcinii_search_researchers

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

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