Commonlands Optics: M12 Lens and C-Mount Lens Finder + Field-of-View Calculator
by commonlands.com · remote · no sign-in to list tools · v0.4.2 · published by com.commonlands
M12 lens and C-mount lens finder with image-sensor matching and field-of-view calculator.
21 tools: 1 can delete or cancel things, 1 do something that can't be undone, 3 change things and 16 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things3Claude Code: ask: see these tools
- Only reads16Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http optics https://mcp.commonlands.com/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "prepare_shopify_purchase_handoff" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "prepare_shopify_purchase_handoff" says "purchase": a word that usually means money moves, which cannot be taken back.
- Infoget_cart
The input schema at properties.cart_access_token.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.cart_access_token.description: "Owner credential returned by create_cart for this cart i..."
- Infoupdate_cart
The input schema at properties.cart_access_token.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.cart_access_token.description: "Owner credential returned by create_cart for this cart i..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
21 tools
Deletes or cancels 1Claude Code: deny
update_cartUpdate a Shopify-owned cart through the configured Cart/Storefront MCP endpoint.1 finding
Why it is in this group
- The name "update_cart" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Findings
- Info
The input schema at properties.cart_access_token.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.cart_access_token.description: "Owner credential returned by create_cart for this cart i..."
Description, as the server wrote it Update a Shopify-owned cart through the configured Cart/Storefront MCP endpoint. Owner-bound: requires the cart_access_token returned by create_cart, so only the session that created a cart can change it. With UCP endpoints, treat updates as full-state PUT semantics; with the confirmed standard Storefront MCP endpoint, Commonlands maps line_items to Shopify add_items, update_items to quantity changes, and remove_line_ids to explicit removals. Quantity 0 in update_items removes a line.
Annotations the server declares
- title: Update Shopify cart
- readOnlyHint: false
- idempotentHint: false
- openWorldHint: false
- destructiveHint: true
Can't be undone 1Claude Code: ask
prepare_shopify_purchase_handoffBuild a read-only Shopify-native purchase handoff seam for a selected lens without creating carts, checkout, orders, inventory mutations, or writes.1 finding
Why it is in this group
- The name "prepare_shopify_purchase_handoff" says "purchase": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "prepare_shopify_purchase_handoff" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "prepare_shopify_purchase_handoff" says "purchase": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it Build a read-only Shopify-native purchase handoff seam for a selected lens without creating carts, checkout, orders, inventory mutations, or writes. Preserve any computed FoV provenance from calculate_field_of_view/match_lens_to_sensor when carrying optical context into purchase handoff. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Prepare Shopify purchase handoff
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
Changes things 3Claude Code: ask
create_cartCreate a Shopify-owned cart for selected variant line items through the configured Shopify Cart/Storefront MCP endpoint.No findings
Why it is in this group
- The name "create_cart" says "create": a word for a change.
Description, as the server wrote it Create a Shopify-owned cart for selected variant line items through the configured Shopify Cart/Storefront MCP endpoint. Commonlands MCP is a stateless proxy: cart state is stored and mutated by Shopify, not in the Worker. The response includes a cart_access_token that binds the cart to this session; retain it, because get_cart and update_cart refuse to act on the cart without it.
Annotations the server declares
- title: Create Shopify cart
- readOnlyHint: false
- idempotentHint: false
- openWorldHint: false
- destructiveHint: false
recommend_lenses_for_applicationRank Commonlands M12 lenses and C-mount lenses for an application note such as embedded robotics, machine-vision inspection, or a required lens field of view.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Rank Commonlands M12 lenses and C-mount lenses for an application note such as embedded robotics, machine-vision inspection, or a required lens field of view. Use as an application shortlist helper, then call match_lens_to_sensor or calculate_field_of_view for final per-sensor HFOV/VFOV/DFOV. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Recommend lenses for an application
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
submit_rfqForward a buyer request-for-quote or engineering question to the Commonlands engineering team.No findings
Why it is in this group
- The name "submit_rfq" says "submit": a word for a change.
Description, as the server wrote it Forward a buyer request-for-quote or engineering question to the Commonlands engineering team. Two-step, buyer-confirmed: the first call returns a preview and sends nothing; show the buyer the preview (including their reply-to email) and, only after they explicitly approve, call again with confirm: true to send. The recipient is fixed to the Commonlands inbox (the agent cannot choose it); this only sends an inquiry and never creates an order, charges a card, or writes Shopify/customer data. Include part numbers, sensor, quantity, and application when known so the team can reply with a quote. Commonlands replies by email.
Annotations the server declares
- title: Submit an RFQ or question to Commonlands
- readOnlyHint: false
- idempotentHint: false
- openWorldHint: false
- destructiveHint: false
Only reads 16Claude Code: allow
calculate_field_of_viewCalculate Commonlands lens field of view for a lens/sensor pair and return HFOV, VFOV, DFOV, coverage, distortion status, and an explicit rectilinear comparison.No findings
Why it is in this group
- The name "calculate_field_of_view" says "view": a word for reading.
Description, as the server wrote it Calculate Commonlands lens field of view for a lens/sensor pair and return HFOV, VFOV, DFOV, coverage, distortion status, and an explicit rectilinear comparison. Use this tool for FOV, HFOV, VFOV, DFOV, field of view, "lens for", lens-to-sensor, AR0234, IMX290, IMX477, and sensor part-number requests. It returns Commonlands data the model cannot derive: live backend FoV when configured, distortion model/status, image-circle coverage, live stock through Shopify read tools where applicable, and MTF/CRA/BFL fields if present in upstream catalog data. Do not use naive rectilinear fallback, focal-length-only math, interpolation, or self-computed catalog estimates when a Commonlands lens/sensor route is available. Accepts lens_sku/lensSku or focal_length_mm/focalLengthMm, plus sensor/sensorPartNumber/sensor_part_number and working_distance_mm/workingDistanceMm. No part number? Describe the sensor directly: widthPx + heightPx + pixelSizeUm (active area is derived as pixels x pitch), or sensorWidthMm + sensorHeightMm. Results are labelled CUSTOM-<w>x<h>. If only focal length is supplied, the response is marked as a rectilinear reference and does not claim Commonlands distortion-corrected lens truth.
Annotations the server declares
- title: Calculate Commonlands field of view
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
compare_lensesCompare selected Commonlands M12 lens and C-mount lens SKUs on the same sensor with the same deterministic scoring model.No findings
Why it is in this group
- The name "compare_lenses" says "compare": a word for reading.
Description, as the server wrote it Compare selected Commonlands M12 lens and C-mount lens SKUs on the same sensor with the same deterministic scoring model. Use as explanatory context, then call calculate_field_of_view for final sensor-specific FoV values when precision matters. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor. Not live product truth; verify purchasable facts with read_shopify_products.
Annotations the server declares
- title: Compare Commonlands lenses
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_cartRetrieve a Shopify-owned cart by cart id.1 finding
Why it is in this group
- The name "get_cart" says "get": a word for reading.
Findings
- Info
The input schema at properties.cart_access_token.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.cart_access_token.description: "Owner credential returned by create_cart for this cart i..."
Description, as the server wrote it Retrieve a Shopify-owned cart by cart id. Owner-bound: requires the cart_access_token returned by create_cart, so only the session that created a cart can read it. Cart persistence comes from Shopify; agents must retain the cart id, cart_access_token, and continue_url across sessions.
Annotations the server declares
- title: Get Shopify cart
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_catalog_snapshot_statusReturn fixture-backed joined catalog counts, validation status, source provenance, live connector readiness, and non-authoritative product-truth warning.No findings
Why it is in this group
- The name "get_catalog_snapshot_status" says "get": a word for reading.
Description, as the server wrote it Return fixture-backed joined catalog counts, validation status, source provenance, live connector readiness, and non-authoritative product-truth warning.
Annotations the server declares
- title: Get joined catalog snapshot status
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_lens_distortion_profileReturn the Commonlands distortion model/status for one lens SKU, including whether the data is source-display-only or backend-calculated.No findings
Why it is in this group
- The name "get_lens_distortion_profile" says "get": a word for reading.
Description, as the server wrote it Return the Commonlands distortion model/status for one lens SKU, including whether the data is source-display-only or backend-calculated. Use this tool for FOV, HFOV, VFOV, DFOV, field of view, "lens for", lens-to-sensor, AR0234, IMX290, IMX477, and sensor part-number requests. It returns Commonlands data the model cannot derive: live backend FoV when configured, distortion model/status, image-circle coverage, live stock through Shopify read tools where applicable, and MTF/CRA/BFL fields if present in upstream catalog data. Do not use naive rectilinear fallback, focal-length-only math, interpolation, or self-computed catalog estimates when a Commonlands lens/sensor route is available. Use this for distortion, rectilinear-vs-wide-angle, MTF/CRA/BFL/optical-profile questions when upstream fields are present. Do not invent polynomial coefficients or claim measured distortion correction when the backend only returns display distortion.
Annotations the server declares
- title: Get Commonlands lens distortion profile
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_productFixture-backed UCP Catalog product detail alias with Commonlands optical metadata and Shopify-native handoff fields.No findings
Why it is in this group
- The name "get_product" says "get": a word for reading.
Description, as the server wrote it Fixture-backed UCP Catalog product detail alias with Commonlands optical metadata and Shopify-native handoff fields. Product optical fields are not a substitute for sensor-specific FoV; call calculate_field_of_view for the lens/sensor pair. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Get UCP catalog product
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_product_page_detailsReturn fixture-backed product-page handoff details for one lens, including DynamoDB-sourced optical specs and gated datasheet policy.No findings
Why it is in this group
- The name "get_product_page_details" says "get": a word for reading.
Description, as the server wrote it Return fixture-backed product-page handoff details for one lens, including DynamoDB-sourced optical specs and gated datasheet policy. Product-page/catalog optical fields are not a substitute for sensor-specific FoV; call calculate_field_of_view for the lens/sensor pair. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor. Use read_shopify_products for live product URL, price, availability, variant IDs, and metafields.
Annotations the server declares
- title: Get product page details
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_purchase_route_optionsReturn safe dual-channel purchase route options for AI agents and robotics engineers across Commonlands MCP and Shopify-native channels without mutating commerce state.No findings
Why it is in this group
- The name "get_purchase_route_options" says "get": a word for reading.
Description, as the server wrote it Return safe dual-channel purchase route options for AI agents and robotics engineers across Commonlands MCP and Shopify-native channels without mutating commerce state. This explains commerce routes only; call calculate_field_of_view/match_lens_to_sensor for sensor-specific FoV before recommending a lens. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Get purchase route options
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_sensor_specsReturn sensor dimensions, pixel pitch, and resolution for lens field of view, M12 lens, and C-mount lens matching inputs.No findings
Why it is in this group
- The name "get_sensor_specs" says "get": a word for reading.
Description, as the server wrote it Return sensor dimensions, pixel pitch, and resolution for lens field of view, M12 lens, and C-mount lens matching inputs. In production this uses the read-only live sensor table when configured, with fixture fallback when unavailable. Use these specs as inputs to calculate_field_of_view or match_lens_to_sensor, not as a reason to hand-calculate FoV. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Get sensor specs
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_shopify_readonly_config_statusReport sanitized Cloudflare Shopify binding presence, approved read scopes, and read-only safety flags without exposing secrets or calling Shopify.No findings
Why it is in this group
- The name "get_shopify_readonly_config_status" says "get": a word for reading.
Description, as the server wrote it Report sanitized Cloudflare Shopify binding presence, approved read scopes, and read-only safety flags without exposing secrets or calling Shopify.
Annotations the server declares
- title: Get Shopify read-only config status
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
get_shopify_ucp_readinessReport connector-free Shopify Storefront MCP and UCP Catalog compatibility, launch blockers, and Commonlands engineering differentiators.No findings
Why it is in this group
- The name "get_shopify_ucp_readiness" says "get": a word for reading.
Description, as the server wrote it Report connector-free Shopify Storefront MCP and UCP Catalog compatibility, launch blockers, and Commonlands engineering differentiators.
Annotations the server declares
- title: Get Shopify Storefront/UCP readiness
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
lookup_catalogFixture-backed UCP Catalog lookup alias for product, variant, SKU, handle, or URL identifiers; returns not-found messages instead of writes.No findings
Why it is in this group
- The name "lookup_catalog" says "lookup": a word for reading.
Description, as the server wrote it Fixture-backed UCP Catalog lookup alias for product, variant, SKU, handle, or URL identifiers; returns not-found messages instead of writes. Lookup records are not enough for sensor-specific FoV; call calculate_field_of_view for known lens/sensor pairs. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Lookup UCP catalog products
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
match_lens_to_sensorFind and rank Commonlands lenses for a sensor, target field of view, working distance, mount, or "lens for" request.No findings
Why it is in this group
- The description's first verb is "find": a word for reading.
Description, as the server wrote it Find and rank Commonlands lenses for a sensor, target field of view, working distance, mount, or "lens for" request. Use this tool for FOV, HFOV, VFOV, DFOV, field of view, "lens for", lens-to-sensor, AR0234, IMX290, IMX477, and sensor part-number requests. It returns Commonlands data the model cannot derive: live backend FoV when configured, distortion model/status, image-circle coverage, live stock through Shopify read tools where applicable, and MTF/CRA/BFL fields if present in upstream catalog data. Do not use naive rectilinear fallback, focal-length-only math, interpolation, or self-computed catalog estimates when a Commonlands lens/sensor route is available. Use this for AR0234, IMX290, IMX477, sensor part numbers, M12/C-mount matching, and target HFOV/VFOV/DFOV workflows; do not shortlist from focal length alone. No part number? Describe the sensor directly: widthPx + heightPx + pixelSizeUm (active area is derived as pixels x pitch), or sensorWidthMm + sensorHeightMm. Results are labelled CUSTOM-<w>x<h>. Use read_shopify_products afterward for live stock, price, availability, Shopify variantId, product URL, and metafields.
Annotations the server declares
- title: Match Commonlands lenses to a sensor
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
read_shopify_productsUse this for live purchasable product truth: product and variant IDs, SKUs, prices, coarse availability, product URLs, and public product-page metafields.No findings
Why it is in this group
- The name "read_shopify_products" says "read": a word for reading.
Description, as the server wrote it Use this for live purchasable product truth: product and variant IDs, SKUs, prices, coarse availability, product URLs, and public product-page metafields. Public data only: active products, no exact inventory counts, and metafields limited to the custom.* display fields shown on commonlands.com product pages. Read-only; does not create carts, checkouts, orders, customers, inventory mutations, or Shopify writes. Fixture catalog tools are scaffold data only.
Annotations the server declares
- title: Read Shopify products
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
search_catalogFixture-backed UCP Catalog search alias for Shopify-native product discovery; no live Shopify calls or cart behavior.No findings
Why it is in this group
- The name "search_catalog" says "search": a word for reading.
Description, as the server wrote it Fixture-backed UCP Catalog search alias for Shopify-native product discovery; no live Shopify calls or cart behavior. Use this only for broad discovery; when a sensor or target FoV is involved, call match_lens_to_sensor or calculate_field_of_view instead of estimating from catalog fields. FoV rule: never estimate sensor-specific FoV from catalog fields; use calculate_field_of_view or match_lens_to_sensor.
Annotations the server declares
- title: Search UCP catalog
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
search_lens_catalogSearch the Commonlands lens catalog by SKU, mount, lens type, M12, C-mount, or application text.No findings
Why it is in this group
- The name "search_lens_catalog" says "search": a word for reading.
Description, as the server wrote it Search the Commonlands lens catalog by SKU, mount, lens type, M12, C-mount, or application text. For sensor part numbers such as AR0234, IMX290, and IMX477, or any "lens for <sensor>" request, use match_lens_to_sensor instead — sensor names are not searchable text here. Use this tool for FOV, HFOV, VFOV, DFOV, field of view, "lens for", lens-to-sensor, AR0234, IMX290, IMX477, and sensor part-number requests. It returns Commonlands data the model cannot derive: live backend FoV when configured, distortion model/status, image-circle coverage, live stock through Shopify read tools where applicable, and MTF/CRA/BFL fields if present in upstream catalog data. Do not use naive rectilinear fallback, focal-length-only math, interpolation, or self-computed catalog estimates when a Commonlands lens/sensor route is available. This discovers candidate lenses from Commonlands catalog/live backend data; it does not replace calculate_field_of_view for sensor-specific HFOV/VFOV/DFOV and does not replace read_shopify_products for live stock/price/product truth.
Annotations the server declares
- title: Search Commonlands lens catalog
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
- destructiveHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.4.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http optics https://mcp.commonlands.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__optics__calculate_field_of_view",
"mcp__optics__match_lens_to_sensor",
"mcp__optics__search_lens_catalog",
"mcp__optics__get_lens_distortion_profile",
"mcp__optics__get_sensor_specs",
"mcp__optics__compare_lenses",
"mcp__optics__get_product_page_details",
"mcp__optics__get_catalog_snapshot_status",
"mcp__optics__get_shopify_ucp_readiness",
"mcp__optics__get_shopify_readonly_config_status",
"mcp__optics__read_shopify_products",
"mcp__optics__get_cart",
"mcp__optics__search_catalog",
"mcp__optics__lookup_catalog",
"mcp__optics__get_product",
"mcp__optics__get_purchase_route_options"
],
"ask": [
"mcp__optics__create_cart",
"mcp__optics__prepare_shopify_purchase_handoff",
"mcp__optics__recommend_lenses_for_application",
"mcp__optics__submit_rfq"
],
"deny": [
"mcp__optics__update_cart"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as optics. Review it before you use it.