[project] name = "onsense" # PyPI 배포명·import 패키지·CLI 모두 onsense (PyPI/npm/GitHub 전 네임스페이스 가용 확인) version = "0.3.20" description = "Turn your Android phone into a camera and sensor source for PC AI agents (onSense MCP broker)" readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } authors = [{ name = "shdev" }] keywords = ["mcp", "camera", "android", "ai-agent", "claude", "codex", "sensor", "local"] classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Operating System :: OS Independent", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Multimedia :: Video :: Capture", "Topic :: Utilities", "Environment :: Console", "Intended Audience :: Developers", ] dependencies = [ # 상한 필수: mcp 2.0 에서 `mcp.server.fastmcp` 가 제거되어 serve 가 import 단계에서 죽는다. # 상한 없이 배포하면 신규 설치 전부가 즉시 고장난다(2026-07 실사고). 2.x 대응 후에만 상한을 올린다. # 회귀 방지: tests/test_dependency_pin.py + .github/workflows/ci.yml(canary) "mcp>=1.2.0,<2", "httpx>=0.27", "zeroconf>=0.131", "qrcode>=7.4", "cryptography>=42", ] [project.urls] Homepage = "https://hufirst.github.io/onsense/" Repository = "https://github.com/hufirst/onsense" Issues = "https://github.com/hufirst/onsense/issues" "Google Play" = "https://play.google.com/store/apps/details?id=com.shdev.onsense" [project.optional-dependencies] test = ["pytest>=7"] # 사용법: # uvx onsense pair # 폰과 페어링 + Claude Code에 MCP 자동 등록 (한 줄) # uvx onsense doctor # Python/uv/mcp/네트워크/폰 도달 진단 # uvx onsense serve # MCP 서버(stdio) — AI 클라이언트가 호출 [project.scripts] onsense = "onsense.cli:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["onsense"] # /onsense 슬래시 명령 템플릿(.md)을 휠에 포함 — pair가 ~/.claude/commands/ 로 설치 artifacts = ["onsense/commands/*.md"] force-include = { "onsense/commands/onsense.md" = "onsense/commands/onsense.md" } [tool.hatch.build.targets.sdist] # README 히어로 GIF는 절대 URL(github raw)로 참조 → 로컬 docs 사본은 sdist에서 제외(패키지 경량화) exclude = ["docs"]