[go: up one dir, main page]

rmcp 0.3.2

Rust SDK for Model Context Protocol
Documentation
[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 = { version = "0.2.1", 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"]

# 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-worker = ["dep:tokio-stream"]


# Streamable HTTP client
transport-streamable-http-client = ["client-side-sse", "transport-worker"]


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-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"