closetscan
The server is a local MCP wardrobe server that lets an AI assistant query and update a clothing catalogue generated by ClosetScan.
List garments with filters for colour, season, category, and other catalogue attributes, plus pagination via limit/offset.
Get the full record for a specific garment, including all attributes, views, provenance, and file paths.
Free-text search garments by name, descriptions, and attributes, returning best matches first.
Search narration for what the wearer said while filming, restricted by field such as material, provenance, sentiment, summary, or quotes.
Record that a garment was worn, with an optional date and note, by appending to the wear log.
Read wear history: individual entries, per-garment totals, first/last worn dates, never-worn items, and cost-per-wear when cost data exists.
Discover which attributes and values the catalogue actually contains, so you can filter accurately.
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., "@closetscansearch my catalogue for a black wool coat"
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.
ClosetScan
Turn a closet walkthrough video into a wardrobe your AI assistant can use: source frames, AI-generated front/back flat-lays, attributes, and optional narration, handed to any MCP client by a local server and the included wardrobe skill. Ask what goes with the navy jacket, what you said about it while you were filming, or what you have not worn since spring — against your own clothes, catalogued from one video, on your own machine.
By Will Gao. A mention is appreciated, but not required. MIT licensed; retain the copyright and license notice as required by MIT.

See it first
Open the live demo — one 5-minute-49-second phone recording beside the 34-garment catalogue built from it. Nothing to install, no API key, no clone.
The demo is not part of this repository, so cloning stays small. To run it
offline, download closetscan-demo.zip from the
latest release,
unzip it, and open index.html. Keep the folder together; the page loads its
images from catalogue/.
That catalogue was generated from the included recording using DINOv2 and the paid AI stages; reruns can produce different results. It contains 34 garments with 68 generated front/back images. Images marked as plates are generated reconstructions; source frames remain available for comparison.
Related MCP server: Archive MCP Server
Your closet, in your assistant
One MCP server and one skill, both local. Point the server at a catalogue — one you build with the pipeline below, or the published demo's, which needs no pipeline run at all — and your assistant can answer from your own clothes:
What goes with the grey wool trousers?
What did I say about the jacket I bought in Kyoto?
What have I not worn since March?
Answers are only as good as the catalogue behind them; see Limits.
The MCP server uses only Python's standard library. It opens no sockets and makes
no outbound requests. Install with python -m pip install -e ., or run from a
clone without installation, pointing it at any catalogue directory:
python -m closetscan.mcp_server outTo query the published demo, unzip closetscan-demo.zip and point the server at
its catalogue directory.
This waits for newline-delimited JSON-RPC on stdin; it is not an interactive CLI.
Use mcp/config.example.json in your MCP client's server
configuration, replacing both absolute paths. Install the package into the Python
environment named by command. Copy skills/wardrobe into your
agent's skill directory. The skill uses the seven tools exposed by this server:
list_attributes,list_garments,get_garmentsearch_garments,search_narrationlog_wear,get_wear_history
The server supports MCP protocol 2024-11-05 over stdio and advertises that version
at initialization; clients must support it. See the MCP transport specification.
Catalogue location: positional argument, then CLOSETSCAN_CATALOGUE, then ./out.
Only log_wear writes, appending wear_log.jsonl. Back it up with its catalogue:
garment IDs can change when grouping is rerun. Search is lexical, not semantic.
log_wear requires a nonempty garment ID; invalid IDs never create or append
to the log. Corrupt or unreadable catalogue JSON raises an error. When
dedup.json is absent, the source-only candidate preview ignores existing
attributes, narration, and generated images because their grouping IDs
cannot safely be matched to candidate rows.
Image paths require local file access in the client. No pipeline tool is exposed.
One notebook: Colab or local Jupyter
Open closetscan_colab.ipynb in Colab.
The notebook installs the package and processes the demo video or one you
upload. The same notebook also runs in local Jupyter: open it from a clone, or
set PROJECT_DIR in its options cell. For a local custom video, set
USE_DEMO=False and VIDEO_PATH. Python 3.10+ and FFmpeg/ffprobe on PATH are
required locally.
With USE_DEMO=True the notebook downloads the demo walkthrough from the
release assets on first use and caches it in the workspace.
Extraction defaults to a local histogram method; choose DINOv2 for learned embeddings. Enable the optional paid stages and supply OpenRouter model IDs to create the complete catalogue. Every command stops on failure.
Video lives in the Colab runtime. Paid stages send images and optionally transcript text to OpenRouter and its providers. Whisper transcribes within the runtime on CPU. Costs and model availability vary; there is no fixed-cost promise.
The histogram default tests execution, not recognition quality. The notebook checks its manifest, images, HTML, MCP query, and ZIP before export. Local Jupyter prints the archive path; Colab downloads it.
Recording a walkthrough
Talk through the closet while you film it. Speech is not a bonus track; it is the pipeline's strongest segmentation signal. The background of a closet is constant — same wall, same rail — so frame-to-frame visual change follows your hands more than it follows which garment you are holding, while the pauses between utterances land almost exactly on the handoffs. A silent recording still processes, but neighbouring garments merge into one.
Say a few words about each item. Anything works: the timing carries the segmentation, and the words themselves become searchable narration.
Pause between items, and hold each garment still while you talk about it.
Show both sides; front and back are catalogued separately.
Keep the microphone live, and keep the audio track when trimming or re-encoding a clip before processing.
python -m closetscan.run uses that audio by default and warns when it finds no
narration boundaries; --no-audio segments on visual change alone. Transcribing
what was said — what a fabric is, where an item came from — is the separate
optional closetscan.narration stage below.
Local pipeline
Python 3.10+ and FFmpeg/ffprobe on PATH are required for video processing. From a clone of this repository:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[pipeline,vision,narration]'
python -m closetscan.run path/to/walkthrough.mp4 --out out --embedder dinov2 --htmlTo use the same recording as the published demo, take phone-walkthrough.mp4
from closetscan-demo.zip in the
latest release.
For extraction without model downloads, install .[pipeline] and use
--embedder hist. For a complete catalogue, set OPENROUTER_API_KEY,
VISION_MODEL (vision input + text output) and IMAGE_MODEL (image input +
text/image output) in your shell, then run:
python -m closetscan.dedup out --include-views --model "$VISION_MODEL"
python -m closetscan.product_shots out --model "$IMAGE_MODEL"
python -m closetscan.attributes out --model "$VISION_MODEL"
python -m closetscan.narration out --clip path/to/walkthrough.mp4 --model "$VISION_MODEL"
python -m closetscan.html_export outNarration is optional and currently processes one clip per invocation; use one
walkthrough for the complete workflow. Individual stages can be rerun; retain
previous outputs before replacing them. Local key-file fallback is
~/.config/openrouter/key. Do not commit credentials or private catalogues.
The CLI retains the original experiment's model defaults; pass explicit model IDs
available to your account. See OpenRouter multimodal documentation.
Limits and contributions
Capture can miss garments, and a silent or poorly narrated recording misses more of them; see Recording a walkthrough. Generated images and attributes can invent details. Narration can be mistranscribed or attached to the wrong item. Missing catalogue entries do not establish ownership, and missing wear logs do not mean clothes were never worn.
Bug reports and pull requests are welcome. Include Python version, command,
and a small reproducible example; remove keys and personal data first.
Run python -m unittest discover -s tests -v before submitting code changes.
For the full suite install .[pipeline]; without it four tests skip. Tests read
the small catalogue in tests/fixtures, not the published demo,
so they run on a fresh clone. CI runs the same checks on Python 3.10 and 3.12.
MIT license covers the project and the published demo to the extent the author holds rights. Dependency and model licenses remain their own; visible brand marks in the demo do not imply endorsement or grant trademark rights.
Available Tools
7 toolsget_garmentA
Full record for one garment: all attributes, every view with its provenance, and file paths.
| Name | Required | Description | Default |
|---|---|---|---|
| garment_id | Yes | e.g. g003 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does explain what data is included, but it does not explicitly state that this is a read-only operation or describe behavior for a non-existent garment ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the core purpose ('Full record for one garment') and then lists the key inclusions. There is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID fetch with no output schema, the description adequately communicates what the caller should expect: attributes, views with provenance, and file paths. It could be more complete by noting the response format or error handling, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the only parameter, garment_id, is documented with an example. The description adds no additional parameter guidance, which is acceptable given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (one garment) and the scope of what is returned (all attributes, every view with provenance, and file paths). It distinguishes itself from list/search siblings by emphasizing a single full record, though it lacks an explicit verb like 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one garment' implies this is the tool to use when a specific garment ID is already known and complete details are needed. However, it does not explicitly state when to prefer this over list_garments or search_garments, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wear_historyA
Read the wear log: individual entries plus per-garment totals, first/last worn, never-worn items, and cost-per-wear where a cost attribute exists.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | YYYY-MM-DD | |
| until | No | YYYY-MM-DD | |
| garment_id | No | omit for the whole wardrobe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It clearly states 'Read', indicating a read-only operation. It also adds conditionality ('where a cost attribute exists'), which warns the agent that cost-per-wear is not always returned. It does not mention potential edge cases like empty results or default date ranges, but for a read tool the core effect is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one clear sentence that front-loads the core purpose ('Read the wear log'). The list of output items makes it longer, but every phrase adds relevant information, and there is no wordiness or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the agent cannot verify the response shape from structured data, and the description does not describe the exact structure. It says what is returned but not in what form (e.g., array vs. nested object), nor does it clarify what happens with the date range or garment_id filters. It is adequate but not fully self-reliant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the three parameters with 100% coverage, so the baseline is 3. The description adds little beyond the schema: it does not explain how since/until/garment_id interact or affect the return, so it does not meaningfully enrich parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with the specific verb 'Read' and identifies the resource 'the wear log'. It then enumerates the distinct outputs it returns (individual entries, per-garment totals, first/last worn, never-worn items, cost-per-wear), which makes it easy to distinguish from get_garment (garment details) and log_wear (writing a wear entry).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for reading wear history, but it does not explicitly state when to choose this tool over siblings like log_wear or search_garments. It names no exclusions or 'when-not-to-use' conditions, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attributesA
Which attributes this catalogue actually carries and what values they take. Call this before guessing filter values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden of behavioral disclosure. It conveys that the tool is an introspective lookup and implies a read-only nature, but it does not explicitly state that it has no side effects or describe pagination/size behavior. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences carry both purpose and usage guidance with no filler. The directive 'Call this before guessing filter values' earns its place by making the use case actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is nearly complete: it says what the tool returns at a conceptual level and when to call it. A slight gap is the lack of any indication of the exact response shape, but the description's conceptual framing is sufficient for a metadata listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so parameter documentation is irrelevant; the baseline for this dimension is 4. The description adds context by linking the output to filter values, which is all an agent needs here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('attributes this catalogue actually carries') and the operation (reporting what values they take), which clearly distinguishes it from sibling tools like list_garments and search_garments. It goes beyond the tool name by adding the crucial 'actually carries' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this before guessing filter values' is an explicit when-to-use directive that tells the agent to invoke this tool before constructing filters. It does not explicitly name sibling alternatives or state when not to use it, but the use case is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_garmentsA
List garments in the wardrobe, optionally filtered. Returns compact records; use get_garment for full detail. Paginated via limit/offset.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| colour | No | e.g. navy, cream | |
| offset | No | ||
| season | No | spring, summer, autumn, winter, all-season | |
| category | No | e.g. top, bottom, outerwear, knitwear | |
| attributes | No | Any other attribute present in this catalogue, as key/value. See list_attributes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does a good job by revealing that records are compact (not full details) and that the result set is paginated via limit/offset. It does not mention other behavioral aspects like ordering or error handling, but for a read-only list operation these are less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: the first states the core action, the second differentiates from get_garmenteb, and the third explains pagination. No redundant or vague content, and the most important purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects for using the tool: what it lists, that it is filterable, that the response is compact, and how pagination works. The schema fills in parameter details scrape. The only noticeable gap is not explaining when to prefer search_garments over this tool, and the output schema is absent so the exact shape of 'compact records' is unspecified, but the pointer to get_garment mitigates this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes four parameters (colour, season, category, attributes) with examples, but limit and offset lack descriptions. The description compensates by explicitly identifying limit/offset as pagination controls, and it also confirms that filtering is optional without repeating the schema details. This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('garments in the wardrobe') and notes optional filtering. It explicitly distinguishes itself from get_garment by stating that list_garments returns compact records, which allows an agent to select the correct tool immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to 'use get_garment for full detail', giving a clear when-not-to-use condition. However, it does not address the search_garments sibling, which could be an alternative for more complex queries, leaving some ambiguity about when to choose this over search_garments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_wearA
Record that a garment was worn. Appends to the wear log; never modifies the catalogue. Date defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD | |
| note | No | ||
| garment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it states the operation is append-only ('Appends to the wear log'), limits side effects ('never modifies the catalogue'), and exposes the date default behavior. It does not mention return values or permission requirements, but the core mutation behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler. The primary action, side-effect constraint, and date default are each given their own sentence and are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter append tool, the core facts are covered: what action is performed, that it does not touch the catalogue, and the optional date behavior. The main gap is lack of any hint about the note parameter or the returned result, but neither is critical for a minimal correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (33%), and the description compensates only partially. 'Date defaults to today' adds real meaning beyond the schema, and 'Record that a garment was worn' contextualizes garment_id, but the note parameter receives no semantic guidance. This is adequate but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and object—'Record that a garment was worn'—and clarifies the target is the wear log, not the catalogue. This clearly differentiates it from siblings like get_wear_history and list_garments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes when to use it: any time a wear event should be appended, with date defaulting to today. It does not explicitly name alternatives or exclusions, but the 'never modifies the catalogue' contrast provides useful context for choosing it over catalogue operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_garmentsB
Free-text search over names, descriptions and attributes. Returns compact records, best match first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It mentions 'returns compact records, best match first', which gives some insight into return format and ordering. However, it does not disclose any side effects (likely read-only) or pagination details. A search operation is typically safe, but without annotations, more explicit confirmation would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose in the first clause. It wastes no words and gets straight to the point, though it is slightly sparse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's relative simplicity (2 parameters, no nested objects, no output schema), the description is nearly adequate. However, it lacks any note on limit behavior or match criteria. With no annotations or output schema, the description could be improved by adding a note on result order and limit usage. It is functional but leaves room for agent uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It only correlates to the 'query' parameter by saying 'free-text search over names, descriptions, and attributes', but it does not explain the 'limit' parameter's meaning or that it controls result count. The default value of 20 is in the schema, but the description adds little clarity for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (free-text search) and the resource (garments), specifying that it searches over names, descriptions, and attributes. It distinguishes from siblings like list_garments and get_garment by focusing on free-text search and compact records, though it could be more explicit about how it differs from search_narration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (for free-text search across fields) but provides no explicit guidance on when not to use it or alternatives. It does not mention that list_garments might be better for browsing or get_garment for retrieving a specific record, but the sibling names give context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_narrationA
Search what the wearer said about their clothes while filming — materials, where things came from, and how they feel about them. Use this for questions about history, feelings or origin; use search_garments for questions about appearance.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | restrict the search (default any) | |
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It is clearly a search/read operation (no mutation hinted), and it explains the type of data accessed (narration from filming) and the filter dimensions (field enum values). However, it does not explicitly state that the operation is side-effect-free, nor does it mention any rate limits, authentication requirements, or error behavior. Since it's a search, the lack of explicit read-only statement is a moderate gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary purpose and scope are front-loaded, and the usage guidance is delivered in a compound sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a clear picture of what the tool searches and when to use it vs. the sibling. However, with no output schema, the description does not explain the return value structure (e.g., it likely returns a list of narration snippets or matching records). The agent is left to infer the output format, which is a notable gap for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate. It does explain the meaning of the search query ('materials, where things came from, how they feel') and maps to the field enum values (material, provenance, sentiment), adding semantics beyond the schema's brief field description. However, it does not address the 'limit' parameter or elaborate on the 'query' format, leaving those parameters under-documented at a time when schema coverage is low.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Search') and resource ('what the wearer said about their clothes while filming'), and immediately distinguishes it from the sibling search_garments by noting the alternative for appearance-related questions. It names the content domains (materials, provenance, sentiment), so the agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when-to-use guidance ('questions about history, feelings or origin') and names the alternative tool (search_garments) for appearance questions. This gives the agent a clear decision rule without needing to inspect sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
get_garment - First observed
get_wear_history - First observed
list_attributes - First observed
list_garments - First observed
log_wear - First observed
search_garments - First observed
search_narration
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: listing, fetching, searching garments, searching narration, logging wear, reading wear history, and listing attributes. The only similar pair, search_garments and search_narration, is explicitly differentiated by content domain and intended use.
All tool names follow a consistent snake_case verb_noun pattern: list_garments, get_garment, search_garments, search_narration, log_wear, get_wear_history, list_attributes. There are no mixed conventions or vague verbs.
Seven tools is a well-scoped set for a wardrobe scanning and wear-tracking server. Each tool covers a distinct operation without redundancy or bloat.
The surface covers the full apparent workflow: discover available attributes, list/filter/search garments, get full details, search narration, log a wear event, and read aggregated wear history. Catalogue mutation is explicitly out of scope, so its absence is not a gap.
Maintenance
Related MCP Connectors
Search, read, and edit your Halite recipe collection and shopping lists.
Add items to your tidee workspace from ordinary language, read what is there, and mark things done.
Read-only game, setup, place, evidence and travel decision tools with explicit provenance.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables searching and fetching GOV.UK Design System guidance via locally-crawled SQLite FTS5 data, with tools like search, fetch, and version.-
- FlicenseNot gradedqualityCmaintenanceEnables querying enterprise records and retention policies from any MCP client over stdio, with read-only tools for searching records, fetching retention verdicts, identifying archival candidates, summarizing departments, forecasting retentions, and viewing audit history.-
- AlicenseNot gradedqualityBmaintenanceProvides LLM clients with market intelligence tools over stdio, including market snapshots, price history, sentiment scoring, evidence search, and research briefs, with saved-run resource access.AGPL 3.0
- FlicenseAqualityCmaintenanceEnables local, deterministic management and search of point-of-sale support data—branches, terminals, incidents, and incident history—with read-only queries and mutating tools over stdio using simulated SQLite data.11-