{"apiVersion":"v1","directorySlug":"meter-mcp-d17bac99f3","title":"meter — Photo measuring app","description":"Photo measuring app","pageUrl":"https://www.mcpbundles.com/skills/meter-mcp-d17bac99f3","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://meter.photo/api/mcp","hostedMcpUrl":null,"toolCount":4,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"photo.meter/meter-mcp-d17bac99f3","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"open_sizematters","description":"Open the sizematters whiteboard, optionally preloaded with a photo and pre-set calibration. Entry point of any measurement flow — see the server-level instructions for when to invoke it. `image` accepts a `data:image/...;base64,...` URI or an absolute URL the browser can fetch. Calibration is expressed as three vanishing-line axes: `calibU`/`calibV` (the two in-plane axes of the reference rectangle) and optionally `calibW` (perpendicular to the calibration plane, required for 3D). Each is an arr","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"calibU":{"anyOf":[{"type":"array","items":{"type":"object","required":["line"],"properties":{"line":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2}}},"minItems":2},{"type":"null"}]},"calibV":{"anyOf":[{"type":"array","items":{"type":"object","required":["line"],"properties":{"line":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2}}},"minItems":2},{"type":"null"}]},"calibW":{"anyOf":[{"type":"array","items":{"type":"object","required":["line"],"properties":{"line":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2}}},"minItems":2},{"type":"null"}]},"planes":{"type":"array","items":{"type":"object","required":["id","orientation","anchor"],"properties":{"id":{"type":"string"},"dims":{"type":"array","items":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"maxItems":2,"minItems":2},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"anchor":{"type":"object","required":["fx","fy"],"properties":{"fx":{"type":"number"},"fy":{"type":"number"},"riseFrac":{"type":"number"}}},"corners":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2},"minimized":{"type":"boolean"},"orientation":{"enum":["uv","vw","uw"],"type":"string"}}},"minItems":1},"filename":{"anyOf":[{"type":"string"},{"type":"null"}]},"segments":{"type":"array","items":{"type":"object","required":["points","planeIds"],"properties":{"length":{"type":"number"},"points":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2},"planeIds":{"type":"array","items":{"type":"string","minLength":1},"maxItems":2,"minItems":2}}}},"imageSize":{"anyOf":[{"type":"object","required":["w","h"],"properties":{"h":{"type":"number"},"w":{"type":"number"}}},{"type":"null"}]},"activePlaneId":{"type":"string"},"displayOriginPlaneId":{"type":"string"}}},"title":"Open sizematters","logicalName":"open_sizematters","displayName":"Open sizematters","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"patchState","description":"Update one or more fields of the currently open sizematters whiteboard (image, calibration axes, segments, title, planes). Accepts the same patch shape as `open_sizematters`. Patches are SHALLOW: passing `segments: [...]` REPLACES the segments array entirely. To add a segment additively, call `get_state` first, append to the array, then patch. Same applies to `calibU`/`calibV`/`calibW`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"calibU":{"anyOf":[{"type":"array","items":{"type":"object","required":["line"],"properties":{"line":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2}}},"minItems":2},{"type":"null"}]},"calibV":{"anyOf":[{"type":"array","items":{"type":"object","required":["line"],"properties":{"line":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2}}},"minItems":2},{"type":"null"}]},"calibW":{"anyOf":[{"type":"array","items":{"type":"object","required":["line"],"properties":{"line":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2}}},"minItems":2},{"type":"null"}]},"planes":{"type":"array","items":{"type":"object","required":["id","orientation","anchor"],"properties":{"id":{"type":"string"},"dims":{"type":"array","items":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"maxItems":2,"minItems":2},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"anchor":{"type":"object","required":["fx","fy"],"properties":{"fx":{"type":"number"},"fy":{"type":"number"},"riseFrac":{"type":"number"}}},"corners":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2},"minimized":{"type":"boolean"},"orientation":{"enum":["uv","vw","uw"],"type":"string"}}},"minItems":1},"filename":{"anyOf":[{"type":"string"},{"type":"null"}]},"segments":{"type":"array","items":{"type":"object","required":["points","planeIds"],"properties":{"length":{"type":"number"},"points":{"type":"array","items":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number"},"y":{"type":"number"}}},"maxItems":2,"minItems":2},"planeIds":{"type":"array","items":{"type":"string","minLength":1},"maxItems":2,"minItems":2}}}},"imageSize":{"anyOf":[{"type":"object","required":["w","h"],"properties":{"h":{"type":"number"},"w":{"type":"number"}}},{"type":"null"}]},"activePlaneId":{"type":"string"},"displayOriginPlaneId":{"type":"string"}}},"title":"Update sizematters state","logicalName":"patchState","displayName":"Update sizematters state","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"export","description":"Render the current whiteboard as a PNG and compute each segment's real-world length using the user's calibration. Result (PNG + per-segment measurements) is pushed back via the host's model-context channel — values are available on your next turn. Each measurement reports its `planeIds` and the resolved `orientations` of each endpoint's plane — a single-plane `uv` segment measures on the calibration plane (or the plane's `riseFrac` surface); a cross-plane one (different plane ids) spans, e.g., f","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Export sizematters whiteboard","logicalName":"export","displayName":"Export sizematters whiteboard","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_state","description":"Read the current state of the open sizematters whiteboard: image presence, calibration axes (`calibU`/`calibV`/`calibW` — pure geometry, no lengths), segments (any segment carrying a `length` is a scale reference — all planes contribute with equal weight), title, and planes. Read-only; takes no parameters. Call before `patchState` to compose additive updates without overwriting user edits, and before `export` to confirm the calibration is set. The iframe pushes the state back via the host's mode","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Read sizematters state","logicalName":"get_state","displayName":"Read sizematters state","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=meter-Photo-measuring-app&config=eyJ1cmwiOiAiaHR0cHM6Ly9tZXRlci5waG90by9hcGkvbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22meter-Photo-measuring-app%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmeter.photo%2Fapi%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22meter-Photo-measuring-app%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmeter.photo%2Fapi%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=meter+%E2%80%94+Photo+measuring+app&connectorUrl=https%3A%2F%2Fmeter.photo%2Fapi%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"meter-Photo-measuring-app\" --url \"https://meter.photo/api/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/meter-mcp-d17bac99f3","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/meter-mcp-d17bac99f3/tools/{tool}","mcpServerUrl":"https://meter.photo/api/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/meter-mcp-d17bac99f3?live=1"}