diff --git a/Cargo.lock b/Cargo.lock index 5926bf6d..fabf5f6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -169,6 +169,21 @@ dependencies = [ "url", ] +[[package]] +name = "apollo-mcp" +version = "1.1.1" +dependencies = [ + "anyhow", + "apollo-mcp-registry", + "apollo-mcp-runtime", + "apollo-mcp-server", + "clap", + "schemars", + "serde_json", + "tokio", + "tracing", +] + [[package]] name = "apollo-mcp-registry" version = "1.1.1" @@ -198,22 +213,50 @@ dependencies = [ ] [[package]] -name = "apollo-mcp-server" +name = "apollo-mcp-runtime" version = "1.1.1" dependencies = [ "anyhow", + "apollo-mcp-registry", + "apollo-mcp-server", + "chrono", + "figment", + "headers", + "insta", + "mockito", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk", + "reqwest", + "rstest", + "schemars", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tower", + "tracing", + "tracing-appender", + "tracing-opentelemetry", + "tracing-subscriber", + "url", +] + +[[package]] +name = "apollo-mcp-server" +version = "1.1.1" +dependencies = [ "apollo-compiler", "apollo-federation", "apollo-mcp-registry", "apollo-schema-index", - "async-trait", "axum", "axum-extra", "axum-otel-metrics", "axum-tracing-opentelemetry", "bon", "chrono", - "clap", "cruet", "figment", "futures", @@ -227,11 +270,6 @@ dependencies = [ "lz-str", "mockito", "opentelemetry", - "opentelemetry-appender-log", - "opentelemetry-otlp", - "opentelemetry-resource-detectors", - "opentelemetry-semantic-conventions", - "opentelemetry-stdout", "opentelemetry_sdk", "prettyplease", "quote", @@ -252,10 +290,6 @@ dependencies = [ "tower", "tower-http", "tracing", - "tracing-appender", - "tracing-core", - "tracing-opentelemetry", - "tracing-subscriber", "tracing-test", "url", ] @@ -2537,16 +2571,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "opentelemetry-appender-log" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e688026e48f4603494f619583e0aa0b0edd9c0b9430e1c46804df2ff32bc8798" -dependencies = [ - "log", - "opentelemetry", -] - [[package]] name = "opentelemetry-http" version = "0.30.0" @@ -2591,34 +2615,12 @@ dependencies = [ "tonic", ] -[[package]] -name = "opentelemetry-resource-detectors" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a44e076f07fa3d76e741991f4f7d3ecbac0eed8521ced491fbdf8db77d024cf" -dependencies = [ - "opentelemetry", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", -] - [[package]] name = "opentelemetry-semantic-conventions" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83d059a296a47436748557a353c5e6c5705b9470ef6c95cfc52c21a8814ddac2" -[[package]] -name = "opentelemetry-stdout" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447191061af41c3943e082ea359ab8b64ff27d6d34d30d327df309ddef1eef6f" -dependencies = [ - "chrono", - "opentelemetry", - "opentelemetry_sdk", -] - [[package]] name = "opentelemetry_sdk" version = "0.30.0" diff --git a/Cargo.toml b/Cargo.toml index ff45d345..29323aca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] resolver = "2" members = [ + "crates/apollo-mcp-runtime", "crates/apollo-mcp-server", "crates/apollo-mcp-registry", "crates/apollo-schema-index", @@ -66,3 +67,32 @@ expect_used = "deny" indexing_slicing = "deny" unwrap_used = "deny" panic = "deny" + +[package] +name = "apollo-mcp" +authors.workspace = true +edition.workspace = true +license-file.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +apollo-mcp-server = {path = "crates/apollo-mcp-server"} +apollo-mcp-runtime = {path = "crates/apollo-mcp-runtime"} +apollo-mcp-registry = {path = "crates/apollo-mcp-registry"} +anyhow = "1.0.98" +clap = { version = "4.5.36", features = ["derive", "env"] } +schemars = { version = "1.0.1", features = ["url2"] } +serde_json.workspace = true +tokio.workspace = true +tracing.workspace = true + +[[bin]] +name = "mcp-server" +path = "bin/main.rs" + +[[bin]] +name = "config-schema" +path = "bin/config_schema.rs" +test = false diff --git a/crates/apollo-mcp-server/src/config_schema.rs b/bin/config_schema.rs similarity index 92% rename from crates/apollo-mcp-server/src/config_schema.rs rename to bin/config_schema.rs index c7c01dc6..6da57aac 100644 --- a/crates/apollo-mcp-server/src/config_schema.rs +++ b/bin/config_schema.rs @@ -6,7 +6,7 @@ use anyhow::Context; use schemars::schema_for; -mod runtime; +use apollo_mcp_runtime as runtime; fn main() -> anyhow::Result<()> { println!( diff --git a/crates/apollo-mcp-server/src/main.rs b/bin/main.rs similarity index 99% rename from crates/apollo-mcp-server/src/main.rs rename to bin/main.rs index e08c0309..433bdf4d 100644 --- a/crates/apollo-mcp-server/src/main.rs +++ b/bin/main.rs @@ -10,11 +10,9 @@ use apollo_mcp_server::server::Server; use clap::Parser; use clap::builder::Styles; use clap::builder::styling::{AnsiColor, Effects}; -use runtime::IdOrDefault; +use apollo_mcp_runtime::{IdOrDefault, self as runtime}; use tracing::{info, warn}; -mod runtime; - /// Clap styling const STYLES: Styles = Styles::styled() .header(AnsiColor::Green.on_default().effects(Effects::BOLD)) diff --git a/crates/apollo-mcp-runtime/Cargo.toml b/crates/apollo-mcp-runtime/Cargo.toml new file mode 100644 index 00000000..543ff7c5 --- /dev/null +++ b/crates/apollo-mcp-runtime/Cargo.toml @@ -0,0 +1,48 @@ +[package] +name = "apollo-mcp-runtime" +authors.workspace = true +edition.workspace = true +license-file.workspace = true +repository.workspace = true +rust-version.workspace = true +version.workspace = true + +[dependencies] +anyhow = "1.0.98" +apollo-mcp-registry = { path = "../apollo-mcp-registry" } +apollo-mcp-server = { path = "../apollo-mcp-server" } +figment = { version = "0.10.19", features = ["env", "yaml"] } +headers = "0.4.1" +opentelemetry = "0.30.0" +opentelemetry-otlp = { version = "0.30.0", features = [ + "grpc-tonic", + "tonic", + "http-proto", + "metrics", + "trace", +] } +opentelemetry-semantic-conventions = "0.30.0" +opentelemetry_sdk = { version = "0.30.0", features = [ + "spec_unstable_metrics_views", +] } +reqwest.workspace = true +schemars = { version = "1.0.1", features = ["url2"] } +serde.workspace = true +serde_json.workspace = true +thiserror.workspace = true +tokio.workspace = true +tracing-appender = "0.2.3" +tracing-opentelemetry = "0.31.0" +tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } +tracing.workspace = true +url.workspace = true + +[dev-dependencies] +chrono = { version = "0.4.41", default-features = false, features = ["now"] } +figment = { version = "0.10.19", features = ["test"] } +insta.workspace = true +mockito = "1.7.0" +opentelemetry_sdk = { version = "0.30.0", features = ["testing"] } +rstest.workspace = true +tokio.workspace = true +tower = "0.5.2" \ No newline at end of file diff --git a/crates/apollo-mcp-server/src/runtime/config.rs b/crates/apollo-mcp-runtime/src/config.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/config.rs rename to crates/apollo-mcp-runtime/src/config.rs diff --git a/crates/apollo-mcp-server/src/runtime/endpoint.rs b/crates/apollo-mcp-runtime/src/endpoint.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/endpoint.rs rename to crates/apollo-mcp-runtime/src/endpoint.rs diff --git a/crates/apollo-mcp-server/src/runtime/filtering_exporter.rs b/crates/apollo-mcp-runtime/src/filtering_exporter.rs similarity index 99% rename from crates/apollo-mcp-server/src/runtime/filtering_exporter.rs rename to crates/apollo-mcp-runtime/src/filtering_exporter.rs index e56fc3eb..c8567a6f 100644 --- a/crates/apollo-mcp-server/src/runtime/filtering_exporter.rs +++ b/crates/apollo-mcp-runtime/src/filtering_exporter.rs @@ -50,7 +50,7 @@ fn filter_omitted_apollo_attributes(kv: &KeyValue, omitted_attributes: &HashSet< #[cfg(test)] mod tests { - use crate::runtime::filtering_exporter::FilteringExporter; + use crate::filtering_exporter::FilteringExporter; use opentelemetry::trace::{SpanContext, SpanKind, Status, TraceState}; use opentelemetry::{InstrumentationScope, Key, KeyValue, SpanId, TraceFlags, TraceId}; use opentelemetry_sdk::Resource; diff --git a/crates/apollo-mcp-server/src/runtime/graphos.rs b/crates/apollo-mcp-runtime/src/graphos.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/graphos.rs rename to crates/apollo-mcp-runtime/src/graphos.rs diff --git a/crates/apollo-mcp-server/src/runtime/introspection.rs b/crates/apollo-mcp-runtime/src/introspection.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/introspection.rs rename to crates/apollo-mcp-runtime/src/introspection.rs diff --git a/crates/apollo-mcp-server/src/runtime.rs b/crates/apollo-mcp-runtime/src/lib.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime.rs rename to crates/apollo-mcp-runtime/src/lib.rs index 1a6ed528..0941a13c 100644 --- a/crates/apollo-mcp-server/src/runtime.rs +++ b/crates/apollo-mcp-runtime/src/lib.rs @@ -19,8 +19,8 @@ use std::path::Path; pub use config::Config; use figment::{ - Figment, providers::{Env, Format, Yaml}, + Figment, }; pub use operation_source::{IdOrDefault, OperationSource}; pub use schema_source::SchemaSource; diff --git a/crates/apollo-mcp-server/src/runtime/logging.rs b/crates/apollo-mcp-runtime/src/logging.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/logging.rs rename to crates/apollo-mcp-runtime/src/logging.rs diff --git a/crates/apollo-mcp-server/src/runtime/logging/defaults.rs b/crates/apollo-mcp-runtime/src/logging/defaults.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/logging/defaults.rs rename to crates/apollo-mcp-runtime/src/logging/defaults.rs diff --git a/crates/apollo-mcp-server/src/runtime/logging/log_rotation_kind.rs b/crates/apollo-mcp-runtime/src/logging/log_rotation_kind.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/logging/log_rotation_kind.rs rename to crates/apollo-mcp-runtime/src/logging/log_rotation_kind.rs diff --git a/crates/apollo-mcp-server/src/runtime/logging/parsers.rs b/crates/apollo-mcp-runtime/src/logging/parsers.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/logging/parsers.rs rename to crates/apollo-mcp-runtime/src/logging/parsers.rs diff --git a/crates/apollo-mcp-server/src/runtime/operation_source.rs b/crates/apollo-mcp-runtime/src/operation_source.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/operation_source.rs rename to crates/apollo-mcp-runtime/src/operation_source.rs diff --git a/crates/apollo-mcp-server/src/runtime/overrides.rs b/crates/apollo-mcp-runtime/src/overrides.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/overrides.rs rename to crates/apollo-mcp-runtime/src/overrides.rs diff --git a/crates/apollo-mcp-server/src/runtime/schema_source.rs b/crates/apollo-mcp-runtime/src/schema_source.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/schema_source.rs rename to crates/apollo-mcp-runtime/src/schema_source.rs diff --git a/crates/apollo-mcp-server/src/runtime/schemas.rs b/crates/apollo-mcp-runtime/src/schemas.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/schemas.rs rename to crates/apollo-mcp-runtime/src/schemas.rs diff --git a/crates/apollo-mcp-server/src/runtime/telemetry.rs b/crates/apollo-mcp-runtime/src/telemetry.rs similarity index 98% rename from crates/apollo-mcp-server/src/runtime/telemetry.rs rename to crates/apollo-mcp-runtime/src/telemetry.rs index 565b15d3..8ceed360 100644 --- a/crates/apollo-mcp-server/src/runtime/telemetry.rs +++ b/crates/apollo-mcp-runtime/src/telemetry.rs @@ -1,9 +1,9 @@ mod sampler; -use crate::runtime::Config; -use crate::runtime::filtering_exporter::FilteringExporter; -use crate::runtime::logging::Logging; -use crate::runtime::telemetry::sampler::SamplerOption; +use crate::Config; +use crate::filtering_exporter::FilteringExporter; +use crate::logging::Logging; +use crate::telemetry::sampler::SamplerOption; use apollo_mcp_server::generated::telemetry::TelemetryAttribute; use opentelemetry::{Key, KeyValue, global, trace::TracerProvider as _}; use opentelemetry_otlp::WithExportConfig; diff --git a/crates/apollo-mcp-server/src/runtime/telemetry/sampler.rs b/crates/apollo-mcp-runtime/src/telemetry/sampler.rs similarity index 100% rename from crates/apollo-mcp-server/src/runtime/telemetry/sampler.rs rename to crates/apollo-mcp-runtime/src/telemetry/sampler.rs diff --git a/crates/apollo-mcp-server/Cargo.toml b/crates/apollo-mcp-server/Cargo.toml index 1d31252d..278a65ff 100644 --- a/crates/apollo-mcp-server/Cargo.toml +++ b/crates/apollo-mcp-server/Cargo.toml @@ -8,10 +8,7 @@ rust-version.workspace = true version.workspace = true build = "build.rs" -default-run = "apollo-mcp-server" - [dependencies] -anyhow = "1.0.98" apollo-compiler.workspace = true apollo-federation.workspace = true apollo-mcp-registry = { path = "../apollo-mcp-registry" } @@ -21,8 +18,6 @@ axum-extra = { version = "0.10.1", features = ["typed-header"] } axum-otel-metrics = "0.12.0" axum-tracing-opentelemetry = "0.29.0" bon = "3.6.3" -clap = { version = "4.5.36", features = ["derive", "env"] } -figment = { version = "0.10.19", features = ["env", "yaml"] } futures.workspace = true headers = "0.4.1" http = "1.3.1" @@ -32,17 +27,6 @@ jsonwebtoken = "9" jwks = "0.4.0" lz-str = "0.2.1" opentelemetry = "0.30.0" -opentelemetry-appender-log = "0.30.0" -opentelemetry-otlp = { version = "0.30.0", features = [ - "grpc-tonic", - "tonic", - "http-proto", - "metrics", - "trace", -] } -opentelemetry-resource-detectors = "0.9.0" -opentelemetry-semantic-conventions = "0.30.0" -opentelemetry-stdout = "0.30.0" opentelemetry_sdk = { version = "0.30.0", features = [ "spec_unstable_metrics_views", ] } @@ -63,13 +47,8 @@ thiserror.workspace = true tokio.workspace = true tokio-util = "0.7.15" tower-http = { version = "0.6.6", features = ["cors", "trace"] } -tracing-appender = "0.2.3" -tracing-core.workspace = true -tracing-opentelemetry = "0.31.0" -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } tracing.workspace = true url.workspace = true -async-trait = "0.1.89" [dev-dependencies] chrono = { version = "0.4.41", default-features = false, features = ["now"] } @@ -91,13 +70,4 @@ syn = "2.0.106" toml = "0.9.5" [lints] -workspace = true - -[[bin]] -name = "apollo-mcp-server" -path = "src/main.rs" - -[[bin]] -name = "config-schema" -path = "src/config_schema.rs" -test = false +workspace = true \ No newline at end of file