Déployer notre Agent IA dans le monde avec Cloudflare

Fait partie de la série Agents IA et serveur MCP au service du web agentique

Cette dernière partie est optionnelle, vous pouvez déployer votre Agent IA où vous voulez. J'ai choisi Cloudflare car c'est ma plateforme quotidienne pour déployer des projets JavaScript. Cela nécessite un petit refactoring pour tirer parti des capacités MCP de Cloudflare.

Cloudflare fournit plusieurs primitives pour les Agents IA et les serveurs MCP sur leur plateforme. Pour s'assurer que tout fonctionne, nous allons déplacer notre MCP dans un Worker Cloudflare.

Mettre en place l'outillage

D'abord, installez les dépendances :

bash
pnpm add agents && pnpm add -D wrangler @types/node

Ensuite, ajoutez les scripts suivants à package.json :

json
{
  "scripts": {
    "dev:wrangler": "wrangler --config ./worker/wrangler.jsonc dev",
    "deploy:wrangler": "wrangler --config ./worker/wrangler.jsonc deploy",
    "cf-typegen": "wrangler types"
  }
}

Note

Pensez à suffixer ou préfixer les noms des scripts avec wrangler: pour éviter les confusions avec d'autres scripts.

Nous avons aussi besoin d'un wrangler.jsonc pour configurer notre Worker Cloudflare. Créez worker/wrangler.jsonc avec le contenu suivant :

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "our-mcp",
  "main": "worker/index.ts",
  "compatibility_date": "2025-03-10",
  "compatibility_flags": [
    "nodejs_compat"
  ],
  "migrations": [
    {
      "new_sqlite_classes": [
        "OurMcp"
      ],
      "tag": "v1"
    }
  ],
  "durable_objects": {
    "bindings": [
      {
        "class_name": "OurMcp",
        "name": "MCP_OBJECT"
      }
    ]
  },
  "observability": {
    "enabled": true,
    "head_sampling_rate": 0.1
  }
}

Note

Le fichier wrangler.jsonc n'est pas stocké à la racine pour éviter les conflits lorsque nous déploierons l'application Nuxt.

Avec ce fichier, Wrangler cherchera notre code Worker dans worker/index.ts. Nous configurons aussi un Durable Object nommé OurMcp. Même si nous n'avons pas besoin des capacités SQLite, c'est obligatoire pour utiliser la classe MCP Agent.

Pour terminer la mise en place, créez un fichier tsconfig.wrangler.json pour configurer TypeScript pour le Worker :

json
{
  "compilerOptions": {
    "target": "es2021",
    "jsx": "react-jsx",
    "lib": [
      "es2021"
    ],
    "module": "es2022",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "allowJs": true,
    "checkJs": false,
    "strict": true,
    "noEmit": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "isolatedModules": true,
    "skipLibCheck": true
  },
  "include": [
    "worker-configuration.d.ts",
    "worker/**/*.ts"
  ]
}

Ajoutez ce fichier au tsconfig.json existant dans la section references :

json
{
  "files": [],
  "references": [
    {
      "path": "./.nuxt/tsconfig.app.json"
    },
    {
      "path": "./.nuxt/tsconfig.server.json"
    },
    {
      "path": "./.nuxt/tsconfig.shared.json"
    },
    {
      "path": "./.nuxt/tsconfig.node.json"
    },
    {
      "path": "./tsconfig.worker.json"
    }
  ]
}

Générez maintenant les types :

bash
pnpm run cf-typegen

Cela garantit un bon autocomplete dans les fichiers du Worker.

N'oubliez pas d'ajouter le dossier .wrangler à .gitignore pour éviter de le commettre par erreur.

Passage au Worker

Maintenant que l'outillage est prêt, déplaçons le code MCP dans un Worker Cloudflare.

Créez worker/index.ts et ajoutez un Worker minimal :

