WORN Fit MCP
An MCP server that determines how a watch fits a wrist by comparing case and lug-to-lug dimensions against wrist circumference. It provides fit assessments, size suggestions, and generates to-scale drawings or try-on links using phone camera measurements.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://worn.club/mcpWhat you can do with it
- Determine if a specific watch fits a user's wrist size
- Suggest case diameters and lug-to-lug spans suitable for a wrist
- Generate a link to measure wrist size via phone camera
- Retrieve try-on results showing watches on the user's wrist
Source and maintenance
Protocol and capabilities
- Server
- worn-fit 2.0.0
- MCP protocol
- 2025-06-18
- Tools
- 4 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
4 advertised
fit_watch — Fit watches to a wrist
How one to three watches fit a wrist of a given size, checked against WORN's catalogue of 46,000 watches (case, thickness, lug width): how far each watch's lugs stop from the edges of the wrist, whether it wears bigger or smaller than its case, and how it sits under a shirt cuff. Returns the verdicts in words, a link to the watches drawn to scale on the wrist, and the drawing as a card where cards are shown. Names are matched as people say them; case_mm and lug_to_lug_mm, when known, make the answer exact.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"wrist_mm",
"watches"
],
"properties": {
"watches": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The watch's brand and model as the person would say them, e.g. 'Tudor Black Bay 58' or 'Omega Seamaster Diver 300M'. WORN looks it up in its catalogue of 46,000 watches"
},
"note": {
"type": "string",
"maxLength": 140,
"description": "One short line on why you suggest this watch, shown under it"
},
"shape": {
"enum": [
"round",
"square"
],
"type": "string",
"description": "Case shape, for the drawing"
},
"case_mm": {
"type": "number",
"maximum": 60,
"minimum": 20,
"description": "Case diameter in mm (width, for a square case), if you know it; it picks the right size where the model comes in several. Leave out and WORN uses its catalogue"
},
"thickness_mm": {
"type": "number",
"maximum": 30,
"minimum": 3,
"description": "Case thickness in mm, if you know it; WORN's catalogue fills it where it can"
},
"lug_to_lug_mm": {
"type": "number",
"maximum": 75,
"minimum": 20,
"description": "Lug-to-lug span in mm from the maker's specs, if you know it. WORN's catalogue does not hold it: left out, it is estimated at 1.2 times the case and said to be"
}
}
},
"maxItems": 3,
"minItems": 1
},
"wrist_mm": {
"type": "number",
"maximum": 260,
"minimum": 120,
"description": "Wrist circumference in mm, measured where a watch sits (17 cm is 170)"
}
}
}{
"title": "Fit watches to a wrist",
"readOnlyHint": true,
"openWorldHint": false
}suggest_sizes — Watch sizes for a wrist
The case diameters and lug-to-lug spans that fit a wrist of a given circumference, and why lug to lug matters more than the case.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"wrist_mm"
],
"properties": {
"wrist_mm": {
"type": "number",
"maximum": 260,
"minimum": 120,
"description": "Wrist circumference in mm, measured where a watch sits (17 cm is 170)"
}
}
}{
"title": "Watch sizes for a wrist",
"readOnlyHint": true,
"openWorldHint": false
}start_try_on — Measure the wrist and try watches on
For a person who does not know their wrist size, or wants to see watches on their own wrist. Makes a link, with a QR code for a computer, that opens on their phone: the back camera measures the wrist in a few seconds with no tape or coin, then draws each watch on a photo of their own wrist at true size, to switch between. Nothing of the picture leaves the phone; tapping Send shares only the size and the watch they liked, which get_try_on_result returns with the code. Up to three watches; the link works for an hour. A picture of each watch can come as a link in image_url (a cutout with a transparent background, or the maker's or a shop's product photo on a plain white or grey background, which WORN cuts out) or as an uploaded file in photos; WORN shows it on the wrist at true size in place of its drawing.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"watches"
],
"properties": {
"photos": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"watch": {
"type": "string",
"maxLength": 80,
"description": "The name of the watch in the picture, as given in watches; left out, the pictures go to the watches in order"
},
"file_id": {
"type": "string",
"description": "The file's id, as ChatGPT gives it"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"description": "The file's download URL, as ChatGPT gives it"
}
}
},
"maxItems": 3,
"description": "Pictures of the watches the person uploaded, straight on, to draw on their wrist in place of the drawing: a cutout, or the watch on a plain background, which WORN cuts out"
},
"watches": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The watch's brand and model as the person would say them, e.g. 'Tudor Black Bay 58' or 'Omega Seamaster Diver 300M'. WORN looks it up in its catalogue of 46,000 watches"
},
"note": {
"type": "string",
"maxLength": 140,
"description": "One short line on why you suggest this watch, shown under it"
},
"shape": {
"enum": [
"round",
"square"
],
"type": "string",
"description": "Case shape, for the drawing"
},
"case_mm": {
"type": "number",
"maximum": 60,
"minimum": 20,
"description": "Case diameter in mm (width, for a square case), if you know it; it picks the right size where the model comes in several. Leave out and WORN uses its catalogue"
},
"image_url": {
"type": "string",
"maxLength": 1000,
"description": "https link to the best picture you have of this exact watch, seen from the front, straight on, 12 o'clock up and the crown to the right (PNG, WebP or JPEG). Best is a cutout with a transparent background; a product photo on a plain white or grey background works too, as WORN cuts the watch out of it. WORN draws it on the person's own wrist at true size; a watch shot on a wrist, at an angle or on a busy background is drawn from its sizes instead"
},
"thickness_mm": {
"type": "number",
"maximum": 30,
"minimum": 3,
"description": "Case thickness in mm, if you know it; WORN's catalogue fills it where it can"
},
"image_case_px": {
"type": "number",
"description": "Width in pixels of the case in that picture, edge to edge without the crown (40 to 4000), if you know it; left out, WORN measures it from the watch's outline"
},
"lug_to_lug_mm": {
"type": "number",
"maximum": 75,
"minimum": 20,
"description": "Lug-to-lug span in mm from the maker's specs, if you know it. WORN's catalogue does not hold it: left out, it is estimated at 1.2 times the case and said to be"
}
}
},
"maxItems": 3,
"minItems": 1,
"description": "The watches to try on"
}
}
}{
"title": "Measure the wrist and try watches on",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_try_on_result — Get the measured wrist
The wrist size the person measured with their phone through a try-on link (start_try_on), the watch they liked best, and how each watch fits that wrist. Says when they have not sent it yet, or when the link has expired.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 12,
"minLength": 4,
"description": "The code start_try_on returned"
}
}
}{
"title": "Get the measured wrist",
"readOnlyHint": true,
"openWorldHint": false
}Prompts
Not advertised
Resources
1 advertised
WORN Fit card
Watches drawn to scale on a wrist, with how each fits
ui://worn/fit-card.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 985 ms
- 95th percentile latency
- 985 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 985 ms · metadata changed · 4 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http worn-fit-mcp https://worn.club/mcpCodex
codex mcp add worn-fit-mcp --url https://worn.club/mcpCursor
{
"mcpServers": {
"worn-fit-mcp": {
"url": "https://worn.club/mcp"
}
}
}Cline
{
"mcpServers": {
"worn-fit-mcp": {
"type": "streamableHttp",
"url": "https://worn.club/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"worn-fit-mcp": {
"type": "http",
"url": "https://worn.club/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http worn-fit-mcp https://worn.club/mcpClaude Desktop
{
"mcpServers": {
"worn-fit-mcp": {
"url": "https://worn.club/mcp"
}
}
}Windsurf
{
"mcpServers": {
"worn-fit-mcp": {
"serverUrl": "https://worn.club/mcp"
}
}
}Let your agent find its tools
Find servers like WORN Fit MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.