diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml new file mode 100644 index 000000000..45bb24905 --- /dev/null +++ b/.github/workflows/publish-pypi.yml @@ -0,0 +1,76 @@ +name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI + +on: push + +jobs: + build: + name: Build distribution 📦 + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./Server + + steps: + - uses: actions/checkout@v6 + + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + version: "latest" + enable-cache: true + cache-dependency-glob: "Server/uv.lock" + + - name: Build a binary wheel and a source tarball + run: uv build + + - name: Store the distribution packages + uses: actions/upload-artifact@v6 + with: + name: python-package-distributions + path: Server/dist/ + + publish-to-pypi: + name: >- + Publish Python 🐍 distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes + needs: + - build + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/mcpforunityserver + permissions: + id-token: write + + steps: + - name: Download all the dists + uses: actions/download-artifact@v7 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + publish-to-testpypi: + name: Publish Python 🐍 distribution 📦 to TestPyPI + needs: + - build + runs-on: ubuntu-latest + + environment: + name: testpypi + url: https://test.pypi.org/p/mcpforunityserver + + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - name: Download all the dists + uses: actions/download-artifact@v7 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ diff --git a/Server/LICENSE b/Server/LICENSE new file mode 100644 index 000000000..e7f878d1d --- /dev/null +++ b/Server/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 CoplayDev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Server/pyproject.toml b/Server/pyproject.toml index c8138ba35..ea55cbe17 100644 --- a/Server/pyproject.toml +++ b/Server/pyproject.toml @@ -1,8 +1,32 @@ [project] -name = "MCPForUnityServer" +name = "mcpforunityserver" version = "8.2.3" description = "MCP for Unity Server: A Unity package for Unity Editor integration via the Model Context Protocol (MCP)." readme = "README.md" +license = "MIT" +authors = [ + {name = "Marcus Sanatan", email = "msanatan@gmail.com"}, + {name = "David Sarno", email = "david.sarno@gmail.com"}, + {name = "Wu Shutong", email = "martinwfire@gmail.com"} +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Games/Entertainment", + "Topic :: Software Development :: Code Generators", +] +keywords = ["mcp", "unity", "ai", "model context protocol", "gamedev", "unity3d", "automation", "llm", "agent"] requires-python = ">=3.10" dependencies = [ "httpx>=0.27.2", @@ -20,6 +44,10 @@ dev = [ "pytest-asyncio>=0.23", ] +[project.urls] +Repository = "https://github.com/CoplayDev/unity-mcp.git" +Issues = "https://github.com/CoplayDev/unity-mcp/issues" + [project.scripts] mcp-for-unity = "main:main" diff --git a/Server/src/core/telemetry.py b/Server/src/core/telemetry.py index 9579a5de2..74647b5af 100644 --- a/Server/src/core/telemetry.py +++ b/Server/src/core/telemetry.py @@ -34,7 +34,7 @@ HAS_HTTPX = False logger = logging.getLogger("unity-mcp-telemetry") -PACKAGE_NAME = "MCPForUnityServer" +PACKAGE_NAME = "mcpforunityserver" def _version_from_local_pyproject() -> str: @@ -60,7 +60,7 @@ def _version_from_local_pyproject() -> str: version = project_table.get("version") or poetry_table.get("version") if version: return version - raise FileNotFoundError("pyproject.toml not found for MCPForUnityServer") + raise FileNotFoundError("pyproject.toml not found for mcpforunityserver") def get_package_version() -> str: