diff --git a/README.md b/README.md index f8a0791..da8dbcd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# MCP ESPTool Server +# mcesptool -FastMCP server providing AI-powered ESP32/ESP8266 development workflows through natural language interfaces. +FastMCP server for ESP32/ESP8266 development workflows via Model Context Protocol. ## Features @@ -18,17 +18,17 @@ FastMCP server providing AI-powered ESP32/ESP8266 development workflows through ```bash # Install with uvx (recommended) -uvx mcp-esptool-server +uvx mcesptool # Or install in project -uv add mcp-esptool-server +uv add mcesptool ``` ### Claude Code Integration ```bash # Add to Claude Code -claude mcp add mcp-esptool-server "uvx mcp-esptool-server" +claude mcp add mcesptool "uvx mcesptool" ``` ### Development Setup diff --git a/pyproject.toml b/pyproject.toml index bfa5b4a..5543aac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,14 +3,14 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "mcp-esptool-server" +name = "mcesptool" version = "2025.09.28.1" description = "FastMCP server for ESP32/ESP8266 development with esptool integration" readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } authors = [ - { name = "ESP Development Team", email = "dev@example.com" } + { name = "Ryan Malloy", email = "ryan@supported.systems" } ] keywords = [ @@ -71,17 +71,15 @@ production = [ ] [project.scripts] -mcp-esptool-server = "mcp_esptool_server.server:main" -esptool-mcp = "mcp_esptool_server.cli:cli" +mcesptool = "mcesptool.server:main" [project.urls] -Homepage = "https://github.com/yourusername/mcp-esptool-server" -Repository = "https://github.com/yourusername/mcp-esptool-server" -Issues = "https://github.com/yourusername/mcp-esptool-server/issues" -Documentation = "https://yourusername.github.io/mcp-esptool-server" +Homepage = "https://git.supported.systems/MCP/mcesptool" +Repository = "https://git.supported.systems/MCP/mcesptool" +Issues = "https://git.supported.systems/MCP/mcesptool/issues" [tool.hatch.build.targets.wheel] -packages = ["src/mcp_esptool_server"] +packages = ["src/mcesptool"] [tool.ruff] line-length = 100 @@ -109,7 +107,7 @@ strict_optional = true testpaths = ["tests"] asyncio_mode = "auto" addopts = [ - "--cov=src/mcp_esptool_server", + "--cov=src/mcesptool", "--cov-report=html", "--cov-report=term-missing", "--cov-fail-under=85" @@ -125,4 +123,4 @@ exclude_lines = [ "def __repr__", "raise AssertionError", "raise NotImplementedError", -] \ No newline at end of file +] diff --git a/src/mcp_esptool_server/__init__.py b/src/mcesptool/__init__.py similarity index 100% rename from src/mcp_esptool_server/__init__.py rename to src/mcesptool/__init__.py diff --git a/src/mcp_esptool_server/components/__init__.py b/src/mcesptool/components/__init__.py similarity index 100% rename from src/mcp_esptool_server/components/__init__.py rename to src/mcesptool/components/__init__.py diff --git a/src/mcp_esptool_server/components/chip_control.py b/src/mcesptool/components/chip_control.py similarity index 100% rename from src/mcp_esptool_server/components/chip_control.py rename to src/mcesptool/components/chip_control.py diff --git a/src/mcp_esptool_server/components/diagnostics.py b/src/mcesptool/components/diagnostics.py similarity index 100% rename from src/mcp_esptool_server/components/diagnostics.py rename to src/mcesptool/components/diagnostics.py diff --git a/src/mcp_esptool_server/components/firmware_builder.py b/src/mcesptool/components/firmware_builder.py similarity index 100% rename from src/mcp_esptool_server/components/firmware_builder.py rename to src/mcesptool/components/firmware_builder.py diff --git a/src/mcp_esptool_server/components/flash_manager.py b/src/mcesptool/components/flash_manager.py similarity index 100% rename from src/mcp_esptool_server/components/flash_manager.py rename to src/mcesptool/components/flash_manager.py diff --git a/src/mcp_esptool_server/components/ota_manager.py b/src/mcesptool/components/ota_manager.py similarity index 100% rename from src/mcp_esptool_server/components/ota_manager.py rename to src/mcesptool/components/ota_manager.py diff --git a/src/mcp_esptool_server/components/partition_manager.py b/src/mcesptool/components/partition_manager.py similarity index 100% rename from src/mcp_esptool_server/components/partition_manager.py rename to src/mcesptool/components/partition_manager.py diff --git a/src/mcp_esptool_server/components/production_tools.py b/src/mcesptool/components/production_tools.py similarity index 100% rename from src/mcp_esptool_server/components/production_tools.py rename to src/mcesptool/components/production_tools.py diff --git a/src/mcp_esptool_server/components/qemu_manager.py b/src/mcesptool/components/qemu_manager.py similarity index 100% rename from src/mcp_esptool_server/components/qemu_manager.py rename to src/mcesptool/components/qemu_manager.py diff --git a/src/mcp_esptool_server/components/security_manager.py b/src/mcesptool/components/security_manager.py similarity index 100% rename from src/mcp_esptool_server/components/security_manager.py rename to src/mcesptool/components/security_manager.py diff --git a/src/mcp_esptool_server/config.py b/src/mcesptool/config.py similarity index 100% rename from src/mcp_esptool_server/config.py rename to src/mcesptool/config.py diff --git a/src/mcp_esptool_server/resources/qemu/.gitkeep b/src/mcesptool/resources/qemu/.gitkeep similarity index 100% rename from src/mcp_esptool_server/resources/qemu/.gitkeep rename to src/mcesptool/resources/qemu/.gitkeep diff --git a/src/mcp_esptool_server/server.py b/src/mcesptool/server.py similarity index 100% rename from src/mcp_esptool_server/server.py rename to src/mcesptool/server.py diff --git a/tests/test_config.py b/tests/test_config.py index d09c947..07284e1 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -8,7 +8,7 @@ from pathlib import Path import pytest -from mcp_esptool_server.config import ESPToolServerConfig +from mcesptool.config import ESPToolServerConfig def test_config_from_environment(): diff --git a/tests/test_middleware.py b/tests/test_middleware.py index 1911fac..99f78ad 100644 --- a/tests/test_middleware.py +++ b/tests/test_middleware.py @@ -6,7 +6,7 @@ from unittest.mock import AsyncMock import pytest -from mcp_esptool_server.middleware import LoggerInterceptor, MiddlewareFactory +from mcesptool.middleware import LoggerInterceptor, MiddlewareFactory class MockContext: diff --git a/tests/test_qemu_manager.py b/tests/test_qemu_manager.py index 232bfb6..048d396 100644 --- a/tests/test_qemu_manager.py +++ b/tests/test_qemu_manager.py @@ -10,13 +10,13 @@ from unittest.mock import AsyncMock, MagicMock import pytest -from mcp_esptool_server.components.qemu_manager import ( +from mcesptool.components.qemu_manager import ( CHIP_MACHINES, QemuInstance, QemuManager, _create_blank_flash, ) -from mcp_esptool_server.config import ESPToolServerConfig +from mcesptool.config import ESPToolServerConfig @pytest.fixture diff --git a/uv.lock b/uv.lock index 5fc7159..9ff6874 100644 --- a/uv.lock +++ b/uv.lock @@ -885,29 +885,7 @@ wheels = [ ] [[package]] -name = "mcp" -version = "1.15.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "httpx" }, - { name = "httpx-sse" }, - { name = "jsonschema" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "python-multipart" }, - { name = "pywin32", marker = "sys_platform == 'win32'" }, - { name = "sse-starlette" }, - { name = "starlette" }, - { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0c/9e/e65114795f359f314d7061f4fcb50dfe60026b01b52ad0b986b4631bf8bb/mcp-1.15.0.tar.gz", hash = "sha256:5bda1f4d383cf539d3c035b3505a3de94b20dbd7e4e8b4bd071e14634eeb2d72", size = 469622, upload-time = "2025-09-25T15:39:51.995Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/82/4d0df23d5ff5bb982a59ad597bc7cb9920f2650278ccefb8e0d85c5ce3d4/mcp-1.15.0-py3-none-any.whl", hash = "sha256:314614c8addc67b663d6c3e4054db0a5c3dedc416c24ef8ce954e203fdc2333d", size = 166963, upload-time = "2025-09-25T15:39:50.538Z" }, -] - -[[package]] -name = "mcp-esptool-server" +name = "mcesptool" version = "2025.9.28.1" source = { editable = "." } dependencies = [ @@ -976,6 +954,28 @@ requires-dist = [ ] provides-extras = ["dev", "idf", "testing", "production"] +[[package]] +name = "mcp" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/9e/e65114795f359f314d7061f4fcb50dfe60026b01b52ad0b986b4631bf8bb/mcp-1.15.0.tar.gz", hash = "sha256:5bda1f4d383cf539d3c035b3505a3de94b20dbd7e4e8b4bd071e14634eeb2d72", size = 469622, upload-time = "2025-09-25T15:39:51.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/82/4d0df23d5ff5bb982a59ad597bc7cb9920f2650278ccefb8e0d85c5ce3d4/mcp-1.15.0-py3-none-any.whl", hash = "sha256:314614c8addc67b663d6c3e4054db0a5c3dedc416c24ef8ce954e203fdc2333d", size = 166963, upload-time = "2025-09-25T15:39:50.538Z" }, +] + [[package]] name = "mdurl" version = "0.1.2"