diff --git a/CHANGELOG.ja.md b/CHANGELOG.ja.md index 73af6d1..045da9d 100644 --- a/CHANGELOG.ja.md +++ b/CHANGELOG.ja.md @@ -10,6 +10,13 @@ ## [Unreleased] +## [0.0.2] — 2026-08-29 + +**セキュリティ修正の版。** ドキュメントどおりに使っているクライアントには何も変わらない。 +変わるのは、探しに行ったときに届く先である。このうち1件は実際に成立していた—— +`download_file` は、中身が URL のファイルを上げるだけで SSRF にできた。残りは、 +開いてはいたがまだ露出していなかった構造を閉じたものである。 + ### Security - **`TOOL_SCOPES` に書き忘れたツールが未認証で開かなくなった。** `TOOL_SCOPES.get()` は @@ -112,6 +119,7 @@ - **TLS 検証は既定で有効。** 切るには `MCP_TLS_INSECURE=1` が要る。 - デモ利用者は `MCP_DEMO_USERS=yes` を付けない限り作らない(パスワードが弱いため)。 -[Unreleased]: https://github.com/RCOSDP/invenio-mcp/compare/v0.0.1...HEAD +[Unreleased]: https://github.com/RCOSDP/invenio-mcp/compare/v0.0.2...HEAD +[0.0.2]: https://github.com/RCOSDP/invenio-mcp/compare/v0.0.1...v0.0.2 [0.0.1]: https://github.com/RCOSDP/invenio-mcp/releases/tag/v0.0.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index a5b1dc4..3b21644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,14 @@ as breaking when the consumer is a language model rather than a compiler. ## [Unreleased] +## [0.0.2] — 2026-08-29 + +**A security release.** Nothing changes for a client that was using the servers as +documented; what changes is what a client could reach if it went looking. One of these +was reachable in practice — `download_file` could be turned into an SSRF by uploading a +file whose contents are a URL. The rest closed structures that were open but not yet +exposed. + ### Security - **A tool missing from `TOOL_SCOPES` no longer defaults to public.** `TOOL_SCOPES.get()` @@ -125,6 +133,7 @@ REST API — no extension to install on the repository side. - **TLS verification is on by default.** Turning it off takes `MCP_TLS_INSECURE=1`. - Demo users are not created unless `MCP_DEMO_USERS=yes`; their passwords are weak. -[Unreleased]: https://github.com/RCOSDP/invenio-mcp/compare/v0.0.1...HEAD +[Unreleased]: https://github.com/RCOSDP/invenio-mcp/compare/v0.0.2...HEAD +[0.0.2]: https://github.com/RCOSDP/invenio-mcp/compare/v0.0.1...v0.0.2 [0.0.1]: https://github.com/RCOSDP/invenio-mcp/releases/tag/v0.0.1 diff --git a/docs/project/versioning.ja.md b/docs/project/versioning.ja.md index a49678d..9068f9d 100644 --- a/docs/project/versioning.ja.md +++ b/docs/project/versioning.ja.md @@ -9,7 +9,7 @@ invenio-mcp は[セマンティックバージョニング 2.0.0](https://semver 出すたびに古くなるからで、[変更履歴](changelog.md)にある。 ```bash -python3 stdio/server.py --version # invenio-mcp stdio server 0.0.1 +python3 stdio/server.py --version # invenio-mcp stdio server # HTTP 版は起動時の表示に出る ``` @@ -83,7 +83,7 @@ python3 stdio/server.py --version # invenio-mcp stdio server 0.0.1 ## 出し方 ```bash -# 1. 両方のサーバの版を上げ、変更履歴を両言語で書く +# 1. 両方のサーバの版を上げ、[Unreleased] を新しい版へ移す(両言語とも) vim http/mcp_server.py stdio/server.py CHANGELOG.md CHANGELOG.ja.md # 2. CI が見るものを先に見る @@ -91,7 +91,7 @@ python3 tools/gen_tool_reference.py --check mkdocs build --strict # 3. タグを打つ -git tag -a v0.0.2 -m "v0.0.2" && git push origin v0.0.2 +git tag -a v0.0.3 -m "v0.0.3" && git push origin v0.0.3 ``` リリースのワークフローは、タグが**両方**のサーバの `__version__` と一致すること、 diff --git a/docs/project/versioning.md b/docs/project/versioning.md index cca8d86..8f56a1f 100644 --- a/docs/project/versioning.md +++ b/docs/project/versioning.md @@ -10,7 +10,7 @@ written on this page**, because it would go stale at every release; it is in the [changelog](changelog.md). ```bash -python3 stdio/server.py --version # invenio-mcp stdio server 0.0.1 +python3 stdio/server.py --version # invenio-mcp stdio server # the HTTP server prints it in the startup banner ``` @@ -88,7 +88,7 @@ Until then, pin an exact version. ## Releasing ```bash -# 1. Bump both servers and write the changelog in both languages +# 1. Bump both servers and move [Unreleased] into the new version, in both languages vim http/mcp_server.py stdio/server.py CHANGELOG.md CHANGELOG.ja.md # 2. Check what CI will check @@ -96,7 +96,7 @@ python3 tools/gen_tool_reference.py --check mkdocs build --strict # 3. Tag -git tag -a v0.0.2 -m "v0.0.2" && git push origin v0.0.2 +git tag -a v0.0.3 -m "v0.0.3" && git push origin v0.0.3 ``` The release workflow verifies that the tag matches `__version__` in **both** servers and diff --git a/docs/quickstart.ja.md b/docs/quickstart.ja.md index 1d27fb9..e4aa26e 100644 --- a/docs/quickstart.ja.md +++ b/docs/quickstart.ja.md @@ -39,7 +39,7 @@ docker compose up -d --build ``` MCP リソースサーバ: http://0.0.0.0:9100/mcp - 版 : 0.0.1 + 版 : 0.0.2 canonical URI (RFC 8707 resource) : http://127.0.0.1:9100/mcp 認証方式 (MCP_AUTH_MODE) : invenio 言語 (MCP_LANG) : ja(利用可能: en ja) diff --git a/docs/quickstart.md b/docs/quickstart.md index 28caf5d..ef63d10 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -40,7 +40,7 @@ The banner tells you what it decided: ``` MCP resource server: http://0.0.0.0:9100/mcp - version : 0.0.1 + version : 0.0.2 canonical URI (RFC 8707 resource) : http://127.0.0.1:9100/mcp auth mode (MCP_AUTH_MODE) : invenio language (MCP_LANG) : en (available: en ja) diff --git a/http/mcp_server.py b/http/mcp_server.py index 5a02dd6..23f34eb 100644 --- a/http/mcp_server.py +++ b/http/mcp_server.py @@ -48,7 +48,7 @@ # セマンティックバージョニング(https://semver.org/lang/ja/)。 # 何を破壊的変更とみなすかは docs/about/versioning.md に書いてある。 # stdio/server.py の __version__ と揃える(CI が一致を検査する)。 -__version__ = "0.0.1" +__version__ = "0.0.2" # ------------------------------------------------------------------ i18n # 利用者(と LLM)に見える文字列は locales/.json に置く。ツールの説明・ diff --git a/stdio/server.py b/stdio/server.py index dfa6f14..f23a3b2 100644 --- a/stdio/server.py +++ b/stdio/server.py @@ -32,7 +32,7 @@ # セマンティックバージョニング(https://semver.org/lang/ja/)。 # 何を破壊的変更とみなすかは docs/about/versioning.md に書いてある。 # http/mcp_server.py の __version__ と揃える(CI が一致を検査する)。 -__version__ = "0.0.1" +__version__ = "0.0.2" # ---- 設定 ---- _HERE = os.path.dirname(os.path.abspath(__file__))