Jstage
FreeNot checkedExposes J-STAGE WebAPI as four tools for searching articles, issues, journals, and resolving DOIs, returning bilingual JSON with attribution.
About
Exposes J-STAGE WebAPI as four tools for searching articles, issues, journals, and resolving DOIs, returning bilingual JSON with attribution.
README
A FastMCP stdio server exposing the J-STAGE WebAPI as three tools for use with Claude Desktop.
The v2 record-retrieval tools now return one structured JSON response envelope (shared with cinii-mcp) instead of v1's ad-hoc JSON. The envelope moves the interpretation keys — how a query was matched, how broad the result is, what script was searched — into typed fields. See Response format below. v2 also ships a companion
mediation.pythat must sit besideserver.py, and retiresjstage_search_journals(see Limitations).
Tools
| Tool | Purpose | Returns |
|---|---|---|
jstage_search_articles |
Full-text / author / title / journal search across J-STAGE articles | response envelope |
jstage_get_article_by_doi |
Resolve a J-STAGE DOI to its article record | response envelope |
jstage_list_issues |
Volume & issue spine for a known title, ISSN, or cdjournal |
structural JSON (navigation) |
The two record-retrieval tools emit the unified envelope below.
jstage_list_issues is a navigation aid and returns a bounded structural list
(total_results, returned, truncated, volumes), not the envelope. Every
response preserves the JST attribution.
Response format
jstage_search_articles and jstage_get_article_by_doi return:
{
"server": "jstage",
"operation": "search_articles",
"query": { "input_terms": "...", "normalized": "...",
"script": "han|kana|han_kana|latin|mixed", "params": { ... } },
"matching_mode": "full_text_broad", // J-STAGE matches full text, loosely
"result": { "total": 0, "returned": 0, "start": 1,
"breadth": "none|narrow|broad|very_broad" },
"items": [ { "title": {"ja":..,"en":..,"romanized":..},
"authors": [{"ja":..,"en":..}],
"source": {"journal_ja":..,"journal_en":..,"volume":..,"issue":..,"pages":..,"year":..},
"ids": {"doi":..,"crid":..,"naid":..,"url_ja":..,"url_en":..},
"matched_in": "fulltext|metadata", "record_type": "article" } ],
"diagnostics": [ { "level": "info|warning|error", "code": "...", "message": "...", "hint": "..." } ],
"coverage_note": "...|null",
"receipt": { "issued_at": "<ISO-8601>", "query_hash": "sha256:...", "result_ids": [ ... ] },
"attribution": "Powered by J-STAGE (https://www.jstage.jst.go.jp/)"
}
Diagnostic codes: OK, BROAD_FULLTEXT (a loose full-text match returned a large,
likely-noisy set — read the count as noisy, not as the size of a literature),
SCRIPT_LATIN_QUERY (a romaji query matched romanized metadata only; re-issue in
kanji/kana), LITERAL_COMPOUND_EMPTY (no usable result for this rendering),
API_ERROR, TRANSPORT_ERROR. The receipt is designed to be logged so a
search can be reconstructed.
Install (Windows, alongside CiNii / OpenAlex / Semantic Scholar)
The server is server.py plus a companion mediation.py (the shared response
envelope; pure standard library, no extra dependency). Both files must live in
the same directory. Use a dedicated virtual environment so it doesn't collide
with other MCP stacks.
# from the directory containing server.py and mediation.py
py -3.11 -m venv .venv
.venv\Scripts\activate
pip install -e .
Verify the server boots:
.venv\Scripts\python.exe server.py --help
Claude Desktop configuration
Add an entry to %APPDATA%\Claude\claude_desktop_config.json under mcpServers. Adjust the absolute paths to match your install location.
{
"mcpServers": {
"jstage": {
"command": "C:\\path\\to\\jstage-mcp\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\jstage-mcp\\server.py"]
}
}
}
Restart Claude Desktop. The three tools should appear under "jstage" in the tool list.
Rate limiting
The server enforces a one-second minimum interval between outbound requests in line with JST's prohibition on bulk downloads. The limit is per-process; if you run multiple Claude Desktop sessions concurrently you may exceed it, so don't.
Limitations
jstage_search_journalsis retired in v2. It was a fallback for the journal-search endpoint (service=4) that J-STAGE announced on 26 March 2026 but the public API still rejects withERR_004. Rather than ship an envelope around a stub, the tool is deferred; it will return whenservice=4is live.jstage_list_issuesis bounded. A long-running journal can list hundreds of volumes; the tool caps the returned list (returned,truncated,total_results) to avoid oversized responses.jstage_get_article_by_doirequires J-STAGE-issued DOIs. The WebAPI does not expose adoi=query parameter. The tool decomposes DOIs that follow J-STAGE's pattern (10.<registrant>/<cdjournal>.<vol>.<no>_<page>) intocdjournal+voland matches the result against the response. For DOIs outside that pattern it reportsLITERAL_COMPOUND_EMPTYwith the doi.org resolution URL.- Commercial use requires registration. Per the JST Terms of Use, commercial use needs an application form sent to
[email protected]. Research and teaching use does not.
API notes
Endpoint: https://api.jstage.jst.go.jp/searchapi/do
Service codes used:
service=2— Volumes/issues (jstage_list_issues)service=3— Article search (jstage_search_articles,jstage_get_article_by_doi)service=4— Journal search (documented, not yet live; see Limitations)
Valid article-search query parameters confirmed against the live API:
material, article, author, affil, keyword, abst, text, issn, cdjournal, vol, no, pubyearfrom, pubyearto, start, count.
Attribution
Powered by J-STAGE
This string is included in every tool response.
Citation
If this software supports your research, please cite it. See CITATION.cff, or use the "Cite this repository" button on GitHub.
License
MIT © 2026 Christopher Gerteis.
This license covers the server code only. It grants no rights over J-STAGE content or the J-STAGE WebAPI, which remain governed by JST's Terms of Use.
Disclaimer
A research tool, maintained on a best-effort basis and provided "as is", without warranty. Not affiliated with or endorsed by the Japan Science and Technology Agency. JST does not provide support for the WebAPI.
Author
Dr Christopher Gerteis, SOAS University of London.
Installing Jstage
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/ckgerteis/jstage-mcpFAQ
Is Jstage MCP free?
Yes, Jstage MCP is free — one-click install via Unyly at no cost.
Does Jstage need an API key?
No, Jstage runs without API keys or environment variables.
Is Jstage hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Jstage in Claude Desktop, Claude Code or Cursor?
Open Jstage on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Jstage with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
