Junk Drawer MCP Server
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., "@Junk Drawer MCP Serverdo we have a spare house key?"
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.
Junk Drawer MCP Server
A local MCP server cataloguing the small things that vanish: cables, adapters, batteries, craft bits, spare keys. You add an item once - with a location note, tags and a photo hint - and after that the question "do we have an HDMI adapter?" takes one tool call instead of twenty minutes of opening drawers.
Distinct from:
gear-serial-inventory-webapp - that one is for serial-numbered gear; this one is for unlabeled small things.
free-home-inventory-kit - that one is for insurance paperwork and printables; this one is for daily "where is it" moments.
By Asdale Dynamics, LLC - AI explained like a friend would: plain English, step by step, never condescending.
What it does
add_item - catalogue a thing: name, kind (cable, adapter, battery, craft, key, hardware, office, medical, media, other), room, container note, description, tags, photo hint.
search - ask in plain words: "do we have an HDMI adapter", "spare house key", "AA batteries". Scoring leans on name and tags; small plural/singular differences are forgiven.
where_is - one item's full story: exact spot, photo hint, move log.
list_by_room - items in one room, or (with no room) counts per room.
mark_moved - record a relocation; keeps the record and reality agreeing, which is the whole point.
move_history - every recorded hop for an item.
remove_item - mark something gone (used up, given away, binned).
summary - calm overview: counts by kind, moves on file.
list_kinds - the kinds the drawer knows.
Prompt: find_my_thing - a gentle walk through a lost-thing question.
No personal data needed, nothing leaves your machine, and photos are not required either: the photo_hint field just tells future-you what to snap (e.g. "silver coil left of the tape measure") so you can verify at a glance.
Related MCP server: inventory-mcp
Quick start
pip install -e .
export JUNK_DRAWER_DB=$PWD/data/drawer.json # optional, this is the default spot
junk-drawer-server # talks MCP over stdioOr run as a module: python -m junk_drawer.server.
Point your MCP client at it
{
"mcpServers": {
"junk-drawer": {
"command": "junk-drawer-server",
"env": { "JUNK_DRAWER_DB": "/home/you/junkdrawer/drawer.json" }
}
}
}Storage
Default: plain JSON at
data/drawer.json(override withJUNK_DRAWER_DB).SQLite: give
JUNK_DRAWER_DBa path ending in.db,.sqliteor.sqlite3and the server uses a single-table SQLite file instead. Same tools, same behaviour.
Both files are the entire state of the system: copy one and you have a backup.
Examples
add_item "HDMI to mini HDMI adapter" kind=adapter room="office" \
container="tin, second drawer down" tags="hdmi, video" \
photo_hint="coiled grey cable left of the tape measure"
search "do we have an HDMI adapter"
list_by_room "office"
mark_moved "hdmi-to-mini-hdmi-adapter" new_room="lounge" \
new_container="TV cabinet, cable pouch" note="wiring the new telly"Development
pip install -e .
pip install pytest
python -m pytest # 60+ tests, all localLicense
MIT - Copyright (c) 2026 Asdale Dynamics, LLC. See LICENSE.
Available Tools
9 toolsadd_itemB
Catalogue one small thing before it vanishes.
name: what you'd call it, e.g. 'HDMI to mini HDMI adapter'. kind: cable, adapter, battery, craft, key, hardware, office, medical, media or other. room: where it lives, e.g. 'office', 'kitchen junk drawer'. container: the finer spot, e.g. 'labelled tin, second drawer'. tags: comma-separated, e.g. 'hdmi, video, tv mount'. photo_hint: what a photo of its spot would show, e.g. 'silver coil left of the tape measure'.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes | ||
| room | Yes | ||
| tags | No | ||
| container | No | ||
| photo_hint | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
list_by_roomB
List items in one room, or with no room, show every room count.
| Name | Required | Description | Default |
|---|---|---|---|
| room | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
list_kindsC
The kinds of small things this drawer tracks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
mark_movedB
Record that an item moved (new drawer, newbox, new shelf, new box).
item: name or ID of the item, e.g. 'hdmi-to-mini-hdmi-adapter'. new_room: the room it lives in now; keep the same room with a different new_container if it only changed containers. note: optional 'why', e.g. 'rerouted to the TV drawer'.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| note | No | ||
| new_room | Yes | ||
| new_container | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
move_historyB
Every recorded hop for one item, oldest first.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
remove_itemB
Take an item out of the drawer record: used up, given away, binned.
reason: what happened, e.g. 'battery dead', 'key given to house-sitter'. gone_to: optional place it went, e.g. 'sister's apartment'.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| reason | No | ||
| gone_to | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
searchC
Ask the drawer a question the way you'd ask a person.
e.g. 'do we have an HDMI adapter', 'spare house key', 'AA batteries'. Just list the words you remember; short is fine.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
summaryB
A calm overview: counts by kind, busiest rooms, recent moves.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
where_isC
The full story on one item: exact spot, picture hint, moves.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
add_item - First observed
list_by_room - First observed
list_kinds - First observed
mark_moved - First observed
move_history - First observed
remove_item - First observed
search - First observed
summary - First observed
where_is
TDQS
Scored across 9 tools
Most tools target distinct intents: fuzzy lookup (search), detail retrieval (where_is), browsing (list_by_room), mutation (mark_moved, remove_item, add_item), and history (move_history). The one soft overlap is where_is, which promises 'moves' in its answer, versus move_history which returns the full hop log — an agent may hesitate between them. search vs list_by_room also brush against each other but the descriptions make the fuzzy-vs-enumerated distinction clear.
All names are snake_case, but the verb_noun convention is only partially followed: add_item, remove_item, list_kinds, list_by_room, mark_moved are clean, while search and summary are bare nouns and where_is / move_history break the verb_noun pattern. Readable overall, but not a predictable schema an agent can pattern-match on.
Nine tools is well within a healthy range and each covers a distinct slice of the household-catalogue lifecycle (capture, find, browse, relocate, remove, report). Nothing feels padded or missing at the count level.
The surface covers capture (add_item), retrieval (search, where_is, list_by_room), location mutation (mark_moved), history (move_history), deletion (remove_item), and reporting (summary, list_kinds) — a full lifecycle for the stated domain. The notable gap is editing item metadata (typo in name, corrected tags or photo_hint); the only workaround is remove_item plus re-add, which destroys move history.
Maintenance
Related MCP Connectors
Home inventory: find, add and move things across every home, room and labelled box.
Search and organize your personal inventory: warehouses, boxes, items and photos. Undo any change.
Find, add, move and count what you keep in boxes, rooms and lists in Hoardo.
Look up and add the things you own: items, prices, receipts, warranties, serial numbers and totals.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables cataloging and managing personal inventory (items, attachments) through natural language, allowing users to add, search, update, and retrieve item details and attachments via MCP tools.1MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Inventory (whereiput.it) that enables searching, full CRUD operations on items/locations/areas, and AI-powered photo recognition flow from MCP-compatible clients.-
- FlicenseNot gradedqualityBmaintenanceEnables creating and managing collections of items by adding entries, checking them off, and deleting them through MCP tools.-
- AlicenseNot gradedqualityCmaintenanceLets AI apps search and manage a home inventory of numbered boxes, rooms and lists, so users can find where an item is stored, add or move items and boxes between rooms, and work through packing, lending, rental and stocktake lists from chat. Changes made through the connected app apply to the user's account immediately.CC BY-4.0