native-devtools-mcp 0.10.1

MCP server for computer use & browser automation — screenshot, OCR, click, type, find_text, Chrome/Electron CDP, template matching. macOS, Windows & Android.
[package]
name = "native-devtools-mcp"
version = "0.10.1"
edition = "2021"
license = "MIT"
description = "MCP server for computer use & browser automation — screenshot, OCR, click, type, find_text, Chrome/Electron CDP, template matching. macOS, Windows & Android."
repository = "https://github.com/sh3ll3x3c/native-devtools-mcp"
keywords = ["mcp", "computer-use", "ui-automation", "android", "screenshot"]
categories = ["development-tools::testing", "accessibility"]
# README demo GIFs (~11 MiB) are repo-only assets; excluding them keeps the
# published crate under crates.io's 10 MiB package-size limit.
exclude = ["*.gif"]

[features]
default = ["find_image_fast", "cdp"]
# Enable both SIMD and parallel optimizations for find_image
find_image_fast = ["find_image_simd", "find_image_parallel"]
find_image_simd = ["dep:wide"]
find_image_parallel = ["dep:rayon"]
cdp = ["dep:chromiumoxide"]

[dependencies]
# MCP SDK
rmcp = { version = "1", features = ["server", "transport-io", "macros"] }
tokio = { version = "1", features = ["full"] }
tokio-util = { version = "0.7", features = ["rt"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"

# Image encoding
base64 = "0.22"
image = { version = "0.25", default-features = false, features = ["png", "jpeg"] }

# Temp files for screenshots
tempfile = "3"

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

# Error handling
thiserror = "2"

# WebSocket client for app debug protocol
tokio-tungstenite = "0.24"
futures-util = "0.3"
url = "2.5"

# Binary verification (verify subcommand)
sha2 = "0.10.9"
ureq = "3"

# Optional dependencies for find_image optimization
rayon = { version = "1.10", optional = true }
wide = { version = "0.7", optional = true }

# CDP browser automation (optional, behind "cdp" feature)
chromiumoxide = { version = "0.9", optional = true, default-features = false }

# Android device control via ADB
adb_client = "3"
quick-xml = "0.39"

# macOS frameworks
[target.'cfg(target_os = "macos")'.dependencies]
core-graphics = "0.24"
core-foundation = "0.10"
cocoa = "0.26"
objc = "0.2"

# Windows dependencies
[target.'cfg(target_os = "windows")'.dependencies]
windows = { version = "0.58", features = [
    "implement",
    "Win32_Foundation",
    "Win32_Graphics_Gdi",
    "Win32_Graphics_Dwm",
    "Win32_UI_WindowsAndMessaging",
    "Win32_UI_Input_KeyboardAndMouse",
    "Win32_UI_HiDpi",
    "Win32_UI_Accessibility",
    "Win32_System_Com",
    "Win32_System_Threading",
    "Win32_System_ProcessStatus",
    "Win32_System_SystemServices",
    "Graphics_Imaging",
    "Media_Ocr",
    "Storage_Streams",
    "Foundation",
    "Foundation_Collections",
]}

[lints.rust]
# Suppress cfg warnings from objc crate macros
unexpected_cfgs = "allow"

[dev-dependencies]
tempfile = "3"
criterion = "0.5"

[[bench]]
name = "find_image_bench"
harness = false