check.tattoo: tattoo size and placement guide

Tattoo size minimums, body-area comparison, line-spacing check and a pre-booking checklist.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
82%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,610Tokens (tool definitions)
~2.2 KBTypical response size
Moderate attention impact (1.26% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "check-tattoo": {
      "url": "https://mcp.check.tattoo/mcp"
    }
  }
}

Remote endpoints

https://mcp.check.tattoo/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢assess_tattoo_idea(design_type, size_cm, letter_height_mm, placement, style)

Use when the user describes a specific tattoo idea and asks whether it will hold up at a given size and body placement. Compares the design with published minimum sizes for its kind of design and returns the placement's fade, sun, friction, stretch and curvature estimates, style notes, things to look at and questions for the artist. Lettering is sized by capital letter height (letter_height_mm); everything else by the longest side (size_cm). It does not generate designs, look at images, or give medical advice.

Input Schema

{
  "type": "object",
  "properties": {
    "design_type": {
      "type": "string",
      "enum": [
        "block_capitals",
        "script_lettering",
        "eye",
        "bold_symbol_or_short_word",
        "fine_botanical",
        "moderate_detail",
        "realistic_face",
        "realism_japanese_or_dense_floral"
      ],
      "description": "Kind of design: block_capitals (capital letters), script_lettering, eye, bold_symbol_or_short_word (silhouette, simple symbol), fine_botanical (flower or plant with veins/stamens), moderate_detail (two line weights, simple shading), realistic_face, realism_japanese_or_dense_floral."
    },
    "size_cm": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 500,
      "description": "Longest side of the whole design in centimetres. Use for every design_type except block_capitals and script_lettering."
    },
    "letter_height_mm": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 500,
      "description": "Height of a capital letter in millimetres. Use for block_capitals and script_lettering."
    },
    "placement": {
      "type": "string",
      "enum": [
        "upper-arm",
        "forearm",
        "back",
        "shoulder",
        "leg",
        "hand",
        "neck",
        "chest",
        "ribs",
        "wrist"
      ],
      "description": "Body area, if the user has one in mind."
    },
    "style": {
      "type": "string",
      "enum": [
        "fine-line",
        "watercolor",
        "realism",
        "blackwork",
        "minimalist"
      ],
      "description": "Tattoo style, if the user has one in mind."
    }
  },
  "required": [
    "design_type"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "design_type": {
      "type": "string"
    },
    "size_check": {
      "type": "object"
    },
    "placement_profile": {
      "type": "object"
    },
    "style_notes": {
      "type": "object"
    },
    "things_to_look_at": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "touch_ups": {
      "type": "string"
    },
    "questions_for_the_artist": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "note": {
      "type": "string"
    }
  }
}
🟢check_line_spacing(line_width_mm, gap_mm, years)

Use when the user gives a line width and the gap between two lines or letters in millimetres and asks whether the gap will stay open as the tattoo ages. Applies the published rule of thumb that a line widens by about 0.1 mm per decade: returns the line width and gap after the given number of years (default 20), whether the gap meets the guides' 'at least as wide as the line' rule, and what the guide's worked example would do to it. Illustrative arithmetic, not a measurement.

Input Schema

{
  "type": "object",
  "properties": {
    "line_width_mm": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 10,
      "description": "Width of the line in millimetres, as drawn today (for example 0.3 fine line, 1.5 bold outline)."
    },
    "gap_mm": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 50,
      "description": "Width of the space between the two lines or letters, in millimetres."
    },
    "years": {
      "type": "number",
      "minimum": 1,
      "maximum": 60,
      "description": "Years to project. Defaults to 20."
    }
  },
  "required": [
    "line_width_mm",
    "gap_mm"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "today": {
      "type": "object"
    },
    "guide_gap_range_mm": {
      "type": "object"
    },
    "after": {
      "type": "object"
    },
    "years_until_gap_used_up": {
      "type": "number"
    },
    "worked_example": {
      "type": "object"
    },
    "status": {
      "type": "string"
    },
    "explanation": {
      "type": "string"
    },
    "assumptions": {
      "type": "object"
    },
    "source": {
      "type": "string"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "note": {
      "type": "string"
    }
  }
}
🟢get_tattoo_size_chart(size_cm)

Use when the user asks how big or how small a kind of tattoo can be, or what fits at a given size. Returns the smallest and better size for eight kinds of design (letters by height, other designs by longest side), real-world size comparisons and the small/medium/large ranges. Optional size_cm marks which designs meet their minimum at that size.

Input Schema

{
  "type": "object",
  "properties": {
    "size_cm": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 500,
      "description": "Optional size in centimetres to look up what fits."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "updated": {
      "type": "string"
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "scale": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "source": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  }
}
🟢compare_tattoo_placements(placements, sort_by)

Use when the user asks how body areas compare for pain, fading, sun, friction, stretch or curvature, or which areas hold ink longest. Returns the ten common areas (or the ones requested), ordered by fade by default. Estimates are coarse 0-100 comparisons, not measurements.

Input Schema

{
  "type": "object",
  "properties": {
    "placements": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "upper-arm",
          "forearm",
          "back",
          "shoulder",
          "leg",
          "hand",
          "neck",
          "chest",
          "ribs",
          "wrist"
        ]
      },
      "description": "Areas to compare. Omit for all ten."
    },
    "sort_by": {
      "type": "string",
      "enum": [
        "fade",
        "pain",
        "sun",
        "friction"
      ],
      "description": "Order, lowest first. Defaults to fade."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "sorted_by": {
      "type": "string"
    },
    "areas": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "source": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  }
}
🟢get_pre_booking_checklist

Use when the user asks how to decide whether they are ready to book a tattoo, what to ask an artist, or what red flags to watch for in a consultation. Returns a short ordered checklist, the one question to ask when an artist pushes back, how to judge healed work, and consultation red flags.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "steps": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "ask_the_artist": {
      "type": "string"
    },
    "red_flags": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools