# Kontext-Dev SDK (Rust)
Rust SDK for authenticating MCP clients against Kontext and handling hosted integration-connect flows.
## Install
```toml
[dependencies]
kontext-dev = "0.2.1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
```
## Quickstart (PKCE + MCP Gateway Token)
```rust
use kontext_dev::{KontextDevClient, KontextDevConfig, DEFAULT_RESOURCE, DEFAULT_SCOPE, DEFAULT_SERVER_NAME};
#[tokio::main]
async fn main() -> Result<(), kontext_dev::KontextDevError> {
let client = KontextDevClient::new(KontextDevConfig {
server: Some("https://api.kontext.dev".to_string()),
mcp_url: None,
token_url: None,
client_id: "your-application-client-id".to_string(),
client_secret: None,
scope: DEFAULT_SCOPE.to_string(),
server_name: DEFAULT_SERVER_NAME.to_string(),
resource: DEFAULT_RESOURCE.to_string(),
integration_ui_url: Some("https://app.kontext.dev".to_string()),
integration_return_to: None,
open_connect_page_on_login: true,
auth_timeout_seconds: 300,
token_cache_path: None,
});
// Opens browser if needed, caches tokens, and returns
// an mcp-gateway resource token.
let session = client.authenticate_mcp().await?;
// Use this for MCP streamable-http transport.
let mcp_url = client.mcp_url()?;
println!("MCP URL: {mcp_url}");
println!("Bearer {}", session.gateway_token.access_token);
Ok(())
}
```
## Integration Connect URL
```rust
let url = client
.create_integration_connect_url(&session.gateway_token.access_token)
.await?;
println!("Open this URL to connect integrations: {url}");
```
## What This SDK Provides
- Browser PKCE login for OAuth authorization code flow.
- RFC 8693 token exchange (`identity -> mcp-gateway` by default).
- Token caching to avoid repeated browser logins.
- Hosted integration connect helpers:
- `POST /mcp/connect-session`
- `POST /mcp/integrations/:id/oauth/init`
- `GET /mcp/integrations/:id/oauth/connection`
## Legacy Compatibility
Legacy client-credentials helpers remain available for migration:
- `request_access_token`
- `build_mcp_url` (appends `access_key=...`)
New integrations should prefer bearer tokens with `KontextDevClient::authenticate_mcp`.