npm package: @striderlabs/mcp-duolingo
Description: MCP server for Duolingo - language learning app connector
Author: Strider Labs
Latest version: 1.0.0

# @striderlabs/mcp-duolingo

MCP (Model Context Protocol) server for [Duolingo](https://www.duolingo.com) — a language learning platform.

## Overview

This MCP server enables AI assistants to interact with Duolingo via browser automation using Playwright. It supports both local headless browsers and remote browsers via [Browserbase](https://www.browserbase.com/).

## Tools

| Tool | Description |
|------|-------------|
| `get_profile` | Get user profile, streak, XP, and current courses |
| `get_courses` | List available language courses on Duolingo |
| `start_lesson` | Start a lesson in a specific skill |
| `get_progress` | Get detailed progress for a course |
| `get_leaderboard` | Get league leaderboard standings |

## Installation

```bash
npm install @striderlabs/mcp-duolingo
```

## Usage

### With Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "duolingo": {
      "command": "npx",
      "args": ["-y", "@striderlabs/mcp-duolingo"],
      "env": {
        "BROWSERBASE_CDP_URL": "your-browserbase-cdp-url-here"
      }
    }
  }
}
```

### With Browserbase (Remote Browser)

Set the `BROWSERBASE_CDP_URL` environment variable to your Browserbase session CDP URL:

```bash
BROWSERBASE_CDP_URL="wss://connect.browserbase.com?apiKey=YOUR_KEY" node dist/index.js
```

### Local Headless Browser

Without `BROWSERBASE_CDP_URL`, the server launches a local headless Chromium instance:

```bash
node dist/index.js
```

## Requirements

- Node.js >= 18.0.0
- A Duolingo account (the browser session must be authenticated)
- Either Browserbase CDP URL or local Chromium (installed via `npx playwright install chromium`)

## Authentication

This server uses browser automation and requires an active Duolingo session. The browser session must already be logged in to Duolingo, or you must log in manually when the browser opens.

For persistent sessions with Browserbase, configure a persistent session with saved cookies for `duolingo.com`.

## Environment Variables

| Variable | Description |
|----------|-------------|
| `BROWSERBASE_CDP_URL` | CDP WebSocket URL for Browserbase remote browser (optional — uses local Chromium if not set) |

## Tool Details

### `get_profile`
Returns the user's profile information including username, current streak, total XP, and enrolled courses.

### `get_courses`
Lists all available language courses on Duolingo's course catalog page.

### `start_lesson`
**Parameters:**
- `skill` (string, required): The skill name to start a lesson for (e.g., "Basics", "Food", "Travel")

Navigates to the specified skill and initiates a lesson session.

### `get_progress`
**Parameters:**
- `course_language` (string, optional): Language code (e.g., `es`, `fr`, `de`). Defaults to current active course.

Returns XP, level, streak, daily goal progress, and skill completion status.

### `get_leaderboard`
Returns the current league name, weekly XP standings for all league members, and promotion/demotion zone information.

## Development

```bash
# Clone and install
git clone ...
npm install

# Build
npm run build

# Run locally
npm start
```

## License

MIT