shelf-nu-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shelf-nu-mcp list all assets in the Berlin office and their custodians"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
shelf-nu-mcp
MCP server for self-hosted 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.
Related MCP server: ServiceNow MCP Server
Install in Claude
Claude Code
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-mcpRun /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:
{
"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
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 |
| yes | Shelf login email |
| yes | Shelf login password |
| no | Instance URL (default |
| 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_dashboardAssets: 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
npm install
npm run dev # tsc --watchLicense
MIT
Available Tools
46 toolsshelf_add_asset_noteB
Add a note to an asset's activity log.
Inputs: assetId (required), content (required), orgId.
shelf_adjust_quantityB
Adjust stock of a quantity-tracked asset (restock, correction, or loss).
Inputs: assetId (required), category (required), quantity (required), direction (required), +2 more.
shelf_archive_bookingC
Archive a completed/cancelled booking.
Inputs: bookingId (required), orgId.
shelf_assign_custodyB
Give one or more assets into a team member's custody. For quantity-tracked assets pass quantities {assetId: qty}.
Inputs: assetIds (required), custodianId (required), orgId, quantities.
shelf_available_assetsCRead-only
Assets available for booking in a given period.
Inputs: bookingTo (required), bookingFrom (required), page, orgId, +3 more.
shelf_booking_add_assetsC
Add assets and/or kits to a booking.
Inputs: bookingId (required), orgId, kitIds, assetIds.
shelf_booking_remove_assetsB
Remove assets and/or kits from a booking.
Inputs: bookingId (required), orgId, kitIds, assetIds.
shelf_bookings_calendarBRead-only
Bookings overlapping a date range (ISO 8601 dates).
Inputs: end (required), start (required), orgId, search, +1 more.
shelf_bulk_update_locationC
Move several assets to one location.
Inputs: assetIds (required), locationId (required), orgId.
shelf_cancel_bookingCDestructive
Cancel a booking.
Inputs: bookingId (required), orgId, cancellationReason.
shelf_checkin_bookingA
Check in an ongoing/overdue booking (all assets).
Inputs: bookingId (required), orgId, timeZone.
shelf_checkout_bookingB
Check out a reserved booking (all assets).
Inputs: bookingId (required), orgId, timeZone.
shelf_create_assetA
Create a new asset. Use shelf_list_categories/locations/tags/custom_fields to look up IDs first.
Inputs: title (required), qrId, tags, orgId, +5 more.
shelf_create_bookingA
Create a booking (as DRAFT). Use shelf_reserve_booking afterwards to reserve it.
Inputs: name (required), endDate (required), startDate (required), custodianTeamMemberId (required), +5 more.
shelf_create_kitC
Create a new kit, optionally filled with assets right away. Returns the created kit.
Inputs: name (required), orgId, assetIds, categoryId, +3 more.
shelf_create_tagC
Create a new tag.
Inputs: name (required), orgId.
shelf_dashboardCRead-only
Workspace dashboard: asset/booking counts, overdue items, etc.
Inputs: orgId.
shelf_delete_assetADestructive
Permanently delete an asset. Irreversible – confirm with the user first.
Inputs: assetId (required), orgId.
shelf_delete_bookingADestructive
Permanently delete a booking. Irreversible – confirm with the user first.
Inputs: bookingId (required), orgId.
shelf_duplicate_bookingB
Duplicate a booking into a new draft.
Inputs: bookingId (required), orgId.
shelf_get_assetBRead-only
Get full details of an asset (location, custody, bookings, notes, custom fields, quantities).
Inputs: assetId (required), orgId.
shelf_get_bookingBRead-only
Get booking details incl. assets and kits.
Inputs: bookingId (required), orgId.
shelf_get_kitBRead-only
Get kit details incl. contained assets.
Inputs: kitId (required), orgId.
shelf_kit_actionB
Bulk action on kits: assign custody, release custody, or move to a location.
Inputs: intent (required), kitIds (required), orgId, custodianId, +1 more.
shelf_kit_add_assetsC
Add assets to an existing kit (existing contents are kept).
Inputs: kitId (required), assetIds (required), orgId, quantities.
shelf_kit_remove_assetsC
Remove assets from a kit.
Inputs: kitId (required), assetIds (required), orgId.
shelf_link_qrC
Link an existing Shelf QR code to an asset.
Inputs: qrId (required), assetId (required), orgId.
shelf_list_assetsCRead-only
Search/list assets in the workspace.
Inputs: page, orgId, search, status, +2 more.
shelf_list_bookingsCRead-only
Search/list bookings.
Inputs: page, orgId, search, sortBy, +3 more.
shelf_list_booking_tagsCRead-only
List booking tags.
Inputs: orgId.
shelf_list_categoriesCRead-only
List asset categories.
Inputs: orgId.
shelf_list_custom_fieldsARead-only
List active custom field definitions (optionally those applying to one category).
Inputs: orgId, categoryId.
shelf_list_kitsCRead-only
Search/list kits.
Inputs: page, orgId, search, status, +2 more.
shelf_list_locationsCRead-only
List/search locations.
Inputs: page, orgId, search, perPage.
shelf_list_tagsCRead-only
List asset tags.
Inputs: orgId.
shelf_list_team_membersBRead-only
List/search team members (needed as custodians for custody and bookings).
Inputs: page, orgId, search, perPage.
shelf_lookup_codeARead-only
Resolve a scanned Shelf QR code ID or a barcode value to the asset/kit it belongs to.
Inputs: qrId, orgId, barcode.
shelf_manage_placementsA
Set how many units of a quantity-tracked asset sit at each location (full replacement).
Inputs: assetId (required), placements (required), orgId.
shelf_release_custodyC
Release custody of one or more assets. For quantity-tracked assets pass quantities {assetId: qty}.
Inputs: assetIds (required), orgId, quantities.
shelf_reserve_bookingC
Reserve a DRAFT booking.
Inputs: bookingId (required), orgId, timeZone.
shelf_set_asset_imageA
Upload a local image file (jpg/png/webp) as the asset's main image.
Inputs: assetId (required), filePath (required), orgId.
shelf_set_workspaceA
Set the default workspace (organization) for subsequent calls in this session.
Inputs: orgId (required).
shelf_update_assetB
Update fields of an asset. Omitted fields stay unchanged. tags replaces the full tag set.
Inputs: assetId (required), tags, orgId, title, +4 more.
shelf_update_asset_locationA
Move an asset to a location. For quantity-tracked assets, optionally pass a quantity.
Inputs: assetId (required), locationId (required), orgId, quantity.
shelf_update_bookingB
Update a booking's name, dates, custodian, description or tags (all core fields required).
Inputs: name (required), endDate (required), bookingId (required), startDate (required), +5 more.
shelf_whoamiARead-only
Show the logged-in user and the workspaces (organizations) they belong to, incl. IDs and roles. The first workspace is the default.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 46 tools
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.
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.
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+).
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
Related MCP Connectors
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Work with your DealSharp negotiation projects, documents and tools from Claude.
Skedda MCP server for ChatGPT, Claude and any AI agent: list bookings, create booking, cancel booking, approve booking request and block out a space in your own Skedda account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Skedda yourself; Cotlet does not store your password and you need no Skedda API key. About the official Skedda API: Skedda has a read-only API in beta and no official MCP server (checked 31 Oct 2026). It lists spaces and booking occurrences and sends webhooks for booking events, on Skedda Premier and AllBooked Advanced. Setup and FAQ: https://cotlet.dev/integrations/skedda-api-mcp-server
Related MCP Servers
- AlicenseBqualityBmaintenanceConnects BookStack knowledge bases to Claude through 47+ tools covering complete CRUD operations for books, pages, chapters, shelves, users, search, attachments, and permissions. Enables full management of BookStack content and configuration through natural language.56394 npm104MIT
- AlicenseCqualityDmaintenanceEnables Claude to interact with ServiceNow instances to manage incidents, service catalogs, workflows, and knowledge bases through the ServiceNow API. It supports comprehensive operations including record querying, script execution, and user management using various authentication methods.66MIT
- AlicenseNot gradedqualityDmaintenanceConnects Claude to your self-hosted or cloud-based Seafile storage for managing libraries and files through natural language. It enables users to browse directories, read file contents, and perform file operations like moving, renaming, or searching across their private infrastructure.4MIT
- AlicenseAqualityCmaintenanceProvides Claude with access to IT Glue documentation and asset management, enabling searching and retrieval of organizations, configurations, passwords, documents, and more.24Apache 2.0