content: [package]
  name = "rmcp"
  license = { workspace = true }
  version = { workspace = true }
  edition = { workspace = true }
  repository = { workspace = true }
  homepage = { workspace = true }
  readme = { workspace = true }
  description = "Rust SDK for Model Context Protocol"
  documentation = "https://docs.rs/rmcp"
  
  [package.metadata.docs.rs]
  all-features = true
  rustdoc-args = ["--cfg", "docsrs"]
  
  [dependencies]
  serde = { version = "1.0", features = ["derive", "rc"] }
  serde_json = "1.0"
  thiserror = "2"
  tokio = { version = "1", features = ["sync", "macros", "rt", "time"] }
  futures = "0.3"
  tracing = { version = "0.1" }
  tokio-util = { version = "0.7" }
  pin-project-lite = "0.2"
  paste = { version = "1", optional = true }
  
  # oauth2 support
  oauth2 = { version = "5.0", optional = true }
  
  # for auto generate schema
  schemars = { version = "1.0", optional = true, features = ["chrono04"] }
  
  # for image encoding
  base64 = { version = "0.22", optional = true }
  
  # for SSE client
  reqwest = { version = "0.12", default-features = false, features = [
    "json",
    "stream",
  ], optional = true }
  
  sse-stream = { version = "0.2", optional = true }
  
  http = { version = "1", optional = true }
  url = { version = "2.4", optional = true }
  
  # For tower compatibility
  tower-service = { version = "0.3", optional = true }
  
  # for child process transport
  process-wrap = { version = "8.2", features = ["tokio1"], optional = true }
  
  # for ws transport
  # tokio-tungstenite ={ version = "0.26", optional = true }
  
  # for http-server transport
  axum = { version = "0.8", features = [], optional = true }
  rand = { version = "0.9", optional = true }
  tokio-stream = { version = "0.1", optional = true }
  uuid = { version = "1", features = ["v4"], optional = true }
  http-body = { version = "1", optional = true }
  http-body-util = { version = "0.1", optional = true }
  bytes = { version = "1", optional = true }
  # macro
  rmcp-macros = { workspace = true, optional = true }
  [target.'cfg(not(all(target_family = "wasm", target_os = "unknown")))'.dependencies]
  chrono = { version = "0.4.38", features = ["serde"] }
  
  [target.'cfg(all(target_family = "wasm", target_os = "unknown"))'.dependencies]
  chrono = { version = "0.4.38", default-features = false, features = [
    "serde",
    "clock",
    "std",
    "oldtime",
  ] }
  
  [features]
  default = ["base64", "macros", "server"]
  client = ["dep:tokio-stream"]
  server = ["transport-async-rw", "dep:schemars"]
  macros = ["dep:rmcp-macros", "dep:paste"]
  elicitation = []
  
  # reqwest http client
  __reqwest = ["dep:reqwest"]
  
  reqwest = ["__reqwest", "reqwest?/rustls-tls"]
  
  reqwest-tls-no-provider = ["__reqwest", "reqwest?/rustls-tls-no-provider"]
  
  server-side-http = [
    "uuid",
    "dep:rand",
    "dep:tokio-stream",
    "dep:http",
    "dep:http-body",
    "dep:http-body-util",
    "dep:bytes",
    "dep:sse-stream",
    "tower",
  ]
  # SSE client
  client-side-sse = ["dep:sse-stream", "dep:http"]
  
  transport-sse-client = ["client-side-sse", "transport-worker"]
  transport-sse-client-reqwest = ["transport-sse-client", "reqwest"]
  
  transport-worker = ["dep:tokio-stream"]
  
  
  # Streamable HTTP client
  transport-streamable-http-client = ["client-side-sse", "transport-worker"]
  transport-streamable-http-client-reqwest = ["transport-streamable-http-client", "reqwest"]
  
  
  transport-async-rw = ["tokio/io-util", "tokio-util/codec"]
  transport-io = ["transport-async-rw", "tokio/io-std"]
  transport-child-process = [
    "transport-async-rw",
    "tokio/process",
    "dep:process-wrap",
  ]
  transport-sse-server = [
    "transport-async-rw",
    "transport-worker",
    "server-side-http",
    "dep:axum",
  ]
  transport-streamable-http-server = [
    "transport-streamable-http-server-session",
    "server-side-http",
    "transport-worker",
  ]
  transport-streamable-http-server-session = [
    "transport-async-rw",
    "dep:tokio-stream",
  ]
  # transport-ws = ["transport-io", "dep:tokio-tungstenite"]
  tower = ["dep:tower-service"]
  auth = ["dep:oauth2", "__reqwest", "dep:url"]
  schemars = ["dep:schemars"]
  
  [dev-dependencies]
  tokio = { version = "1", features = ["full"] }
  schemars = { version = "1.0", features = ["chrono04"] }
  
  anyhow = "1.0"
  tracing-subscriber = { version = "0.3", features = [
    "env-filter",
    "std",
    "fmt",
  ] }
  async-trait = "0.1"
  [[test]]
  name = "test_tool_macros"
  required-features = ["server", "client"]
  path = "tests/test_tool_macros.rs"
  
  [[test]]
  name = "test_with_python"
  required-features = [
    "reqwest",
    "server",
    "client",
    "transport-sse-server",
    "transport-sse-client",
    "transport-child-process",
  ]
  path = "tests/test_with_python.rs"
  
  [[test]]
  name = "test_with_js"
  required-features = [
    "server",
    "client",
    "transport-sse-server",
    "transport-child-process",
    "transport-streamable-http-server",
    "transport-streamable-http-client",
    "__reqwest",
  ]
  path = "tests/test_with_js.rs"
  
  [[test]]
  name = "test_notification"
  required-features = ["server", "client"]
  path = "tests/test_notification.rs"
  
  [[test]]
  name = "test_logging"
  required-features = ["server", "client"]
  path = "tests/test_logging.rs"
  
  [[test]]
  name = "test_message_protocol"
  required-features = ["client"]
  path = "tests/test_message_protocol.rs"
  
  [[test]]
  name = "test_message_schema"
  required-features = ["server", "client", "schemars"]
  path = "tests/test_message_schema.rs"
  
  [[test]]
  name = "test_progress_subscriber"
  required-features = ["server", "client", "macros"]
  path = "tests/test_progress_subscriber.rs"
  
  [[test]]
  name = "test_elicitation"
  required-features = ["elicitation", "client", "server"]
  path = "tests/test_elicitation.rs"
  