summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-09-13 14:24:31 +0900
committertanaka takashi <isazaka@gmail.com>2026-09-13 14:24:31 +0900
commit0a730584eede23ecd3cced3287806f23fd5b32f9 (patch)
tree1f200bfca8131e435642f468592a5c3d089613c0
parent97b34627667fd699f4e0e054533eb89a205a2878 (diff)
chore(release): prepare version 0.3.0HEADv0.3.0main
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.md32
-rw-r--r--README.md14
-rw-r--r--pyproject.toml21
-rw-r--r--src/mml_composemusic_mcp/__init__.py3
-rw-r--r--src/mml_composemusic_mcp/server.py3
-rw-r--r--tests/test_version.py16
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
diff --git a/README.md b/README.md
index bd55daa..3a23e78 100644
--- a/README.md
+++ b/README.md
@@ -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__