ts
export default {
  fetch(request: Request, env: Env, ctx: ExecutionContext) {
    return Response.json({ message: 'Hello from the worker!' })
  },
}

Un Worker, dans sa forme la plus simple, est un objet exporté avec une méthode fetch.

Avec le paquet agents installé, étendez le Worker pour le connecter au MCP.

Importez la classe McpAgent depuis agents et étendez‑la pour créer OurMcp :

ts
import { McpAgent } from 'agents'

class OurMcp extends McpAgent {
}

Puis utilisez OurMcp dans le code du Worker :

ts
export default {
  fetch(request: Request, env: Env, ctx: ExecutionContext) {
    return OurMcp.serve('/').fetch(request, env, ctx)
  },
}

Note

Tout cela se fait dans le même fichier.

Enfin, déplacez le code MCP dans la classe OurMcp :

ts
export class OurMcp extends McpAgent {
  server = new McpServer({
    name: 'ai-agent',
    version: '1.0.0'
  })

  async init() {
    this.server.tool (
      'addition',
      'Adds two numbers',
      {
        a: z.number().describe('The first number'),
        b: z.number().describe('The second number')
      },
      async (params) => {
        return {
          content: [
            {
              type: 'text',
              text: String(params.a + params.b)
            }
          ]
        }
      }
    )
  }
}

Comme vous le voyez, créer un MCP dans un Worker Cloudflare est simple. Vous pouvez maintenant supprimer sans risque le fichier server/routes/mcp.ts.

Nous pouvons démarrer le serveur de développement pour tester nos changements.

bash
pnpm run dev:wrangler

Vous pouvez tester via l'application IA ou via l'Inspector MCP.

Important

N'oubliez pas de changer la variable d'environnement NUXT_MCP_ENDPOINT dans votre fichier .env pour pointer vers l'URL du Worker (http://localhost:8787).

Déployer sur Cloudflare

C'est la partie la plus simple !

Exécutez :

bash
pnpm run deploy:wrangler

Patientez un instant et votre MCP sera en ligne.

Utilisez l'URL dans votre application IA pour interagir avec lui. Le déploiement doit fournir une URL du type https://our-mcp.<your-subdomain>.workers.dev.

Pour déployer l'application IA, exécutez :

bash
SERVER_PRESET=cloudflare_pages pnpm run build && npx wrangler --cwd dist pages deploy

La dernière étape consiste à configurer les variables d'environnement dans votre compte. Dans la page des paramètres Pages, ajoutez la clé API OpenAI en secret et l'URL de l'endpoint MCP en texte clair.

Paramètres Cloudflare Pages
Paramètres Cloudflare Pages

Et voilà, votre Agent IA est déployé et prêt à l'emploi.

Notre Agent IA, déployé pour tous.

Si vous regardez bien l'URL dans la vidéo, vous verrez qu'elle pointe vers le domaine Cloudflare Workers. 😌

Pd

Merci de me lire ! Je m'appelle Estéban, et j'adore écrire sur le développement web et le parcours humain qui l'entoure.

Je code depuis plusieurs années maintenant, et j'apprends encore de nouvelles choses chaque jour. J'aime partager mes connaissances avec les autres, car j'aurais aimé avoir accès à des ressources aussi claires et complètes lorsque j'ai commencé à apprendre la programmation.

Si vous avez des questions ou souhaitez discuter, n'hésitez pas à commenter ci-dessous ou à me contacter sur Bluesky, X, et LinkedIn.

J'espère que vous avez apprécié cet article et appris quelque chose de nouveau. N'hésitez pas à le partager avec vos amis ou sur les réseaux sociaux, et laissez un commentaire ou une réaction ci-dessous—cela me ferait très plaisir ! Si vous souhaitez soutenir mon travail, vous pouvez me sponsoriser sur GitHub !

Réactions

Discussions

Ajouter un commentaire

Vous devez être connecté pour accéder à cette fonctionnalité.