Skip to main content
Glama
takeoff-pdm

shelf-nu-mcp

by takeoff-pdm
README.md
# shelf-nu-mcp

MCP server for self-hosted [shelf.nu](https://github.com/Shelf-nu/shelf.nu) instances. It lets Claude search and manage assets, custody, locations, kits and bookings.

It talks to Shelf's `/api/mobile/*` REST API, the same one the official companion app uses. It logs in with your Shelf email and password and refreshes the session automatically. A few kit features exist only in the web app, so for those it submits the web forms with a cookie session.

## Requirements

- Node.js 20+
- A Shelf account with password login. Use a dedicated user with only the role it needs: the server can do anything that user can.

## Install in Claude

### Claude Code

```sh
claude mcp add shelf -s user \
  -e SHELF_URL=https://storage.takeoff-pdm.de \
  -e SHELF_EMAIL=you@example.com \
  -e SHELF_PASSWORD='your-password' \
  -- npx -y github:takeoff-pdm/shellf-nu-mcp
```

Run `/mcp` in Claude Code to check that `shelf` is connected.

### Claude Desktop

Add this to `claude_desktop_config.json` (Settings → Developer → Edit Config), then restart Claude Desktop:

```json
{
  "mcpServers": {
    "shelf": {
      "command": "npx",
      "args": ["-y", "github:takeoff-pdm/shellf-nu-mcp"],
      "env": {
        "SHELF_URL": "https://storage.takeoff-pdm.de",
        "SHELF_EMAIL": "you@example.com",
        "SHELF_PASSWORD": "your-password"
      }
    }
  }
}
```

### From a local checkout

```sh
git clone git@github.com:takeoff-pdm/shellf-nu-mcp.git
cd shellf-nu-mcp && npm install    # also builds dist/
claude mcp add shelf -s user -e SHELF_EMAIL=… -e SHELF_PASSWORD=… -- node "$PWD/dist/index.js"
```

## Configuration

| Env var          | Required | Description                                                                 |
| ---------------- | -------- | --------------------------------------------------------------------------- |
| `SHELF_EMAIL`    | yes      | Shelf login email                                                           |
| `SHELF_PASSWORD` | yes      | Shelf login password                                                        |
| `SHELF_URL`      | no       | Instance URL (default `https://storage.takeoff-pdm.de`)                     |
| `SHELF_ORG_ID`   | no       | Default workspace. Without it, your last-selected or personal one is used   |

Credentials are only read from the environment. Never commit them.

## Tools

- **Account:** `shelf_whoami`, `shelf_set_workspace`, `shelf_dashboard`
- **Assets:** list, get, create, update, delete, add note, change location, adjust quantity, manage placements, upload image, look up a QR code or barcode, link a QR code
- **Reference data:** locations, categories, tags (+ create), custom fields, team members
- **Custody:** assign or release (works in bulk and with quantities), move many assets to one location
- **Kits:** list, get, create (optionally with assets), add or remove assets, assign or release custody in bulk, change location
- **Bookings:** list, calendar, get, available assets, create, update, add or remove assets, reserve, check out, check in, cancel, archive, duplicate, delete, booking tags

Every tool takes an optional `orgId`. Tools that delete or cancel things are marked with `destructiveHint`.

Not covered yet: audits, partial check-in/check-out, model requests.

Kit creation and kit contents use Shelf's web forms instead of the mobile API, so a Shelf update may break them.

## Development

```sh
npm install
npm run dev     # tsc --watch
```

## License

MIT

TDQS

B3/5.0

Scored across 46 tools

Disambiguation4/5

Most tools have clearly distinct purposes and descriptions clarify overlaps (e.g., quantity vs placement, single vs bulk location moves). A few related tools (shelf_update_asset_location, shelf_bulk_update_location, shelf_manage_placements, shelf_adjust_quantity) could still be confused, but the set is largely unambiguous.

Naming Consistency4/5

All tools use a consistent shelf_ prefix and snake_case, with no camelCase mixing. Most follow a verb_noun pattern, though a few are noun-first (shelf_dashboard, shelf_kit_action, shelf_bookings_calendar), a minor deviation.

Tool Count2/5

46 tools is excessive for practical agent use; even a broad asset/booking domain doesn't require this many separate tools, and the count exceeds the threshold for 'too many' (25+).

Completeness4/5

Core CRUD and lifecycle coverage is strong for assets, kits, bookings, custody, and QR codes. Gaps exist in managing reference data (no update/delete for tags, locations, categories, custom fields, team members) and some minor lifecycle operations (unlink QR, kit updates).

Maintenance

ActivityMaintained
ResponsivenessNo issues