Skip navigation
Getting started › Overview

API docs

One body of content, two ways in: REST for scripts, MCP for agents. Public articles need no key; subscriber guides need an API key from an account with access.

Overview

Every path below is relative to this base URL. Responses are JSON.

base URL
https://api.modernengineer.dev

Authentication

Create an API key in API key management, then send it in an Authorization: Bearer <key> header. The key is shown once, when you create it. Public verbs (catalog, articles) need no key.

Limits & errors

Applies toLimit
Paid guide reads (content.get)1,000 in 24 hours, per account
File pack and visual links (packs.download, visuals.issueUrl)50 links in 24 hours, per account
The /mcp endpoint300 per minute, per IP

Every error comes back in the same JSON shape, with a requestId to quote when reporting it:

application/json
{
  "error": {
    "code": "not_found",
    "message": "Content item was not found",
    "requestId": "…"
  }
}
StatusError
400invalid_input
401unauthenticated
403forbidden
404not_found
429too_many_requests
500internal_error

MCP setup

Declare it once in an MCP client and replace <API key> with the key you created (JSON config does not expand environment variables; use your client's own variable syntax if it has one). It uses the same API key as REST.

mcp.json
{
  "mcpServers": {
    "modernengineer": {
      "type": "http",
      "url": "https://api.modernengineer.dev/mcp",
      "headers": {
        "Authorization": "Bearer <API key>"
      }
    }
  }
}

Tool list

The verbs agents use to read content. Each has a REST path and an MCP tool with the same parameters. tools/list also returns a few account tools (API keys, billing) not covered here.

VerbRESTMCP toolAccess
catalog.listGET /catalogcatalog_listNo key
catalog.getGET /catalog/{locale}/{slug}catalog_getNo key
articles.listGET /articlesarticles_listNo key
articles.getGET /articles/{locale}/{slug}articles_getNo key
content.listGET /contentcontent_listKey required
content.getGET /content/{locale}/{slug}content_getKey required
packs.downloadPOST /packs/{slug}/downloadpacks_downloadKey required
visuals.issueUrlPOST /visuals/{locale}/{slug}/urlvisuals_issueUrlKey required