Scaffold: package, settings, errors, server factory, shared contracts
protocol/types.py and arsdk/types.py are the interfaces the parallel streams build against: command/arg/enum/expectation specs and the safety tiers on one side, frame encoding and the buffer conventions on the other. Logging goes to stderr throughout, since stdout carries JSON-RPC. That is also why this package will speak ARSDK itself rather than through pyparrot, which prints from its receive thread.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
[project]
|
||||
name = "mcbebop"
|
||||
version = "2026.10.02"
|
||||
description = "MCP server for the Parrot Bebop 2 drone: telemetry, camera, files, and every ARSDK command"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.12"
|
||||
license = "MIT"
|
||||
authors = [{name = "Ryan Malloy", email = "ryan@supported.systems"}]
|
||||
keywords = ["mcp", "drone", "parrot", "bebop", "arsdk", "fastmcp"]
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Topic :: Scientific/Engineering",
|
||||
]
|
||||
dependencies = [
|
||||
# 4.x is the current family; <5 because FastMCP has moved import paths
|
||||
# across majors before (mcvnc was broken by the 3 -> 4 move).
|
||||
"fastmcp>=4.0.10,<5",
|
||||
"pydantic-settings>=2.7",
|
||||
"zeroconf>=0.147", # mDNS discovery of _arsdk-090c._udp
|
||||
"pillow>=11.0", # downscale camera frames before they reach the model
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://warehack.ing"
|
||||
Repository = "https://git.supported.systems/rsp2k/mcbebop"
|
||||
|
||||
[project.scripts]
|
||||
mcbebop = "mcbebop.server:main"
|
||||
|
||||
[build-system]
|
||||
requires = ["uv_build>=0.11.3,<0.12.0"]
|
||||
build-backend = "uv_build"
|
||||
|
||||
[tool.uv.build-backend]
|
||||
source-exclude = ["CLAUDE.md", ".env", ".env.*", ".mcp.json", "tests", "captures"]
|
||||
|
||||
[dependency-groups]
|
||||
dev = ["ruff>=0.16", "pytest>=8.0", "pytest-asyncio>=0.25"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
asyncio_mode = "auto"
|
||||
markers = ["drone: needs a real Bebop 2 on the network (run with '-m drone')"]
|
||||
addopts = "-m 'not drone'"
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 110
|
||||
target-version = "py312"
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = ["E", "F", "I", "W", "UP", "B", "SIM", "RUF"]
|
||||
Reference in New Issue
Block a user