composio-sdk 0.3.0

Minimal Rust SDK for Composio Tool Router REST API
Documentation
# Composio Rust SDK


Type-safe, async Rust SDK for Composio’s Tool Router and API v3.

## Overview


Composio helps AI apps and agents connect to external services through a unified API.  
This SDK gives Rust developers a strongly-typed client for sessions, tools, auth flows, MCP servers, files, and trigger-related APIs.

## What's New in v0.3.0


This release significantly expands API parity and lifecycle coverage:

- Added full **MCP server management** support (create/get/update/delete/list/generate/custom).
- Added **project configuration** endpoints (`get_project_config`, `update_project_config`).
- Added **CLI session** endpoints (`create_cli_session`, `get_cli_session`).
- Added **migration helper** endpoint (`get_migration_nanoid`).
- Added **tools enum** endpoint (`retrieve_tool_enum`).
- Added **trigger types enum** endpoint (`retrieve_trigger_type_enum`).
- Added **toolkit retrieve version support** via `get_toolkit_with_params`.
- Added **connected account lifecycle** endpoints (refresh/status/delete).
- Added **auth config lifecycle** endpoints (get/update/delete/status update).
- Added **direct link endpoint parity** (`create_connected_account_link`).
- Added **files API parity improvements** (`list_files`, `create_file_upload_request`) and aligned file models.

## Features


- **Tool execution**: list/retrieve/execute/proxy tools and generate tool inputs.
- **Tool Router sessions**: create per-user sessions and execute tools in session context.
- **MCP servers**: create, list, retrieve, update, delete, and generate MCP server URLs.
- **Connected accounts**: list/retrieve/link/refresh/update-status/delete connected accounts.
- **Auth configs**: list/create/retrieve/update/delete auth configs and update status.
- **Files**: list files, request upload URLs, and use upload/download helper abstractions.
- **CLI sessions**: create and retrieve CLI authentication sessions.
- **Migration helper**: convert legacy UUIDs to NanoIDs.
- **Project config**: retrieve and update project-level configuration.
- **Triggers**: list/retrieve trigger types, retrieve trigger enums, and work with trigger instances.

## Installation


```bash
cargo add composio-sdk
```

Or add manually:

```toml
[dependencies]
composio-sdk = "0.3"
tokio = { version = "1", features = ["full"] }
serde_json = "1"
```

## Quick Start


Minimal end-to-end flow:

```rust
use composio_sdk::client::ComposioClient;

#[tokio::main]

async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = ComposioClient::builder()
        .api_key(std::env::var("COMPOSIO_API_KEY")?)
        .build()?;

    // 1) Create a user-scoped Tool Router session
    let session = client
        .create_session("user_123")
        .toolkits(vec!["github"])
        .send()
        .await?;

    // 2) Execute a tool via that session
    let result = session
        .execute_tool(
            "GITHUB_CREATE_ISSUE",
            serde_json::json!({
                "owner": "acme",
                "repo": "demo",
                "title": "Issue from Rust SDK"
            }),
        )
        .await?;

    println!("success: {}", result.successful);
    Ok(())
}
```

## Authentication


Use your Composio API key (sent as `x-api-key`):

```rust
let client = composio_sdk::client::ComposioClient::builder()
    .api_key(std::env::var("COMPOSIO_API_KEY")?)
    .build()?;
```

## Core Concepts


### Tools

Use `list_tools`, `get_tool`, `execute_tool`, `generate_tool_inputs`, `proxy_tool`, and `retrieve_tool_enum`.

### Tool Router

Create sessions with `create_session(...).send()`, then execute tools and meta tools per user context.

### MCP Servers

Use `create_mcp_server`, `list_mcp_servers`, `get_mcp_server`, `update_mcp_server`, `delete_mcp_server`, `generate_mcp_server`, and related methods.

### Connected Accounts

Use `list_connected_accounts`, `get_connected_account`, `create_connected_account_link`, `refresh_connected_account`, `update_connected_account_status`, and `delete_connected_account`.

### Auth Configs

Use `list_auth_configs`, `create_auth_config`, `get_auth_config`, `update_auth_config`, `delete_auth_config`, and `update_auth_config_status`.

### Files

Use endpoint wrappers (`list_files`, `create_file_upload_request`) or helper abstractions (`FileUploadable`, `FileDownloadable`, `FileHelper`).

### CLI Sessions

Use `create_cli_session` and `get_cli_session` for CLI auth workflows.

### Migration

Use `get_migration_nanoid` for UUID → NanoID migration lookups.

### Project Config

Use `get_project_config` and `update_project_config` for project-level settings.

## Examples


### Execute a tool (client-level)


```rust
use composio_sdk::models::tools::ToolExecuteParams;
use std::collections::HashMap;

let mut arguments = HashMap::new();
arguments.insert("owner".to_string(), serde_json::json!("acme"));
arguments.insert("repo".to_string(), serde_json::json!("demo"));
arguments.insert("title".to_string(), serde_json::json!("Issue from SDK"));

let response = client
    .execute_tool(ToolExecuteParams {
        slug: "GITHUB_CREATE_ISSUE".to_string(),
        arguments,
        user_id: Some("user_123".to_string()),
        ..Default::default()
    })
    .await?;
```

### Create an MCP server


```rust
use composio_sdk::models::mcp::MCPCreateParams;

let mcp = client
    .create_mcp_server(MCPCreateParams {
        name: "my-mcp".to_string(),
        auth_config_ids: vec!["ac_123".to_string()],
        allowed_tools: None,
        no_auth_apps: None,
        toolkits: None,
        custom_tools: None,
        managed_auth_via_composio: Some(false),
    })
    .await?;
```

### List connected accounts


```rust
use composio_sdk::models::connected_accounts::ConnectedAccountListParams;

let accounts = client
    .list_connected_accounts(ConnectedAccountListParams {
        user_ids: Some(vec!["user_123".to_string()]),
        ..Default::default()
    })
    .await?;
```

### Upload a file (helper flow)


```rust
use composio_sdk::models::files::FileUploadable;
use std::path::Path;

let uploaded = FileUploadable::from_path(
    &client,
    Path::new("./invoice.pdf"),
    "GMAIL_SEND_EMAIL",
    "gmail",
)
.await?;

println!("s3 key: {}", uploaded.s3key);
```

### Create a CLI session


```rust
let cli = client.create_cli_session().await?;
println!("session code: {}", cli.code);
```

## Architecture


- `src/client.rs`: API methods and HTTP orchestration.
- `src/models/`: typed request/response models by domain.
- `src/session.rs`: Tool Router session abstraction.
- `src/meta_tools/`: Rust-native meta tool helpers.

## Error Handling


Most APIs return `Result<T, ComposioError>`.

```rust
match client.create_cli_session().await {
    Ok(session) => println!("code={}", session.code),
    Err(err) => eprintln!("request failed: {err}"),
}
```

## Contributing


1. Keep changes focused by domain.
2. Add/adjust serialization + deserialization tests for model changes.
3. Run:
   - `cargo fmt --all`
   - `cargo test`
   - `cargo check`
4. Keep parity work aligned with `COMPOSIO_CLIENT_AUDIT_REPORT.md`.

## Roadmap


Major parity gaps have been closed (MCP, CLI, migration, project config, connected-account lifecycle, auth-config lifecycle, direct link endpoint, files list/upload-request, tool/trigger enums, toolkit retrieve version params).

Remaining work is mainly contract-shape refinement in partially covered domains tracked in `COMPOSIO_CLIENT_AUDIT_REPORT.md`.

## License


Licensed under either:

- MIT
- Apache-2.0

at your option.