# Cargo workspace root for mail-mcp. # # One crate today (mail-mcp), workspace shape so we can grow without # rework. Same pattern as aldabra. # # Workspace deps pinned here; each crate references with `foo = { workspace = true }`. [workspace] resolver = "2" members = ["crates/mail-mcp"] [workspace.package] version = "0.1.0" edition = "2021" license = "MIT" repository = "http://192.168.0.5:3001/Sulkta-Coop/mail-mcp" authors = ["Cobb ", "Kayos "] [workspace.dependencies] tokio = { version = "1", features = ["full"] } # MCP — same crate aldabra uses. Pinned to 0.1 series; bump together # across repos when we move. rmcp = { version = "0.1", features = ["server", "transport-io"] } schemars = "0.8" # SMTP — lettre handles RFC-5322 headers (Date, Message-ID), STARTTLS, # multipart/alternative + multipart/mixed natively. rustls-tls so we # don't pull openssl. No `hostname` feature — we override Message-ID # with our own UUID@, so lettre never needs the system # hostname. lettre = { version = "0.11", default-features = false, features = [ "tokio1-rustls-tls", "smtp-transport", "builder", ] } # IMAP — async-imap is tokio-native and supports UID-based addressing # (which we use throughout the API surface). async-imap = { version = "0.10", default-features = false, features = ["runtime-tokio"] } # tokio-rustls default-features pulls in aws-lc-rs via rustls's default # feature chain. We use `ring` exclusively (installed once in main.rs); # turn off defaults and add back only the small pieces we want. tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "tls12", "ring"] } rustls = { version = "0.23", default-features = false, features = ["std", "tls12", "ring"] } rustls-pki-types = "1" webpki-roots = "0.26" # Email parsing on the read side. mail-parser is fast, no_std-friendly, # and handles the RFC-5322 + MIME zoo without surprises. mail-parser = "0.9" # Config + serde toml = "0.8" serde = { version = "1", features = ["derive"] } serde_json = "1" # UUID for Message-ID generation when lettre's auto isn't appropriate # (we want our own domain in the Message-ID, not lettre's local-hostname # default). uuid = { version = "1", features = ["v4"] } # Base64 for attachments base64 = "0.22" # Errors — anyhow at module boundaries; rmcp tool methods return # `Result` and convert via the IntoMcpError trait. anyhow = "1" # Stream adapter (.next() on async-imap fetch streams) futures = "0.3" # RFC-3339 timestamps for SendOutput.sent_at and parsed header dates. # default-features=false keeps us off the system-locale crate; we only # need the UTC clock + serialization helpers. chrono = { version = "0.4", default-features = false, features = ["clock"] } # Logging — stderr only, never stdout (stdio is the MCP transport). tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Dirs lookup for `~/.config/mail-mcp/config.toml` default path dirs = "5" # Shell-style env-var expansion for the `password_file` setting # (`~/.config/...` paths). shellexpand is small + maintained. shellexpand = "3"