---
title: "Deploy a Rust API over MCP with while.sh"
url: https://while.sh/en/guides/deploy-rust-api/
author: "Aloïs Oddon, co-founder of Nextmap"
updated: 2026-11-02
---

# Deploy a Rust API from your AI agent, over MCP

Your Rust API compiles. Connected to while over MCP, your AI agent deploys it in France, with a Dockerfile ready to go: built in release mode, run in a minimal image, without admin rights.

## Prerequisites

- A Rust API, with its Cargo.toml.
- An AI agent that works in a terminal: Claude Code, Codex, Cursor or Gemini CLI.

## Step 1: Give your agent these instructions

Open your agent in your API's folder and paste these instructions into it:

```text titre="Instructions"
Connect to while with my account (while.sh/agents), then deploy my app.
```

Without an account, your agent deploys your API as a trial, in one request. To keep it, open the link it gives you and create your account.

With your account, your agent adds while's MCP server itself. If it asks you to, restart it. On the first call to while, a page opens in your browser. In Claude Code, if it doesn't open, type /mcp, choose while, then Authenticate. On that page, choose your app, or "A new app", then click Authorize.

## Step 2: Open your API

Your agent gives you your API's address, for example `https://mon-api.while.cloud`, over HTTPS.

## What your agent does

It writes while.yaml at the root of your API:

```yaml titre="while.yaml"
apiVersion: while/v1
project: mon-api
services:
  - name: web
    port: 8080
    health:
      path: /health
```

while recognizes Rust by its Cargo.toml, and your agent gets a Dockerfile ready to build: `cargo build --release`, then your binary in a minimal Debian image, without admin rights. Your API listens on the port it receives in `PORT`, like this Axum API (source 1):

```rust titre="src/main.rs"
use axum::{routing::get, Router};

#[tokio::main]
async fn main() {
    let port = std::env::var("PORT").unwrap_or_else(|_| "8080".into());
    let app = Router::new()
        .route("/", get(|| async { "Bonjour" }))
        .route("/health", get(|| async { "ok" }));
    let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{port}")).await.unwrap();
    axum::serve(listener, app).await.unwrap();
}
```

## Add a database

> You, to your agent: Add a PostgreSQL database.

Your agent declares the database in while.yaml, and its address reaches your code in `DATABASE_URL`. It is backed up every day, and can go back to a precise moment if needed.

## Speed things up with a cache

> You, to your agent: Add a cache for the most-read pages.

Your agent declares a Redis-compatible cache, connected to your code with its password.

## Restrict your API to your colleagues

> You, to your agent: Restrict the API to people in the company.

Your agent adds two lines to the service:

```yaml titre="while.yaml"
    access: internal
    email_domains: [acme.com]
```

Once your Google Workspace or Microsoft 365 is connected to while, on the Pro plan, your colleagues open the API with their usual account, and your code receives their name and email address, with no sign-in page to write.

## Move to your own domain

> You, to your agent: Put the API on api.acme.com.

Your agent declares the domain, you add the DNS records it gives you, and the HTTPS certificate follows.

## Fix a vulnerability in your dependencies

> You, to your agent: Fix the vulnerabilities in our dependencies.

Your API's dependencies are checked against known vulnerabilities at every deployment, then every day. Your agent is notified of a serious vulnerability, and updates the package involved.

## Go back to the previous version

> You, to your agent: Go back to the previous version.

In the 30 minutes after a deployment, the previous version comes back in a second. After that, it takes a few seconds. Once the previous version is back, your agent reads what broke in while's logs, fixes it and deploys again.

## Next steps

- [Deploy a Go API](/en/guides/deploy-go-api/)
- [Deploy a Docker container](/en/guides/deploy-docker-container/)
- [Add a Redis-compatible cache](/en/guides/add-redis-cache/)

## Sources

1. [Axum, the documentation](https://docs.rs/axum/latest/axum/), 2026-11-02

## Questions

### Do I need to write a Dockerfile?

No. while recognizes Rust, and your agent gets a Dockerfile ready to build. If your project already has its own, that one builds the image.

### Axum, Actix or Rocket?

All of them, as long as they listen on 0.0.0.0 on the port received in PORT. For Rocket, your agent sets ROCKET_ADDRESS and ROCKET_PORT.

### What if my binary has a different name?

The Dockerfile takes the name from your Cargo.toml.

### Where is my API hosted?

In France, by Nextmap, a French company.
