[package]
edition = "2021"
rust-version = "1.93"
name = "rust-mcp-core"
version = "0.1.0"
build = false
include = [
"/src/**",
"/examples/**",
"/docs/**",
"/README.md",
"/LICENSE",
"/CHANGELOG.md",
"/SECURITY.md",
"/Cargo.toml",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Config-driven MCP server framework built on the official rmcp SDK. Fully implements the Model Context Protocol spec — define tools, auth, prompts, resources, and HTTP behavior in YAML/JSON with minimal Rust code."
homepage = "https://github.com/nullablevariant/rust-mcp-core"
documentation = "https://docs.rs/rust-mcp-core"
readme = "README.md"
keywords = [
"mcp",
"modelcontextprotocol",
"config-driven",
"server",
"rmcp",
]
categories = [
"config",
"network-programming",
"authentication",
"api-bindings",
]
license = "MIT"
repository = "https://github.com/nullablevariant/rust-mcp-core"
[package.metadata.docs.rs]
all-features = true
[features]
auth = [
"streamable_http",
"rmcp/auth",
"dep:jsonwebtoken",
"dep:oauth2",
"dep:reqwest",
]
client_features = ["rmcp/elicitation"]
client_logging = []
completion = []
default = [
"streamable_http",
"auth",
"http_tools",
"prompts",
"resources",
"completion",
"client_logging",
"progress_utility",
"tasks_utility",
"client_features",
]
http_hardening = [
"streamable_http",
"dep:tower-http",
"dep:tower_governor",
]
http_tools = [
"dep:oauth2",
"dep:reqwest",
]
progress_utility = []
prompts = []
resources = []
streamable_http = [
"dep:axum",
"rmcp/transport-streamable-http-server",
"rmcp/transport-streamable-http-server-session",
]
tasks_utility = []
[lib]
name = "rust_mcp_core"
path = "src/lib.rs"
[[example]]
name = "auth-all-mode"
path = "examples/auth-all-mode/main.rs"
required-features = [
"streamable_http",
"auth",
]
[[example]]
name = "auth-bearer"
path = "examples/auth-bearer/main.rs"
required-features = [
"streamable_http",
"auth",
]
[[example]]
name = "auth-oauth-introspection"
path = "examples/auth-oauth-introspection/main.rs"
required-features = [
"streamable_http",
"auth",
]
[[example]]
name = "auth-oauth-jwt"
path = "examples/auth-oauth-jwt/main.rs"
required-features = [
"streamable_http",
"auth",
]
[[example]]
name = "core-minimal"
path = "examples/core-minimal/main.rs"
required-features = ["streamable_http"]
[[example]]
name = "plugins-auth-custom"
path = "examples/plugins-auth-custom/main.rs"
required-features = [
"streamable_http",
"auth",
]
[[example]]
name = "plugins-router-http"
path = "examples/plugins-router-http/main.rs"
required-features = ["streamable_http"]
[[example]]
name = "plugins-simple-outbound-http"
path = "examples/plugins-simple-outbound-http/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "plugins-tool-client-features"
path = "examples/plugins-tool-client-features/main.rs"
required-features = [
"streamable_http",
"client_features",
]
[[example]]
name = "plugins-tool-client-features-advanced"
path = "examples/plugins-tool-client-features-advanced/main.rs"
required-features = [
"streamable_http",
"client_features",
]
[[example]]
name = "plugins-tool-custom"
path = "examples/plugins-tool-custom/main.rs"
required-features = ["streamable_http"]
[[example]]
name = "plugins-tool-filesystem"
path = "examples/plugins-tool-filesystem/main.rs"
required-features = ["streamable_http"]
[[example]]
name = "plugins-tool-oauth-helper"
path = "examples/plugins-tool-oauth-helper/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "prompts-inline-plugin"
path = "examples/prompts-inline-plugin/main.rs"
required-features = [
"streamable_http",
"prompts",
"completion",
]
[[example]]
name = "resources-inline-plugin"
path = "examples/resources-inline-plugin/main.rs"
required-features = [
"streamable_http",
"resources",
"completion",
]
[[example]]
name = "resources-subscribe-updated"
path = "examples/resources-subscribe-updated/main.rs"
required-features = [
"streamable_http",
"resources",
]
[[example]]
name = "tools-crud-http"
path = "examples/tools-crud-http/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "tools-http-post"
path = "examples/tools-http-post/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "tools-output-modes"
path = "examples/tools-output-modes/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "tools-rich-content"
path = "examples/tools-rich-content/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "tools-templating"
path = "examples/tools-templating/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "tools-upstream-auth"
path = "examples/tools-upstream-auth/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "tools-web-search"
path = "examples/tools-web-search/main.rs"
required-features = [
"streamable_http",
"http_tools",
]
[[example]]
name = "utility-cancellation"
path = "examples/utility-cancellation/main.rs"
required-features = ["streamable_http"]
[[example]]
name = "utility-completion"
path = "examples/utility-completion/main.rs"
required-features = [
"streamable_http",
"completion",
"prompts",
"resources",
]
[[example]]
name = "utility-list-changed"
path = "examples/utility-list-changed/main.rs"
required-features = [
"streamable_http",
"prompts",
"resources",
]
[[example]]
name = "utility-logging"
path = "examples/utility-logging/main.rs"
required-features = [
"streamable_http",
"client_logging",
]
[[example]]
name = "utility-pagination"
path = "examples/utility-pagination/main.rs"
required-features = [
"streamable_http",
"prompts",
"resources",
]
[[example]]
name = "utility-progress"
path = "examples/utility-progress/main.rs"
required-features = [
"streamable_http",
"progress_utility",
]
[[example]]
name = "utility-tasks"
path = "examples/utility-tasks/main.rs"
required-features = [
"streamable_http",
"tasks_utility",
]
[[example]]
name = "utility-tasks-advanced"
path = "examples/utility-tasks-advanced/main.rs"
required-features = [
"streamable_http",
"tasks_utility",
]
[dependencies.async-trait]
version = "0.1"
[dependencies.axum]
version = "0.8.1"
features = ["macros"]
optional = true
[dependencies.base64]
version = "0.22.1"
[dependencies.chrono]
version = "0.4.38"
features = ["serde"]
[dependencies.futures-core]
version = "0.3"
[dependencies.futures-util]
version = "0.3"
features = ["std"]
default-features = false
[dependencies.http]
version = "1"
[dependencies.jsonschema]
version = "0.43"
[dependencies.jsonwebtoken]
version = "10"
features = ["aws_lc_rs"]
optional = true
[dependencies.oauth2]
version = "5"
optional = true
default-features = false
[dependencies.reqwest]
version = "0.13"
features = [
"json",
"query",
"form",
]
optional = true
[dependencies.rmcp]
version = "1.1.0"
features = ["transport-worker"]
[dependencies.secrecy]
version = "0.10"
[dependencies.serde]
version = "1.0"
features = ["derive"]
[dependencies.serde_json]
version = "1.0"
[dependencies.serde_yaml]
version = "0.9.42"
package = "serde_norway"
[dependencies.subtle]
version = "2.6"
[dependencies.tokio]
version = "1.41.1"
features = ["full"]
[dependencies.tokio-util]
version = "0.7"
[dependencies.tower-http]
version = "0.6.8"
features = [
"limit",
"catch-panic",
"sensitive-headers",
]
optional = true
default-features = false
[dependencies.tower_governor]
version = "0.8"
features = ["axum"]
optional = true
default-features = false
[dependencies.tracing]
version = "0.1"
[dependencies.tracing-subscriber]
version = "0.3"
features = ["fmt"]
[dependencies.url]
version = "2.5.4"
[dependencies.uuid]
version = "1"
features = ["v4"]
[dev-dependencies.httpmock]
version = "0.8"
[dev-dependencies.reqwest]
version = "0.13"
features = [
"json",
"query",
"form",
]
[dev-dependencies.rmcp]
version = "1.1.0"
features = ["client"]
[dev-dependencies.tower]
version = "0.5"
features = ["util"]
[lints.clippy]
clone_on_ref_ptr = "deny"
cognitive_complexity = "warn"
dbg_macro = "deny"
doc_markdown = "allow"
future_not_send = "warn"
imprecise_flops = "warn"
large_futures = "warn"
mem_forget = "deny"
missing_const_for_fn = "warn"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
multiple_crate_versions = "allow"
must_use_candidate = "allow"
mutex_atomic = "deny"
mutex_integer = "deny"
needless_pass_by_ref_mut = "warn"
no_effect_underscore_binding = "allow"
panic_in_result_fn = "deny"
print_stderr = "deny"
print_stdout = "deny"
rc_mutex = "deny"
redundant_clone = "warn"
similar_names = "allow"
str_to_string = "deny"
suboptimal_flops = "warn"
todo = "deny"
unimplemented = "deny"
unwrap_used = "deny"
use_self = "warn"
[lints.clippy.cargo]
level = "deny"
priority = -1
[lints.clippy.pedantic]
level = "deny"
priority = -1
[lints.rust]
missing_debug_implementations = "warn"
unreachable_pub = "warn"
unsafe_code = "forbid"
[lints.rust.rust_2018_idioms]
level = "warn"
priority = -1
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = ["cfg(mutest)"]