contextvm_sdk/lib.rs
1//! # ContextVM SDK for Rust
2//!
3//! A complete Rust implementation of the [ContextVM protocol](https://contextvm.org),
4//! enabling MCP (Model Context Protocol) servers to expose their capabilities through
5//! the Nostr network.
6//!
7//! ## Architecture
8//!
9//! ```text
10//! ┌─────────────────────────────────────────┐
11//! │ Gateway / Proxy (high-level) │
12//! ├─────────────────────────────────────────┤
13//! │ Transport (client / server) │
14//! ├─────────────────────────────────────────┤
15//! │ Core (types, serializers, validation) │
16//! │ Relay │ Signer │ Encryption │
17//! └─────────────────────────────────────────┘
18//! ```
19//!
20//! ## Quick Start
21//!
22//! ### As a Gateway (expose local MCP server via Nostr)
23//!
24//! ```rust,no_run
25//! use contextvm_sdk::gateway::{NostrMCPGateway, GatewayConfig};
26//! use contextvm_sdk::transport::server::NostrServerTransportConfig;
27//! use contextvm_sdk::core::types::ServerInfo;
28//! use contextvm_sdk::signer;
29//! ```
30//!
31//! ### As a Proxy (connect to remote MCP server via Nostr)
32//!
33//! ```rust,no_run
34//! use contextvm_sdk::proxy::{NostrMCPProxy, ProxyConfig};
35//! use contextvm_sdk::transport::client::NostrClientTransportConfig;
36//! use contextvm_sdk::signer;
37//! ```
38
39pub mod core;
40pub mod discovery;
41pub mod encryption;
42pub mod gateway;
43pub mod proxy;
44pub mod relay;
45pub mod signer;
46pub mod transport;
47
48#[cfg(feature = "rmcp")]
49pub mod rmcp_transport;
50// Re-export commonly used types
51pub use core::error::{Error, Result};
52pub use core::types::{
53 CapabilityExclusion, ClientSession, EncryptionMode, GiftWrapMode, JsonRpcError,
54 JsonRpcErrorResponse, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse,
55 ServerInfo,
56};
57pub use discovery::ServerAnnouncement;
58#[cfg(any(test, feature = "test-utils"))]
59pub use relay::mock::MockRelayPool;
60pub use relay::{RelayPool, RelayPoolTrait};
61pub use transport::client::{
62 ClientCorrelationStore, NostrClientTransport, NostrClientTransportConfig,
63};
64pub use transport::discovery_tags::{DiscoveredPeerCapabilities, PeerCapabilities};
65pub use transport::server::{
66 IncomingRequest, NostrServerTransport, NostrServerTransportConfig, RouteEntry,
67 ServerEventRouteStore, SessionSnapshot, SessionStore,
68};
69
70#[cfg(feature = "rmcp")]
71pub use rmcp;