Skip to main content

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;