diff options
| author | tanaka takashi <isazaka@gmail.com> | 2026-09-13 14:24:31 +0900 |
|---|---|---|
| committer | tanaka takashi <isazaka@gmail.com> | 2026-09-13 14:24:31 +0900 |
| commit | 0a730584eede23ecd3cced3287806f23fd5b32f9 (patch) | |
| tree | 1f200bfca8131e435642f468592a5c3d089613c0 | |
| parent | 97b34627667fd699f4e0e054533eb89a205a2878 (diff) | |
Bump the project and package versions to 0.3.0 and expose the same version through FastMCP server metadata. Add a regression test that keeps pyproject, package, and MCP server versions aligned.
Add a 0.3.0 changelog covering the AudioContent migration, wav_path removal, isError semantics, security hardening, and other breaking changes. Update README links so project documentation and samples remain accessible from the rendered PyPI description.
Declare MIT and project URLs in package metadata, and restrict source distributions to release documentation, source code, and tests so generated audio, caches, local plans, and unrelated working files cannot leak into published artifacts.
Release verification completed with Ruff, 488 passing tests, uv lock validation, wheel CLI smoke testing, sdist content auditing, and twine checks for both wheel and sdist.
| -rw-r--r-- | CHANGELOG.md | 32 | ||||
| -rw-r--r-- | README.md | 14 | ||||
| -rw-r--r-- | pyproject.toml | 21 | ||||
| -rw-r--r-- | src/mml_composemusic_mcp/__init__.py | 3 | ||||
| -rw-r--r-- | src/mml_composemusic_mcp/server.py | 3 | ||||
| -rw-r--r-- | tests/test_version.py | 16 |
6 files changed, 82 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0e9a35b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,32 @@ +# Changelog + +このプロジェクトの主な変更をリリースごとに記録します。 + +## [0.3.0] - 2026-09-13 + +### Changed + +- `compose_mml`の合成成功時に、WAVのサーバーローカルパスではなくMCP標準の`AudioContent`を返すように変更しました。 +- WAVはファイルサイズにかかわらず`audio/wav`のbase64データとして返します。 +- MCPツール呼び出しの正式な成否判定を`CallToolResult.isError`へ統一しました。 +- composeの`success`とvalidateの`valid`は、各処理の構造化結果として維持します。 +- FastMCPの対応バージョンを`>=3.4.4,<4`へ更新しました。 +- MCPの`serverInfo.version`がパッケージバージョンを返すようにしました。 + +### Security + +- MCPレスポンスから`wav_path`を完全に削除し、サーバー内部のファイルパスを公開しないようにしました。 +- 合成、ファイル出力、音声変換、内部例外のエラー応答から内部パスと例外詳細を除去しました。 + +### Testing + +- `AudioContent`のMIMEタイプとbase64往復を検証するMCP境界テストを追加しました。 +- compose、validate、API入力エラーの`isError`セマンティクスを検証するテストを追加しました。 +- `ResourceLink`を返さないことと、公開結果に`wav_path`が含まれないことを検証するテストを追加しました。 + +### Breaking Changes + +- `compose_mml(action="compose")`の結果から`wav_path`を削除しました。クライアントは`content`内の`AudioContent`からWAVデータを取得してください。 +- composeおよびAPI入力の失敗は、MCPレベルで`isError: true`として返されます。validateが不正なMMLを検出した場合は、検証処理自体は成功しているため`isError: false`、`valid: false`となります。 + +[0.3.0]: https://github.com/takashi000/mml-composemusic-mcp/compare/v0.2.2...v0.3.0 @@ -22,12 +22,12 @@ Pulse 2ch、Triangle 1ch、Noise 1chの構成を持つ簡易2A03 APU風シンセ 実際にLLMを使用してこのMCPツールで作曲させてみたサンプルデータです。 ppmck版 -- [音声](samples/ppmck/output.wav) -- [mml](samples/ppmck/output.mml) +- [音声](https://github.com/takashi000/mml-composemusic-mcp/blob/main/samples/ppmck/output.wav) +- [mml](https://github.com/takashi000/mml-composemusic-mcp/blob/main/samples/ppmck/output.mml) pyxel版 -- [音声](samples/pyxel/output.wav) -- [mml](samples/pyxel/output.mml) +- [音声](https://github.com/takashi000/mml-composemusic-mcp/blob/main/samples/pyxel/output.wav) +- [mml](https://github.com/takashi000/mml-composemusic-mcp/blob/main/samples/pyxel/output.mml) ## 必要環境 @@ -235,7 +235,7 @@ N l8 v10 - `[...]N`: 回数付きリピート - `&`: スラー -値域や正確な文法は[MML構文規則](doc/MML_BNF.md)、MCPの入出力は[MCPツール仕様](doc/mcp.md)、内部構造は[設計書](doc/Design.md)を参照してください。 +値域や正確な文法は[MML構文規則](https://github.com/takashi000/mml-composemusic-mcp/blob/main/doc/MML_BNF.md)、MCPの入出力は[MCPツール仕様](https://github.com/takashi000/mml-composemusic-mcp/blob/main/doc/mcp.md)、内部構造は[設計書](https://github.com/takashi000/mml-composemusic-mcp/blob/main/doc/Design.md)を参照してください。 ## 現在の制約 @@ -263,6 +263,10 @@ uv run mml-composemusic-mcp --output-dir ./data 受理するMML文法を変更する場合は、実装・テストと合わせて`doc/MML_BNF.md`を更新してください。 +## 変更履歴 + +[CHANGELOG.md](https://github.com/takashi000/mml-composemusic-mcp/blob/main/CHANGELOG.md)を参照してください。 + ## ライセンス MIT diff --git a/pyproject.toml b/pyproject.toml index 328f6bc..ac64cc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,14 +1,20 @@ [project] name = "mml-composemusic-mcp" -version = "0.2.2" +version = "0.3.0" description = "MCP server for LLM-driven retro chiptune-style MML composition" readme = "README.md" +license = "MIT" requires-python = ">=3.14" dependencies = [ "fastmcp>=3.4.4,<4", "numpy>=2.0.0", ] +[project.urls] +Homepage = "https://github.com/takashi000/mml-composemusic-mcp" +Repository = "https://github.com/takashi000/mml-composemusic-mcp" +Changelog = "https://github.com/takashi000/mml-composemusic-mcp/blob/main/CHANGELOG.md" + [dependency-groups] dev = [ "hypothesis>=6.0", @@ -23,6 +29,19 @@ build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/mml_composemusic_mcp"] +[tool.hatch.build.targets.sdist] +include = [ + "/CHANGELOG.md", + "/LICENSE", + "/README.md", + "/doc/Design.md", + "/doc/MML_BNF.md", + "/doc/mcp.md", + "/pyproject.toml", + "/src", + "/tests", +] + [tool.ruff] target-version = "py314" line-length = 88 diff --git a/src/mml_composemusic_mcp/__init__.py b/src/mml_composemusic_mcp/__init__.py index e69de29..ecf5eb2 100644 --- a/src/mml_composemusic_mcp/__init__.py +++ b/src/mml_composemusic_mcp/__init__.py @@ -0,0 +1,3 @@ +"""MML Compose Music MCP server package.""" + +__version__ = "0.3.0" diff --git a/src/mml_composemusic_mcp/server.py b/src/mml_composemusic_mcp/server.py index f0c8bd1..e647539 100644 --- a/src/mml_composemusic_mcp/server.py +++ b/src/mml_composemusic_mcp/server.py @@ -11,6 +11,7 @@ from fastmcp.tools import ToolResult from fastmcp.utilities.types import Audio from mcp.types import TextContent +from . import __version__ from .ir import ErrorCode, ErrorDetail, ErrorPhase, NoteSequence from .lexer import tokenize from .parser_ppmck import parse_ppmck @@ -20,7 +21,7 @@ from .semantic_pyxel import analyze_pyxel from .synthesizer import build_channel_summary, synthesize, write_wav from .templates import TEMPLATES, get_template -mcp = FastMCP("mml-composemusic-mcp") +mcp = FastMCP("mml-composemusic-mcp", version=__version__) OUTPUT_DIR = Path("./data") diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 0000000..dbb4b9c --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,16 @@ +"""Release version consistency tests.""" + +import tomllib +from pathlib import Path + +from mml_composemusic_mcp import __version__ +from mml_composemusic_mcp.server import mcp + + +def test_release_versions_match(): + pyproject_path = Path(__file__).parents[1] / "pyproject.toml" + with pyproject_path.open("rb") as pyproject_file: + project_version = tomllib.load(pyproject_file)["project"]["version"] + + assert __version__ == project_version == "0.3.0" + assert mcp.version == __version__ |
