[package] name = "kberg" version = "0.1.0" edition = "2024" description = "MCP bridge for connecting local LLMs to desktop apps. Provider-agnostic agent loop over a Streamable HTTP MCP server." license = "MIT" readme = "README.md" keywords = ["mcp", "llm", "ollama", "tools", "agent"] categories = ["api-bindings", "development-tools"] [features] default = ["server", "ollama"] server = ["dep:axum", "dep:tokio", "dep:tokio-stream", "dep:tower", "dep:tower-http"] ollama = ["dep:reqwest", "dep:tokio"] [dependencies] serde = { version = "1", features = ["derive"] } serde_json = "1" thiserror = "2" tracing = "0.1" async-trait = "0.1" uuid = { version = "1", features = ["v4", "serde"] } axum = { version = "0.8", optional = true } tower = { version = "0.5", optional = true } tower-http = { version = "0.7", optional = true, features = ["trace"] } reqwest = { version = "0.13", optional = true, features = ["json"] } tokio = { version = "1", optional = true, features = ["rt-multi-thread", "macros", "net", "sync", "time", "io-std", "io-util"] } tokio-stream = { version = "0.1", optional = true, features = ["sync"] } [dev-dependencies] tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "sync", "time"] } tracing-subscriber = { version = "0.3", features = ["env-filter"] } reqwest = { version = "0.13", features = ["json"] } [lints.rust] unused = "warn" unreachable_pub = "warn" [lints.clippy] pedantic = { level = "warn", priority = -1 } # Allow-list tuned from a measured breakdown across server/multithreaded/pter # (2026-07-22). These are the high-churn / low-signal pedantic lints; everything # else in `pedantic` stays a warning. Keep this block identical across repos. module_name_repetitions = "allow" # Doc lints. No docs-completeness push is underway. missing_errors_doc = "allow" missing_panics_doc = "allow" doc_markdown = "allow" # Numeric casts. Endemic and mostly intentional in size and byte math. cast_possible_truncation = "allow" cast_sign_loss = "allow" cast_precision_loss = "allow" cast_possible_wrap = "allow" cast_lossless = "allow" # Subjective structure and style nags. High churn, low signal. must_use_candidate = "allow" too_many_lines = "allow" struct_excessive_bools = "allow" similar_names = "allow" items_after_statements = "allow" single_match_else = "allow" # Frequent false-positives in TUI and router-heavy code. match_same_arms = "allow" unnecessary_wraps = "allow" type_complexity = "allow"