diff --git a/Cargo.toml b/Cargo.toml index 9f5b4c0e..25a9720c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,10 @@ [workspace] -members = ["crates/*"] +members = [ + "crates/*", + "examples/clients", + "examples/servers", + "examples/macros" +] resolver = "2" [workspace.dependencies] diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..1628923a --- /dev/null +++ b/examples/README.md @@ -0,0 +1,84 @@ +# Model Context Protocol Examples + +This directory contains examples demonstrating how to use the Model Context Protocol (MCP) Rust SDK. + +## Structure + +- `clients/`: Examples of MCP clients +- `servers/`: Examples of MCP servers +- `macros/`: Examples of MCP macros + +## Running Client Examples + +The client examples demonstrate different ways to connect to MCP servers. + +### Available Examples + +You can run the examples in two ways: + +#### Option 1: From the examples/clients directory + +```bash +cd examples/clients +cargo run --example clients +cargo run --example sse +cargo run --example stdio +cargo run --example stdio_integration +``` + +#### Option 2: From the root directory + +```bash +cargo run -p mcp-client-examples --example clients +cargo run -p mcp-client-examples --example sse +cargo run -p mcp-client-examples --example stdio +cargo run -p mcp-client-examples --example stdio_integration +``` + +## Running Server Examples + +The server examples demonstrate how to implement MCP servers. + +### Available Examples + +You can run the server examples in two ways: + +#### Option 1: From the examples/servers directory + +```bash +cd examples/servers +cargo run --example counter-server +``` + +#### Option 2: From the root directory + +```bash +cargo run -p mcp-server-examples --example counter-server +``` + +## Running Macros Examples + +The macros examples demonstrate how to use the MCP macros to create tools. + +### Available Examples + +You can run the macros examples in two ways: + +#### Option 1: From the examples/macros directory + +```bash +cd examples/macros +cargo run --example calculator +``` + +#### Option 2: From the root directory + +```bash +cargo run -p mcp-macros-examples --example calculator +``` + +## Notes + +- Some examples may require additional setup or running both client and server components. +- The server examples use standard I/O for communication, so they can be connected to client examples using stdio transport. +- For SSE examples, you may need to run a separate SSE server or use a compatible MCP server implementation. diff --git a/examples/clients/Cargo.toml b/examples/clients/Cargo.toml new file mode 100644 index 00000000..86da4aa9 --- /dev/null +++ b/examples/clients/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "mcp-client-examples" +version = "0.1.0" +edition = "2021" +publish = false + +[dependencies] +mcp-client = { path = "../../crates/mcp-client" } +mcp-core = { path = "../../crates/mcp-core" } +tokio = { version = "1", features = ["full"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +rand = "0.8" +futures = "0.3" +anyhow = "1.0" + +[[example]] +name = "clients" +path = "src/clients.rs" + +[[example]] +name = "sse" +path = "src/sse.rs" + +[[example]] +name = "stdio" +path = "src/stdio.rs" + +[[example]] +name = "stdio_integration" +path = "src/stdio_integration.rs" diff --git a/crates/mcp-client/examples/clients.rs b/examples/clients/src/clients.rs similarity index 100% rename from crates/mcp-client/examples/clients.rs rename to examples/clients/src/clients.rs diff --git a/crates/mcp-client/examples/sse.rs b/examples/clients/src/sse.rs similarity index 100% rename from crates/mcp-client/examples/sse.rs rename to examples/clients/src/sse.rs diff --git a/crates/mcp-client/examples/stdio.rs b/examples/clients/src/stdio.rs similarity index 100% rename from crates/mcp-client/examples/stdio.rs rename to examples/clients/src/stdio.rs diff --git a/crates/mcp-client/examples/stdio_integration.rs b/examples/clients/src/stdio_integration.rs similarity index 100% rename from crates/mcp-client/examples/stdio_integration.rs rename to examples/clients/src/stdio_integration.rs diff --git a/examples/macros/Cargo.toml b/examples/macros/Cargo.toml new file mode 100644 index 00000000..e7193160 --- /dev/null +++ b/examples/macros/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "mcp-macros-examples" +version = "0.1.0" +edition = "2021" +publish = false + +[dependencies] +mcp-core = { path = "../../crates/mcp-core" } +mcp-macros = { path = "../../crates/mcp-macros" } +tokio = { version = "1", features = ["full"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +async-trait = "0.1" +schemars = "0.8" + +[[example]] +name = "calculator" +path = "src/calculator.rs" diff --git a/crates/mcp-macros/examples/calculator.rs b/examples/macros/src/calculator.rs similarity index 100% rename from crates/mcp-macros/examples/calculator.rs rename to examples/macros/src/calculator.rs diff --git a/examples/servers/Cargo.toml b/examples/servers/Cargo.toml new file mode 100644 index 00000000..5a64c19c --- /dev/null +++ b/examples/servers/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "mcp-server-examples" +version = "0.1.0" +edition = "2021" +publish = false + +[dependencies] +mcp-server = { path = "../../crates/mcp-server" } +mcp-core = { path = "../../crates/mcp-core" } +mcp-macros = { path = "../../crates/mcp-macros" } +tokio = { version = "1", features = ["full"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +anyhow = "1.0" +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +tracing-appender = "0.2" +futures = "0.3" + +[[example]] +name = "counter-server" +path = "src/counter_server.rs" diff --git a/crates/mcp-server/src/main.rs b/examples/servers/src/counter_server.rs similarity index 100% rename from crates/mcp-server/src/main.rs rename to examples/servers/src/counter_server.rs