Skip to main content
Glama
README.md
# cockpit-mcp

A small, **read-only** [MCP](https://modelcontextprotocol.io) server for [Cockpit CMS](https://getcockpit.com). It lets an AI agent understand *the content behind a page* — the models, fields, and types — by asking tools, instead of fetching the whole REST API or reading docs.

Generic and reusable: point it at any Cockpit v2 instance (Core or Pro) via env vars. **Write it once, reuse in every project** — the code is generic; only `COCKPIT_URL` + `COCKPIT_TOKEN` change per project.

## Run with npx (no install)

It runs straight from GitHub — no clone, no registry:

```bash
npx -y github:Avanxo-Technology/cockpit-mcp          # latest main
npx -y github:Avanxo-Technology/cockpit-mcp#v0.1.0   # pinned to a tag
```

## Tools

| Tool | What it does |
|------|--------------|
| `list_models` | List all content models (collections & singletons) with a one-line summary. Start here. |
| `describe_model` | Field schema for one model — names, types, required, choices, linked models, nested fields. The "understand this quickly" tool. |
| `list_items` | List items for a model (Mongo-style `filter`, `sort`, `fields`, `limit`). |
| `get_item` | Fetch one item by `_id`. |
| `search` | Case-insensitive substring match on a text field. |

All tools are GET-only; the server never mutates content.

## Setup

```bash
cd cockpit-mcp
npm install
cp .env.example .env   # then fill in COCKPIT_URL and COCKPIT_TOKEN
```

Create the token in Cockpit admin: **Settings → API → add token** (a read scope is enough).

## Register with opencode / Claude (stdio)

Example MCP client config:

```json
{
  "mcpServers": {
    "cockpit": {
      "command": "npx",
      "args": ["-y", "github:Avanxo-Technology/cockpit-mcp"],
      "env": {
        "COCKPIT_URL": "http://localhost:8080",
        "COCKPIT_TOKEN": "your-token-here"
      }
    }
  }
}
```

Each project registers the same package and supplies its **own** `COCKPIT_URL` / `COCKPIT_TOKEN` — one package, reused everywhere. (For local dev against a checkout, swap `command` to `node` with the path to `src/index.js`.)

The server logs a connection/health line to **stderr** on startup (never to stdout, which carries the JSON-RPC stream).

## Compatibility

Targets **Cockpit v2 (Core & Pro)** REST API: `GET /api/content/models`, `/api/content/items/{model}`, `/api/content/item/{model}/{id}`, auth via the `api-key` header. On startup it probes `list_models`; if the URL/token is wrong it warns (auth failures surface as a clear message) and tools return errors until fixed — the server itself still starts.

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct operation: schema description, item retrieval by ID, filtered listing, model listing, and text search. No overlap in functionality.

Naming Consistency4/5

Most tools use a clear verb_noun pattern (describe_model, get_item, list_items, list_models). 'search' deviates by omitting the noun but still follows the verb-first convention. Overall consistent.

Tool Count5/5

Five tools is appropriate for a read-only content management server. Each tool serves a clear purpose without excess or deficiency.

Completeness5/5

The toolset fully covers the read-only domain: discover models, inspect schemas, retrieve items, and search. No gaps for the intended functionality.

Maintenance

ActivityInactive
ResponsivenessNo issues