Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,541Letters: 14Defects: 1,323counted 2 min ago
teppi

Server definition

Hash
sha256:1d9ef6a6faab528f3beab34f232efb8dcd33753ad26f7e038c6878949e7c1333
What it is
What a remote MCP server returned when asked what it offers: 6 tools

The blob, as servednamed by its sha256

{ "instructions": "Computer-vision arithmetic over MCP. Free: image_probe, bbox_convert, resize_plan, colour_check. Premium (license): detection_metrics, nms. Pure arithmetic and header parsing - no model, no image library, no API key, no account.", "tools": [ { "description": "Convert bounding boxes between COCO, Pascal VOC and YOLO. FREE.\n\nThe three formats disagree on everything: COCO is [x, y, width, height],\nVOC is [x1, y1, x2, y2], YOLO is [cx, cy, w, h] normalised to the image.\nGetting this wrong produces boxes that look plausible and quietly ruin\nevery metric. Typical input {\"boxes\": [[10, 20, 100, 50]], \"from_format\":\n\"coco\", \"to_format\": \"yolo\", \"image_width\": 640, \"image_height\": 480}\nreturns {\"boxes\": [[0.0938, 0.0938, 0.1562, 0.1042]], \"converted\": 1,\n\"rejected\": []}.\n\nUse whenever a dataset and a model disagree about format. Not for scoring\npredictions (detection_metrics) and not for removing overlaps (nms). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"boxes must contain at least one box\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.", "inputSchema": { "additionalProperties": false, "properties": { "boxes": { "description": "Boxes to convert, each a list of exactly four numbers in\nfrom_format, e.g. [[10, 20, 100, 50]].", "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, "clip": { "default": false, "description": "When true, clamp boxes to the image bounds instead of returning\nthem as they are. Off by default, because a box outside the image\nis usually a bug worth seeing.", "type": "boolean" }, "from_format": { "description": "\"coco\" for [x, y, w, h], \"voc\" for [x1, y1, x2, y2], or\n\"yolo\" for normalised [cx, cy, w, h].", "enum": [ "coco", "voc", "yolo" ], "type": "string" }, "image_height": { "default": 0, "description": "Pixel height, required whenever yolo is on either side.", "minimum": 0, "type": "integer" }, "image_width": { "default": 0, "description": "Pixel width, required whenever yolo is on either side.", "minimum": 0, "type": "integer" }, "to_format": { "description": "The format to convert to; same three choices.", "enum": [ "coco", "voc", "yolo" ], "type": "string" } }, "required": [ "boxes", "from_format", "to_format" ], "type": "object" }, "name": "bbox_convert", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Check a colour pair against the WCAG contrast thresholds. FREE.\n\nUses the WCAG 2 relative-luminance formula, so the number matches what an\naccessibility audit will report. Typical input {\"foreground\": \"#767676\",\n\"background\": \"#ffffff\"} returns {\"contrast_ratio\": 4.54, \"AA\": true,\n\"AAA\": false, \"required\": {\"AA\": 4.5, \"AAA\": 7.0}, \"verdict\": \"Passes AA\nfor normal text, fails AAA.\"}.\n\nUse when generating or auditing an interface. Not for converting colours\nbetween spaces and not for palettes. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"foreground must be a hex colour like #767676\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.", "inputSchema": { "additionalProperties": false, "properties": { "background": { "description": "Background colour in the same notation.", "type": "string" }, "foreground": { "description": "Text colour as hex, e.g. \"#767676\" or \"767676\" or \"#777\".", "type": "string" }, "large_text": { "default": false, "description": "True for text at least 18pt, or 14pt bold, which WCAG\nallows to pass at a lower ratio. Default false.", "type": "boolean" } }, "required": [ "foreground", "background" ], "type": "object" }, "name": "colour_check", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Score detections against ground truth and show the working. PREMIUM (license).\n\nGreedy matching at the IoU threshold, highest-confidence prediction first,\neach ground-truth box matched at most once - the standard protocol.\nReports per-class precision, recall and F1, and average precision by the\nall-points interpolation used by Pascal VOC 2010 onward. Typical input\n{\"predictions\": [{\"box\": [0,0,10,10], \"label\": \"cat\", \"score\": 0.9}],\n\"ground_truth\": [{\"box\": [1,1,11,11], \"label\": \"cat\"}]} returns\n{\"overall\": {\"tp\": 1, \"fp\": 0, \"fn\": 0, \"precision\": 1.0, \"recall\": 1.0,\n\"f1\": 1.0}, \"per_class\": {...}, \"mAP\": 1.0}.\n\nUse to compare two models on the same held-out set. Not for cleaning up a\nsingle model's overlapping output first - run nms before this. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"ground_truth must contain at least one box\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.", "inputSchema": { "additionalProperties": false, "properties": { "box_format": { "default": "voc", "description": "\"voc\", \"coco\" or \"yolo\". Default \"voc\".", "enum": [ "coco", "voc", "yolo" ], "type": "string" }, "ground_truth": { "description": "True boxes, each {\"box\": [...], \"label\": ...}.", "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "image_height": { "default": 0, "description": "Pixel height; required for yolo boxes.", "minimum": 0, "type": "integer" }, "image_width": { "default": 0, "description": "Pixel width; required for yolo boxes.", "minimum": 0, "type": "integer" }, "iou_threshold": { "default": 0.5, "description": "Overlap at which a prediction counts as a match.\nDefault 0.5, the usual reporting threshold.", "exclusiveMinimum": 0, "maximum": 1, "type": "number" }, "predictions": { "description": "Predicted boxes, each {\"box\": [...], \"label\": ...,\n\"score\": ...}. Score defaults to 1.0 when omitted.", "items": { "additionalProperties": true, "type": "object" }, "type": "array" } }, "required": [ "predictions", "ground_truth" ], "type": "object" }, "name": "detection_metrics", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Read an image's format and pixel size from its header alone. FREE.\n\nDimensions live in the first few dozen bytes of PNG, JPEG, GIF, BMP and\nWebP, so a base64 prefix is enough - you do not need to send the whole\nfile, and nothing is decoded. Typical input {\"data_base64\": \"iVBORw0KG...\"}\nreturns {\"format\": \"png\", \"width\": 1920, \"height\": 1080, \"aspect_ratio\":\n1.7778, \"aspect_label\": \"16:9\", \"megapixels\": 2.07, \"orientation\":\n\"landscape\", \"bytes_inspected\": 512}.\n\nUse to find out what you are dealing with before planning a resize. Not for\npixel content - nothing here reads pixels - and not for EXIF. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"data_base64 must not be empty\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.", "inputSchema": { "additionalProperties": false, "properties": { "data_base64": { "description": "The image file, base64-encoded. The first few hundred\nbytes are enough for every supported format; send a prefix rather\nthan a large file. Data-URL prefixes like \"data:image/png;base64,\"\nare accepted and stripped.", "type": "string" } }, "required": [ "data_base64" ], "type": "object" }, "name": "image_probe", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Remove duplicate detections of the same object. PREMIUM (license).\n\nGreedy non-maximum suppression: keep the highest-scoring box, drop\neverything overlapping it above the threshold, repeat. Ties break on the\nearlier index, so the result is deterministic rather than dependent on sort\nstability. Typical input {\"boxes\": [[0,0,10,10],[1,1,11,11],[50,50,60,60]],\n\"scores\": [0.9, 0.8, 0.7]} returns {\"keep\": [0, 2], \"suppressed\": [{\"index\":\n1, \"by\": 0, \"iou\": 0.6807}], \"kept\": 2}.\n\nUse after a detector that emits overlapping boxes. Not for scoring against\nground truth (detection_metrics) and not for format changes (bbox_convert). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"boxes and scores must be the same length\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.", "inputSchema": { "additionalProperties": false, "properties": { "box_format": { "default": "voc", "description": "\"voc\", \"coco\" or \"yolo\". Default \"voc\".", "enum": [ "coco", "voc", "yolo" ], "type": "string" }, "boxes": { "description": "Candidate boxes in box_format, e.g. [[0, 0, 10, 10]].", "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, "image_height": { "default": 0, "description": "Pixel height; required for yolo boxes.", "minimum": 0, "type": "integer" }, "image_width": { "default": 0, "description": "Pixel width; required for yolo boxes.", "minimum": 0, "type": "integer" }, "iou_threshold": { "default": 0.5, "description": "Overlap above which the lower-scoring box is dropped.\nDefault 0.5.", "exclusiveMinimum": 0, "maximum": 1, "type": "number" }, "scores": { "description": "One confidence per box, same order and same length as boxes.", "items": { "type": "number" }, "type": "array" } }, "required": [ "boxes", "scores" ], "type": "object" }, "name": "nms", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Work out the exact scale, padding and crop for a model input size. FREE.\n\nReturns the numbers you need to transform boxes alongside the image, which\nis the step that usually gets skipped. Typical input {\"width\": 1920,\n\"height\": 1080, \"target\": \"yolo_640\"} returns {\"scale\": 0.3333,\n\"resized\": [640, 360], \"pad\": {\"left\": 0, \"top\": 140, \"right\": 0,\n\"bottom\": 140}, \"box_transform\": \"x_new = x * 0.3333 + 0; y_new = y *\n0.3333 + 140\"}.\n\nUse before feeding an image to a fixed-input model. Not for finding out the\nimage's size in the first place - that is image_probe. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown target <value>; use one of <value> or set\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.", "inputSchema": { "additionalProperties": false, "properties": { "height": { "description": "Source image height in pixels.", "exclusiveMinimum": 0, "type": "integer" }, "mode": { "default": "letterbox", "description": "\"letterbox\" scales to fit and pads the remainder, preserving\naspect; \"cover\" scales to fill and crops the overflow; \"stretch\"\ndistorts to fit exactly. Default \"letterbox\".", "enum": [ "letterbox", "cover", "stretch" ], "type": "string" }, "target": { "default": "yolo_640", "description": "A named preset: \"clip_224\", \"vit_384\", \"yolo_640\", \"sam_1024\",\n\"sd_512\", \"sd_768\" or \"detr_800\". Ignored when target_size is set.", "type": "string" }, "target_size": { "default": 0, "description": "A square side length in pixels, overriding target. Use\nthis for a size the presets do not cover.", "minimum": 0, "type": "integer" }, "width": { "description": "Source image width in pixels.", "exclusiveMinimum": 0, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "name": "resize_plan", "outputSchema": { "additionalProperties": true, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:1d9ef6a6faab528f3beab34f232efb8dcd33753ad26f7e038c6878949e7c1333 | sha256sum