Skip to main content
Glama
Decian-Inc

curricula-mcp

by Decian-Inc
README.md
# Curricula MCP

An MCP server that exposes all 44 operations in the Huntress Curricula public API. It uses the OAuth access token issued by Curricula and supports the production and development-sandbox APIs.

## Install

```bash
pip install curricula-mcp
```

Or run from a checkout:

```bash
pip install -e .
```

## Configure

Create an OAuth access token with the Curricula scopes required for the operations you plan to use, then set:

```bash
export CURRICULA_ACCESS_TOKEN="your-access-token"
# Optional; default is production.
export CURRICULA_BASE_URL="https://mycurricula.com/api/v1"
```

For the development sandbox, set `CURRICULA_BASE_URL=https://dev.curricula.com/api/v1`.

The server sends `Authorization: Bearer <token>` and uses the JSON:API media type. See the [Curricula authentication and scopes documentation](https://curricula.stoplight.io/docs/curricula-api/90755b35b33f4-authentication).

## Connect an MCP client

```json
{
  "mcpServers": {
    "curricula": {
      "command": "curricula-mcp",
      "env": {
        "CURRICULA_ACCESS_TOKEN": "your-access-token"
      }
    }
  }
}
```

Each API operation is an MCP tool. Supply URI identifiers through `path_params`, filters/pagination/includes through `query`, and JSON:API request content through `body`. For example:

```json
{
  "path_params": {"accountId": "abc123"},
  "query": {"include": "learners", "page": 1, "perPage": 50}
}
```

See [TOOLS.md](TOOLS.md) for the complete catalog.

## Safety

Most tools are read-only. The five state-changing tools (`delete_account`, `report_phishing_attempt`, `create_admin_user`, `update_admin_user`, and `delete_admin_user`) forward the request immediately. Agents should confirm intent before calling them.

## Development

```bash
pip install -e ".[dev]"
pytest
```

TDQS

B3.1/5.0

Scored across 44 tools

Disambiguation4/5

Most tools have clear resource-and-scope distinctions, such as list_account_learners vs list_learners. However, list_account_summary_reports_for_account and list_account_summary_reports are nearly identical, and list_account_admin_users vs list_admin_users could easily be confused.

Naming Consistency4/5

Tool names overwhelmingly follow a consistent verb_noun snake_case pattern with list/get/create/update/delete prefixes. The main deviations are report_phishing_attempt, which uses an action verb rather than a CRUD prefix, and the awkward list_account_summary_reports_for_account name.

Tool Count2/5

44 tools is well above the well-scoped range, and many are thin GET wrappers around nested REST endpoints. The surface area could be meaningfully reduced by consolidating account-scoped list variants or using parameters.

Completeness2/5

The tool surface is heavily read-only: only admin users have full create/update/delete coverage, plus one report action. There are no mutation tools for accounts, assignments, departments, groups, learners, phishing campaigns, phishing scenarios, or episodes, so management workflows cannot complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues