Skip to main content

contextvm_sdk/
lib.rs

1#![warn(missing_docs)]
2//! # ContextVM SDK for Rust
3//!
4//! A complete Rust implementation of the [ContextVM protocol](https://contextvm.org),
5//! enabling MCP (Model Context Protocol) servers to expose their capabilities through
6//! the Nostr network.
7//!
8//! ## Architecture
9//!
10//! ```text
11//! ┌─────────────────────────────────────────┐
12//! │  Gateway / Proxy  (high-level)          │
13//! ├─────────────────────────────────────────┤
14//! │  Transport  (client / server)           │
15//! ├─────────────────────────────────────────┤
16//! │  Core  (types, serializers, validation) │
17//! │  Relay  │  Signer  │  Encryption        │
18//! └─────────────────────────────────────────┘
19//! ```
20//!
21//! ## Quick Start
22//!
23//! ### As a Gateway (expose local MCP server via Nostr)
24//!
25//! ```rust,no_run
26//! use contextvm_sdk::gateway::{NostrMCPGateway, GatewayConfig};
27//! use contextvm_sdk::transport::server::NostrServerTransportConfig;
28//! use contextvm_sdk::core::types::ServerInfo;
29//! use contextvm_sdk::signer;
30//! ```
31//!
32//! ### As a Proxy (connect to remote MCP server via Nostr)
33//!
34//! ```rust,no_run
35//! use contextvm_sdk::proxy::{NostrMCPProxy, ProxyConfig};
36//! use contextvm_sdk::transport::client::NostrClientTransportConfig;
37//! use contextvm_sdk::signer;
38//! ```
39
40/// Core types, constants, serializers, and validation
41pub mod core;
42/// Server and capability discovery on the Nostr network
43pub mod discovery;
44/// NIP-44 encryption and NIP-59 gift wrapping
45pub mod encryption;
46/// Gateway bridging a local MCP server to Nostr
47pub mod gateway;
48/// Proxy connecting to a remote MCP server via Nostr
49pub mod proxy;
50/// Nostr relay pool management
51pub mod relay;
52/// Nostr signer utilities and key management
53pub mod signer;
54/// Client and server MCP-over-Nostr transports
55pub mod transport;
56
57/// rmcp Worker integration for ContextVM transports
58#[cfg(feature = "rmcp")]
59pub mod rmcp_transport;
60// ── Core types and error handling ────────────────────────────────────
61pub use core::error::{Error, Result};
62pub use core::types::{
63    CapabilityExclusion, ClientSession, EncryptionMode, GiftWrapMode, JsonRpcError,
64    JsonRpcErrorResponse, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse,
65    ProfileMetadata, ServerInfo,
66};
67
68// ── Discovery ────────────────────────────────────────────────────────
69pub use discovery::ServerAnnouncement;
70
71// ── Relay pool ───────────────────────────────────────────────────────
72#[cfg(any(test, feature = "test-utils"))]
73pub use relay::mock::MockRelayPool;
74pub use relay::{RelayPool, RelayPoolTrait};
75
76// ── Transport (client) ──────────────────────────────────────────────
77pub use transport::client::{
78    ClientCorrelationStore, NostrClientTransport, NostrClientTransportConfig,
79};
80
81// ── Transport (discovery tags) ──────────────────────────────────────
82pub use transport::discovery_tags::{DiscoveredPeerCapabilities, PeerCapabilities};
83
84// ── Transport (server) ──────────────────────────────────────────────
85pub use transport::server::{
86    ClientPubkey, InboundEvent, IncomingRequest, NostrServerTransport, NostrServerTransportConfig,
87    RouteEntry, ServerEventRouteStore, SessionSnapshot, SessionStore,
88};
89
90// ── rmcp re-export ──────────────────────────────────────────────────
91#[cfg(feature = "rmcp")]
92pub use rmcp;
93
94// ── CEP-22 progress-aware request helpers ───────────────────────────
95#[cfg(feature = "rmcp")]
96pub use rmcp_transport::progress::{
97    progress_aware_options, PeerRequestOptionsExt, DEFAULT_OVERSIZED_IDLE_TIMEOUT,
98    DEFAULT_OVERSIZED_MAX_TOTAL_TIMEOUT,
99};
100
101// ── CEP-41 open-stream consumer API ─────────────────────────────────
102#[cfg(feature = "rmcp")]
103pub use rmcp_transport::open_stream::{call_tool_stream, ToolStreamCall};
104#[cfg(feature = "rmcp")]
105pub use transport::client::ClientOpenStreamHandle;