jstage-mcp
jstage-mcp
Claude Desktop で使用するための3つのツールとして J-STAGE WebAPI を公開する FastMCP stdio サーバーです。
これが何のためのものか
J-STAGE は日本の学術団体が発行するジャーナルの全文を収録しており、これはカタログ全体ではなく記事内部を検索します。目録作成者がキーワードとして選ばなかった用語でも、著者が論文中で使用していれば見つけることができます。つまり、名前が付けられる前に流通する概念への経路となるのです。
J-STAGE の DOI を直接レコードに解決するか、ジャーナルの巻号の背骨をたどって全体の流れを見ることができます。
ここで用語を実行し、cinii-mcp でも実行して、その差を読み取ってください。大きな乖離は、あなたの語彙が目録の記述に属するのか、それとも分野の散文に属するのかを示します。これは、文献の中での発見である前に、文献についての発見なのです。
Related MCP server: Japan Data MCP
ツール
ツール | 目的 |
| J-STAGE 記事全体にわたる全文・著者・タイトル・ジャーナル検索 |
| 既知のタイトル、ISSN、または |
| J-STAGE DOI を完全な記事レコードに解決する |
すべてのツールは、mediation.py によって構築され、response-schema.json で定義された1つの型付き JSON レスポンスエンベロープを返します。スキーマバージョン 2.3.0。同じモジュールとスキーマはサーバーファミリー全体でバイト単位で同一にベンダリングされているため、あるサーバーのエンベロープは別のサーバー用に書かれたコンシューマーでも読むことができます。
エンベロープは、何が見つかったかだけでなく、検索がどのように行われたかを報告します。
searched_for— 検索操作では、実際に送信された用語、検出されたスクリプト、マッチングモードをエンベロープの先頭に引き上げ、中継クライアントがそれを落とせないようにします。フェッチ操作(jstage_get_article_by_doi、jstage_list_issues)では省略されます。識別子を渡され、用語を選択しなかったためです。query— 提供されたinput_terms、送信されたnormalized、検出されたscript。このペアは、呼び出し元の言語とコーパスの間で実行されたレンダリングの記録です。matching_mode— このサーバーではfull_text_broad。result.totalの読み方を示します。result.breadth—none、narrow(1〜50)、broad(51〜1000)、very_broad(>1000)。しきい値は意図的に低く設定されています。文献のように見える数百のヒットは、そのまま通過させるのではなく、マークされます。items[].matched_in— レコードごとに、マッチが行われたフィールド。receipt— ISO 8601 タイムスタンプ、正規化されたクエリとそのパラメータに対する SHA-256、および返された識別子。ハッシュは既に保持している用語を検証しますが、逆に用語を生成することはできないため、預託の単位はレシートではなくエンベロープです。attribution— すべてのレスポンスに必要なクレジット行。
診断コード
型付きで閉じています。診断はクライアントが解析する必要のある散文ではありません。
コード | レベル | 意味 |
| info | レコードが返されました。フラグはありません。 |
| warning | マッチは全文で行われ、複数語の用語は緩くマッチするため、高い |
| warning | クエリはラテン文字だったため、ローマ字化および英語のメタデータのみにマッチしました。漢字またはかなで再発行してください。 |
| warning | このレンダリングではレコードがありません。エミックまたは構成要素の用語、あるいは別の日本語レンダリングを試してください。 |
| error | API が応答し、エラーで応答しました。 |
| error | リクエストが完了しませんでした。失敗した検索は結果が不明であり、欠如として記録してはならないため、 |
| info | レシートの宛先が設定されていないため、レスポンスはクエリ台帳に書き込まれませんでした。検索には影響ありません。レシートは残りません。 |
| 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つのファイル。 MCP_RECEIPT_DIR はディレクトリを指し、各サーバーはその中に独自の <server>.jsonl を書き込みます。それは整理整頓ではありません。追記は最後のハッシュを読んでから書き込むというもので、その周りのロックはスレッドロックであり、1つのプロセス内でのみ有効で、複数のプロセス間では有効ではありません。6つのサーバーは6つのプロセスであり、同時に応答する2つは同じ先行者を読み、両方がそれを主張します。理論ではなく測定された事実です。6つのプロセスが1つのファイルに150行を書き込むと、14のフォークが発生しました。MCP_RECEIPT_LOG は依然として機能し、単一サーバーでは正しいですが、ファミリーには間違った形です。
install.ps1 は6つすべてに対してこれを設定し、フォルダに README を書き込みます。
1つのチェーン、またはフォルダ全体を検証します:
jstage-mcp-ledger verify receipts/jstage.jsonl
jstage-mcp-ledger verify-dir receipts
jstage-mcp-ledger manifest receipts # writes receipts/manifest.jsonverify は失敗時に非ゼロで終了し、見つかった種類を報告します: フォーク(同時書き込み — 設定の欠陥であり、すべての行はまだ存在します)、欠落行、並べ替え、または改ざん(自身の内容にハッシュされない行)。最後のものだけが誠実さに関する主張であり、それらを同様に報告すると、読者が一方を他方と誤解する恐れがあります。マニフェストは引用すべきオブジェクトです: 預託全体の1つの説明 — ファイルごとの行数、最初と最後のタイムスタンプ、終端ハッシュ、およびサーバー、スクリプト、セッションごとの合計。
インストール
パッケージは jstage-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/jstage-mcp" jstage-mcpインストールを検証します:
.venv/bin/python -c "import jstage_mcp; print(jstage_mcp.__version__)"パッケージまたはそのベンダリングされたモジュールの1つが欠落している場合、それは大声で失敗します。チェックとして jstage-mcp --help を使用しないでください。未知の引数は無視され、サーバーが起動し、入力の終わりを読み、0で終了するため、コードの状態に関係なく成功を報告します。
これ以外をインストールする場合
6つの独立したパッケージ。どれも他をインポートせず、他に依存せず、それぞれが単独でインストールして応答します。このディレクトリでの pip install . は、このサーバーの完全なインストールであり、他には何もありません。
ただし、3つのものを共有しています: レスポンスエンベロープ、クエリ台帳、そして複数実行する場合のレシートフォルダです。install.ps1 は6つすべてにバイト単位で同一にベンダリングされており、それを処理します。デフォルトでこのサーバーをインストールします。1つのリポジトリをクローンすることは、さらに5つを要求することではないからです。
.\install.ps1 # this server
.\install.ps1 -All # all six
.\install.ps1 -Servers jstage,cinii # a chosen subset指定したサブセットは、一度だけ要求された1つのレシートフォルダに対して登録されます。スクリプトはネットワークよりも兄弟チェックアウトを優先し、既に登録されている資格情報を再度尋ねるのではなく引き継ぎ、要求されなかったサーバーには触れず、既に登録されているサーバーがフォルダまたはセッションスラッグについて異なる場合には推測するのではなく停止します。また、インストールしたすべてのものに対して ledger.py と mediation.py がバイト単位で同一であることを検証するため、2つのエンベロープバージョンが1つの環境に気付かれずに存在することはありません。
Claude Desktop の設定
%APPDATA%\Claude\claude_desktop_config.json の mcpServers の下に、インストールした環境のコンソールスクリプトを指すエントリを追加します。macOS または Linux では、.venv/bin/jstage-mcp への絶対パスを使用します。
{
"mcpServers": {
"jstage": {
"command": "C:\\path\\to\\.venv\\Scripts\\jstage-mcp.exe"
}
}
}3.0.0 で変更されました。 以前のバージョンはパスで登録されていました — "command": "…\\python.exe", "args": ["…\\server.py"]。そのエントリはこのバージョンを起動しません。server.py は現在、インポートの隣にあるスクリプトではなく、パッケージ内のモジュールであるためです。上記のコンソールスクリプトに置き換えてください。
Claude Desktop を再起動します。3つのツールがツールリストの "jstage" の下に表示されるはずです。
レート制限
サーバーは、JST の一括ダウンロード禁止に沿って、送信リクエスト間の最小間隔を1秒に強制します。制限はプロセスごとです。複数の Claude Desktop セッションを同時に実行すると、それを超える可能性があるため、実行しないでください。
制限事項
ジャーナル検索ツールはありません。
jstage_search_journalsは v1.x に存在し、v2.0.0 で削除されました。J-STAGE は2026年3月26日にジャーナル検索エンドポイント(service=4)を発表しましたが、公開 API は依然としてそのサービスコードをERR_004で拒否します。静かにボリューム検索にフォールバックするツールはジャーナル検索ではなく、このサーバーはそのようなものを提供しないことを選択します。JST がservice=4を有効にするまで、既知のタイトル、ISSN、またはcdjournalに対してjstage_list_issuesを使用してください。jstage_get_article_by_doiは J-STAGE 発行の DOI を必要とします。 WebAPI はdoi=クエリパラメータを公開していません。ツールは J-STAGE のパターン(10.<registrant>/<cdjournal>.<vol>.<no>_<page>)に従う DOI をcdjournal+volに分解し、結果をレスポンスと照合します。そのパターン外の DOI については、ツールは doi.org の解決 URL とメモを返します。商用利用には登録が必要です。 JST 利用規約に基づき、商用利用には
contact@jstage.jst.go.jpに申請フォームを送信する必要があります。研究および教育目的の利用には必要ありません。
API ノート
エンドポイント: https://api.jstage.jst.go.jp/searchapi/do
使用されるサービスコード:
service=2— 巻号service=3— 記事検索service=4— ジャーナル検索(文書化されていますが、2026年8月23日時点でERR_004で拒否されています。どのツールでも使用されていません)
ライブ API に対して確認された有効な記事検索クエリパラメータ: material, article, author, affil, keyword, abst, text, issn, cdjournal, vol, no, pubyearfrom, pubyearto, start, count。
帰属
Powered by J-STAGE
この文字列はすべてのツールレスポンスに含まれます。
引用
このソフトウェアがあなたの研究を支援する場合は、引用してください。CITATION.cff を参照するか、GitHub の「Cite this repository」ボタンを使用してください。
ライセンス
MIT © 2026 Christopher Gerteis.
このライセンスはサーバーコードのみを対象とします。J-STAGEのコンテンツやJ-STAGE WebAPIに対する権利は付与されず、これらは引き続きJSTの利用規約に従います。
免責事項
研究ツールであり、ベストエフォートで保守され、「現状のまま」提供され、保証はありません。国立研究開発法人科学技術振興機構とは無関係であり、同機構の承認を受けたものではありません。JSTはWebAPIのサポートを提供していません。
著者
Dr Christopher Gerteis、ロンドン大学SOAS
Available Tools
3 toolsjstage_get_article_by_doiARead-onlyIdempotent
Resolve a J-STAGE DOI to its article record. Returns the unified envelope (operation 'resolve_doi') with one item on success, or zero items plus a diagnostic when the DOI is not in J-STAGE's issuance pattern or is unmatched.
| 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 establish read-only/idempotent/non-destructive behavior. The description adds meaningful behavioral context beyond annotations by specifying the response envelope, the operation name ('resolve_doi'), and the success/failure contract (one item vs. zero items plus diagnostic). This clarifies what happens in edge cases, which is not covered by annotations.
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, front-loaded with the primary purpose and then the response behavior. There is no redundancy or unnecessary detail. Every sentence contributes to understanding the tool's function and outcomes.
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 simplicity (one parameter) and the presence of an output schema, the description covers the essential aspects: the operation, success/failure representation, and error handling. It does not mention pagination or other complexities because they are not applicable. The schema description handles the parameter format. Overall, it is complete for an agent to use the tool 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?
The schema description for the 'doi' parameter already explains that it can be with or without the doi.org prefix, providing semantic meaning. Although the context signal says schema description coverage is 0%, the actual schema includes a description, so the baseline of 3 applies. The tool description adds no additional parameter information beyond what the schema provides.
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 explicitly states the verb 'resolve' and the resource 'a J-STAGE DOI to its article record.' It is specific and clearly distinguishes from the siblings (search_articles and list_issues) by focusing on DOI-based lookup. The purpose is immediately understandable.
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 does not explicitly mention when to use this tool versus the alternatives. However, the purpose (DOI to article) strongly implies usage when a DOI is available. There are no explicit exclusions or comparisons to siblings, so guidance is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jstage_list_issuesARead-onlyIdempotent
Return the volume/issue spine of a journal (by material/issn/cdjournal).
Navigation aid, not literature retrieval: returns structural JSON (volumes with publisher/journal metadata), not the record 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, and destructiveHint=false, so the description does not repeat those. It adds useful behavioral context: the return is 'structural JSON (volumes with publisher/journal metadata), not the record envelope'. This clarifies the nature of the output beyond what annotations capture and reinforces the navigation-purpose distinction. It does not contradict any annotation.
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 core purpose, and immediately clarifies what it is not. Every word earns its place; there is no redundant or vague language.
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 is relatively simple (one params object) and the description covers the essential purpose and output shape. An output schema exists, so the detailed return structure is likely defined elsewhere. The description could elaborate on pagination (count/start) or use cases, but for a navigation aid the current level is adequate. The only minor gap is not mentioning the filtering options beyond identifiers, but they are in the schema.
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% (description does not discuss the parameters object). The description mentions 'by material/issn/cdjournal', covering three of the seven fields, but omits count, start, pubyearfrom, and pubyearto. Given the low coverage, the description should compensate more, but it does highlight the primary identifiers. The schema itself provides titles and constraints for the remaining fields, so this is a partial compensation.
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: 'Return the volume/issue spine of a journal'. It also differentiates from siblings by asserting it is a 'Navigation aid, not literature retrieval', which precisely matches the listing vs. search/article functions. This leaves no ambiguity about what the tool does.
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 context: this is for navigation, not literature retrieval. It implies when to use it (when you need the structural spine) and when not (for literature retrieval, likely using search or get-article siblings). It also names the key identifiers ('by material/issn/cdjournal') but does not explicitly mention alternative tool names or exact conditions for choosing this over siblings. This is close to full guidance, but not explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jstage_search_articlesARead-onlyIdempotent
Search articles on J-STAGE. Returns the unified response envelope.
J-STAGE matches text against full text and treats multi-word terms
loosely, so a high result.total is often noisy — read matching_mode
(full_text_broad), result.breadth, and the diagnostics before treating
a count as the size of a literature. A SCRIPT_LATIN_QUERY diagnostic means
the query matched Latin-script text and metadata only; re-issue in kanji/kana. The same
string can return very different totals on CiNii (metadata conjunction).
| 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 non-destructive behavior, so the bar is lower, and the description still adds substantial context. It explains full-text broad matching, loose multi-word handling, the meaning of matching_mode/result.breadth/diagnostics, SCRIPT_LATIN_QUERY implications, and differences from CiNii. This goes far beyond the structured annotations.
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 front-loaded with the core purpose and then provides a dense but relevant paragraph of caveats. Every sentence earns its place, with no filler or repetition of annotation information.
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 search tool's complexity and the existing output schema, the description covers the response envelope, diagnostics, matching behavior, and cross-source caveats. It does not explicitly address when to choose this tool over siblings or provide examples, but the essential invocation and result-interpretation context is present.
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% at the top level, but the nested schema properties have individual descriptions. The tool description adds meaningful semantics for the central text parameter, explaining full-text matching, noise, and re-issuing in kanji/kana, which is not in the schema. It does not discuss filters or pagination, but those are covered in the nested schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Search articles on J-STAGE' and 'Returns the unified response envelope,' clearly stating the verb, resource, and scope. It is distinguishable from siblings like jstage_list_issues and jstage_get_article_by_doi by the search focus, though it does not explicitly contrast itself with 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 description gives practical guidance for interpreting noisy results and re-issuing Latin-script queries in kanji/kana, which helps an agent act after receiving results. However, it does not explicitly state when to prefer this tool over the sibling tools or when not to use it, so usage selection is implied rather than explicit.
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.
3 tool updates
v3.0.0- First observed
jstage_get_article_by_doi - First observed
jstage_list_issues - First observed
jstage_search_articles
TDQS
Scored across 3 tools
Each tool targets a distinct operation: full-text search, DOI resolution, and journal issue navigation. There is no real overlap between query-based retrieval and known-identifier lookup, and list_issues is explicitly separated from article record retrieval.
All tool names follow a consistent jstage_<verb>_<object> pattern using snake_case and a shared prefix. The verbs search, get, and list are predictable and clearly map to their respective actions.
Three tools is at the lower end of a well-scoped range, but each tool earns its place by covering a core workflow. The count feels minimal yet sufficient for a focused J-STAGE article server.
Core discovery workflows are covered: searching articles, resolving a DOI, and navigating journal issues. Minor gaps exist for directly listing articles inside a specific issue or retrieving articles by non-DOI identifiers, but these are workable via search.
Maintenance
Related MCP Connectors
Search 150M+ academic works, journals, and funders via Crossref API.
Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations.
Google Scholar search results, citation counts and citation export formats, as structured JSON.
Wikipedia, Wikidata and Wiktionary as clean JSON, not HTML. 1.9M searchable. Free, no auth.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables querying Japan's national academic database, CiNii Research, for articles, books, dissertations, KAKEN projects, and researcher profiles via seven MCP tools.113MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query Japanese public data (laws, corporations, statistics) from official government APIs, returning normalized English metadata with source attribution.1MIT
- AlicenseAqualityDmaintenanceEnables searching CiNii Research for academic articles, books, grants, and research data, and retrieving metadata for individual items.2MIT
- AlicenseAqualityCmaintenanceEnables scholarly metadata lookups from the Crossref REST API, including works, members, journals, funders, types, licenses, and prefixes, as tools for LLM clients.1841 PyPIMIT