--- name: mistral-install-auth description: 'Install and configure the Mistral AI SDK with authentication. Use when setting up a new Mistral integration, configuring API keys, or initializing Mistral AI in your project. Trigger with phrases like "install mistral", "setup mistral", "mistral auth", "configure mistral API key". ' allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep version: 1.0.0 license: MIT author: Jeremy Longshore tags: - saas - mistral - api - authentication compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw --- # Mistral AI Install & Auth ## Overview Set up the official Mistral AI SDK (`@mistralai/mistralai` for TypeScript, `mistralai` for Python) and configure authentication for chat completions, embeddings, function calling, vision, and agents. ## Prerequisites - Node.js 18+ or Python 3.9+ - Package manager (npm, pnpm, yarn, or pip) - Mistral AI account at [console.mistral.ai](https://console.mistral.ai/) - API key from La Plateforme (Settings > API Keys) ## Instructions ### Step 1: Install SDK **Node.js (TypeScript/JavaScript) — ESM only** ```bash set -euo pipefail # npm npm install @mistralai/mistralai # pnpm pnpm add @mistralai/mistralai # yarn yarn add @mistralai/mistralai ``` **Python** ```bash set -euo pipefail pip install mistralai ``` ### Step 2: Configure Authentication **Environment Variables (Recommended)** ```bash # Set in shell export MISTRAL_API_KEY="your-api-key" # Or create .env file (add to .gitignore!) echo 'MISTRAL_API_KEY=your-api-key' >> .env echo '.env' >> .gitignore ``` **Using dotenv (Node.js)** ```bash set -euo pipefail npm install dotenv ``` ```typescript import 'dotenv/config'; ``` ### Step 3: Verify Connection **TypeScript** ```typescript import { Mistral } from '@mistralai/mistralai'; const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY, }); async function testConnection() { try { const models = await client.models.list(); console.log('Connection successful! Available models:'); for (const model of models.data ?? []) { console.log(` - ${model.id}`); } } catch (error: any) { if (error.status === 401) { console.error('Invalid API key. Check your key at console.mistral.ai'); } else { console.error('Connection failed:', error.message); } } } testConnection(); ``` **Python** ```python import os from mistralai import Mistral client = Mistral(api_key=os.environ["MISTRAL_API_KEY"]) def test_connection(): try: models = client.models.list() print("Connection successful! Available models:") for model in models.data: print(f" - {model.id}") except Exception as e: print(f"Connection failed: {e}") test_connection() ``` ### Step 4: Production — Secret Manager ```typescript // GCP Secret Manager (recommended for production) import { SecretManagerServiceClient } from '@google-cloud/secret-manager'; const sm = new SecretManagerServiceClient(); async function getMistralKey(): Promise { const [version] = await sm.accessSecretVersion({ name: 'projects/my-project/secrets/mistral-api-key/versions/latest', }); return version.payload?.data?.toString() ?? ''; } ``` ```typescript // AWS Secrets Manager alternative import { SecretsManager } from '@aws-sdk/client-secrets-manager'; const sm = new SecretsManager({ region: 'us-east-1' }); async function getMistralKey(): Promise { const { SecretString } = await sm.getSecretValue({ SecretId: 'mistral/api-key', }); return SecretString!; } ``` ## Output - Installed SDK package (`@mistralai/mistralai` or `mistralai`) - Environment variable or .env file with API key - Successful connection verification listing available models ## Error Handling | Error | Cause | Solution | |-------|-------|----------| | `401 Unauthorized` | Invalid or missing API key | Verify key at console.mistral.ai | | `Module not found` | SDK not installed | Run `npm install @mistralai/mistralai` | | `ERR_REQUIRE_ESM` | Using CommonJS require | SDK is ESM-only; use `import` or dynamic `await import()` | | Network Error | Firewall blocking HTTPS | Ensure outbound HTTPS to `api.mistral.ai` is allowed | ## Examples ### TypeScript Client with Retry ```typescript import { Mistral } from '@mistralai/mistralai'; const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY, timeoutMs: 30_000, maxRetries: 3, }); export default client; ``` ### Python Client with Retry ```python import os from mistralai import Mistral client = Mistral( api_key=os.environ["MISTRAL_API_KEY"], timeout_ms=30_000, max_retries=3, ) ``` ### Validate API Key Format ```typescript function validateMistralApiKey(key: string): boolean { // Mistral keys are typically 32-char hex strings return /^[a-zA-Z0-9]{20,}$/.test(key); } ``` ## Resources - [Mistral AI Documentation](https://docs.mistral.ai/) - [Mistral AI Console](https://console.mistral.ai/) - [TypeScript SDK (client-ts)](https://github.com/mistralai/client-ts) - [Python SDK (client-python)](https://github.com/mistralai/client-python) - [API Reference](https://docs.mistral.ai/api/) ## Next Steps After successful auth, proceed to `mistral-hello-world` for your first chat completion.