TIA: Text in Image AccessibilityBeta

Documentation

MCP server

Let an AI assistant check images for you. TIA runs a remote MCP server with one tool, check_image_contrast, that returns the same report as the HTTP API.

Server

URL
https://tia.dohunkim.xyz/api/mcp
Transport
Streamable HTTP, stateless. POST only; replies are plain JSON (no event stream and no session ID).
Protocol versions
2025-11-25, 2025-06-18, and 2025-03-26
Sign-in
None. No API key.
Tools
check_image_contrast

Setup

Claude Code

Run this once in a terminal:

Claude Code command
claude mcp add --transport http tia https://tia.dohunkim.xyz/api/mcp

Then run /mcp in Claude Code to confirm that tia is connected.

Other MCP clients

Most clients that support remote servers take a JSON entry like this one. Key names differ between clients (some use servers instead of mcpServers, and some name the transport differently), so check your client’s docs for its exact format.

Generic MCP configuration
{
  "mcpServers": {
    "tia": {
      "type": "http",
      "url": "https://tia.dohunkim.xyz/api/mcp"
    }
  }
}

The tool: check_image_contrast

Checks the text in one image against WCAG contrast requirements.

ArgumentTypeDescription
image_urlstringAn https URL of a PNG, JPEG, or WebP image. TIA fetches it from its own server, so the image must be publicly reachable: localhost, private network addresses, and pages behind a sign-in will not work. Up to 12 MB. Use this for large images.
image_base64stringThe image bytes, base64-encoded. Use this for local files and screenshots up to about 3 MB: the hosting platform refuses a call over 4.5 MB, and base64 makes the image a third bigger.
levelstring"AA" or "AAA". Optional; defaults to "AA".

Send exactly one of image_url or image_base64.

Example arguments with a URL
{
  "image_url": "https://example.com/images/hero-banner.png",
  "level": "AA"
}
Example arguments with base64 data
{
  "image_base64": "iVBORw0KGgoAAAANSUhEUgAA...",
  "level": "AAA"
}

What it returns

The same JSON report as the HTTP API: the image size, the level, a summary, one entry per text region with its verdict and ratio, notes, and provenance. It comes back twice in the tool result, as text content and as structuredContent, so clients that read either one get the full report. Every field is described in the API response reference.

If the image cannot be checked (a bad URL, an unsupported file, an image that is too large, or the service is busy), the tool returns a result with isError set and a short plain message instead of a report.

Try it

Once the server is added, ask in plain words. For example:

  • “Check the hero image on my landing page for contrast.”
  • “Does the text in public/og-card.png meet WCAG AAA?”
  • “Check every banner in the marketing folder and list the ones with failing text.”

The assistant finds the image, calls check_image_contrast, and explains the result. Ask it to show the notes too: they say what the result does and does not cover.

Limits

  • One image per call: up to 12 MB by image_url, or about 3 MB by image_base64.
  • Desktop and command-line clients work. A web page on another site cannot call the server from the browser, because it does not allow cross-origin requests.
  • The same soft rate limit as the API applies, counted separately: about 20 calls per 60 seconds per IP address, best effort.
  • The first call after a quiet period can take up to a minute.
  • Results are an automated aid, not a certification. Read where TIA can be wrong, and what happens to your image.