Skip to content
Back to skills

Mistral Hello World

ASecurity

'Create a minimal working Mistral AI chat completion example.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
developmenttypescriptpythonbashnodetestingapi

Works with

  • claude code
  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned November 11, 2026

npx -y skills add pauldx/claudifying --skill mistral-hello-world --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mistral Hello World?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mistral Hello World
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pauldx-mistral-hello-world/badge)](https://www.skillsdirectory.com/skills/pauldx-mistral-hello-world)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: mistral-hello-world
description: 'Create a minimal working Mistral AI chat completion example.

  Use when starting a new Mistral integration, testing your setup,

  or learning basic Mistral API patterns.

  Trigger with phrases like "mistral hello world", "mistral example",

  "mistral quick start", "simple mistral code", "mistral chat".

  '
allowed-tools: Read, Write, Edit
version: 1.0.0
license: MIT
tags:
- saas
- mistral
- api
- testing
compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
---
# Mistral AI Hello World

## Overview
Minimal working examples demonstrating Mistral AI chat completions, streaming, multi-turn conversation, and JSON mode. Uses the official `@mistralai/mistralai` TypeScript SDK and `mistralai` Python SDK.

## Prerequisites
- Completed `mistral-install-auth` setup
- Valid `MISTRAL_API_KEY` environment variable set
- Node.js 18+ or Python 3.9+

## Instructions

### Step 1: Basic Chat Completion

**TypeScript (hello-mistral.ts)**
```typescript
import { Mistral } from '@mistralai/mistralai';

const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY });

async function main() {
  const response = await client.chat.complete({
    model: 'mistral-small-latest',
    messages: [
      { role: 'user', content: 'Say "Hello, World!" in a creative way.' },
    ],
  });

  console.log(response.choices?.[0]?.message?.content);
  console.log('Tokens used:', response.usage);
}

main().catch(console.error);
```

**Python (hello_mistral.py)**
```python
import os
from mistralai import Mistral

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

response = client.chat.complete(
    model="mistral-small-latest",
    messages=[
        {"role": "user", "content": "Say 'Hello, World!' in a creative way."}
    ],
)

print(response.choices[0].message.content)
print(f"Tokens: {response.usage}")
```

### Step 2: Run the Example
```bash
# TypeScript
npx tsx hello-mistral.ts

# Python
python hello_mistral.py
```

### Step 3: Streaming Response

Streaming delivers the first token in ~200ms instead of waiting 1-2s for the full response.

**TypeScript**
```typescript
import { Mistral } from '@mistralai/mistralai';

const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY });

async function streamChat() {
  const stream = await client.chat.stream({
    model: 'mistral-small-latest',
    messages: [
      { role: 'user', content: 'Tell me a short story about AI.' },
    ],
  });

  for await (const event of stream) {
    const content = event.data?.choices?.[0]?.delta?.content;
    if (content) process.stdout.write(content);
  }
  console.log(); // newline
}

streamChat().catch(console.error);
```

**Python**
```python
stream = client.chat.stream(
    model="mistral-small-latest",
    messages=[{"role": "user", "content": "Tell me a short story about AI."}],
)

for event in stream:
    content = event.data.choices[0].delta.content
    if content:
        print(content, end="", flush=True)
print()
```

### Step 4: Multi-Turn Conversation

```typescript
const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [
  { role: 'system', content: 'You are a helpful coding assistant.' },
  { role: 'user', content: 'What is the capital of France?' },
];

const r1 = await client.chat.complete({
  model: 'mistral-small-latest', messages,
});
const answer = r1.choices?.[0]?.message?.content ?? '';
console.log('A1:', answer);

// Continue the conversation
messages.push({ role: 'assistant', content: answer });
messages.push({ role: 'user', content: 'What about Germany?' });

const r2 = await client.chat.complete({
  model: 'mistral-small-latest', messages,
});
console.log('A2:', r2.choices?.[0]?.message?.content);
```

### Step 5: JSON Mode (Structured Output)

```typescript
const response = await client.chat.complete({
  model: 'mistral-small-latest',
  messages: [
    { role: 'user', content: 'List 3 programming languages with their year of creation as JSON.' },
  ],
  responseFormat: { type: 'json_object' },
});

const data = JSON.parse(response.choices?.[0]?.message?.content ?? '{}');
console.log(data);
```

### Step 6: With Temperature and Token Limits

```typescript
const response = await client.chat.complete({
  model: 'mistral-small-latest',
  messages: [{ role: 'user', content: 'Write a haiku about coding.' }],
  temperature: 0.7,   // 0-1, higher = more creative
  maxTokens: 100,     // cap output length
  topP: 0.9,          // nucleus sampling
});
```

## Output
- Working code file with Mistral client initialization
- Successful API response with generated text
- Console output showing response and token usage

## Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| `Import Error` | SDK not installed | Run `npm install @mistralai/mistralai` |
| `401 Unauthorized` | Invalid API key | Check `MISTRAL_API_KEY` is set |
| `ERR_REQUIRE_ESM` | CommonJS project | Use `import` syntax or dynamic `await import()` |
| `429 Rate Limited` | Too many requests | Wait and retry with backoff |

## Model Quick Reference

| Model ID | Best For | Context |
|----------|----------|---------|
| `mistral-small-latest` | Fast, cost-effective tasks | 256k |
| `mistral-large-latest` | Complex reasoning, analysis | 256k |
| `codestral-latest` | Code generation, FIM | 256k |
| `mistral-embed` | Text/code embeddings | 8k |
| `pixtral-large-latest` | Vision + text (multimodal) | 128k |

## Resources
- [Mistral AI Quickstart](https://docs.mistral.ai/getting-started/quickstart/)
- [Chat Completions API](https://docs.mistral.ai/api/endpoint/chat/)
- [Models Overview](https://docs.mistral.ai/getting-started/models/)

## Next Steps
Proceed to `mistral-core-workflow-a` for production chat patterns or `mistral-local-dev-loop` for dev workflow setup.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.