Koskamo

Commonlands Optics MCP

An official MCP server by Commonlands LLC that enables AI agents to search M12 and C-mount lens catalogs, match lenses to image sensors, calculate field of view with distortion correction, and verify live product pricing and availability via Shopify integration.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Commonlands Optics MCP logo, by Commonlands LLCVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Commonlands LLC
You need:No Commonlands account or API key is requiredno API key for the public tool surface
MCP endpoint (Streamable HTTP)
https://mcp.commonlands.com/mcp
Vendor documentation

What its tools do

20 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

20 of 20 have a description · 20 of 20 declare behavior hints · 4 of 17 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to commonlands.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Warning Advertises resources/templates/list but does not implement it
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search lens catalog for specific M12 or C-mount lenses
  • Match lenses to image sensors based on pixel pitch and format
  • Calculate field of view accounting for lens distortion
  • Verify live product price and stock availability

Source and maintenance

Vendor evidenceRegistry 0.4.2
Maintenance checked

Protocol and capabilities

Server
commonlands-mcp 0.4.4
MCP protocol negotiated in check
2025-11-25
Tools
20 advertised
Resources
5 advertised
Resource templates
Not advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Commonlands MCP public endpoint is https://mcp.commonlands.com/mcp. Use this endpoint in client configuration, metadata, and agent-facing descriptions. Commonlands MCP helps agents select precision optics for machine vision, robotics, and embedded vision: M12 lenses, C-mount lenses, and lens field of view calculations. Start with image sensor details: model, active area, resolution and pixel pitch. Establish the required horizontal FoV and working distance. Call match_lens_to_sensor to find lenses, then calculate_field_of_view for each final lens/sensor pair and preserve its distortion status. Resolve the chosen family with resolve_lens_product. Select its full SKU, then call get_purchase_options for the requested quantity. Use read_shopify_products for complete public specifications. Never treat a base-price estimate as a binding quote. FoV rule: catalog EFL, image circle, max FoV/FOV@image-circle, and distortion display fields are insufficient to compute field of view on a specific sensor; do not interpolate or estimate interior sensor FoV from those fields. Always call calculate_field_of_view for one lens/sensor pair or match_lens_to_sensor for catalog-wide per-sensor HFOV/VFOV/DFOV selection. Do not run DIY optics math, interpolate catalog FoV, infer coverage, or assemble sensor-specific optical numbers outside Commonlands MCP computed responses. Source-labeling policy: label every optical or commerce claim with its source; preserve returned provenance.method, provenance.rev, coverage class, distortion-at-field-edge status, and Shopify live-read versus fixture/source-warning distinctions. For sensor-specific lens finding, prefer match_lens_to_sensor when the user gives a sensor or target FoV, then call calculate_field_of_view for each final lens/sensor FoV claim. Use search_lens_catalog only for broad SKU/title/mount discovery. Commerce: retain owner tokens for carts and checkouts. For buyer-authorized agent purchases, use the cart response agent_checkout route to the separate Shop MCP connection before converting the cart here. Shop handles buyer sign-in and payment; its complete_checkout requires approval of current terms and a buyer-selected offered instrument. Only completed plus order confirms purchase. After uncertain completion, read status; never repeat payment. Otherwise use Commonlands create_checkout and its Shopify continue_url for buyer payment. Safety boundaries: fixture-backed tools are context only; use live Shopify product truth and tools/list. Commonlands does not accept Shop OAuth tokens, payment instruments, or caller-supplied verification flags. Send Shop credentials only to Shop MCP in the buyer client. Direct Commonlands payment, order, customer, inventory, and product writes remain disabled. Do not pass arbitrary URLs to Commonlands; its upstream endpoints are fixed and allowlisted. Commonlands does not accept client-supplied downstream tokens.

Tools

20 advertised

get_purchase_options — Check quantity purchase options
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read current Shopify price, currency, online inventory and backorder policy for an exact full SKU and quantity. Base-price arithmetic is not a binding quote; unverified volume terms require an RFQ. Optionally read an existing owner-authorized checkout for shipping/tax estimates. Creates no cart, checkout, order or RFQ.

get_purchase_options input schema
{
  "type": "object",
  "required": [
    "sku",
    "quantity"
  ],
  "properties": {
    "sku": {
      "type": "string",
      "description": "Exact full variant SKU from resolve_lens_product."
    },
    "quantity": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1
    },
    "variant_id": {
      "type": "string",
      "description": "Optional Shopify Variant GID; must match the full SKU."
    },
    "checkout_id": {
      "type": "string",
      "description": "Optional existing checkout to read; its single line must match this variant and quantity."
    },
    "checkout_access_token": {
      "type": "string",
      "description": "Matching owner credential from create_checkout; never a Shop OAuth token."
    }
  },
  "additionalProperties": false
}
get_purchase_options annotations
{
  "title": "Check quantity purchase options",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
resolve_lens_product — Resolve a live lens product
Advertised by the server during the last successful anonymous check.
Advertised read-only

Resolve a lens family or exact full SKU to current published Shopify variants. A family requires explicit variant selection; no fixture specifications or inferred configuration. Use the optical part number with calculate_field_of_view for sensor-specific optics.

resolve_lens_product input schema
{
  "type": "object",
  "required": [
    "sku"
  ],
  "properties": {
    "sku": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
resolve_lens_product annotations
{
  "title": "Resolve a live lens product",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate_field_of_view — Calculate Commonlands field of view
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

calculate_field_of_view input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "lens_sku"
      ]
    },
    {
      "required": [
        "lensSku"
      ]
    },
    {
      "required": [
        "focal_length_mm"
      ]
    },
    {
      "required": [
        "focalLengthMm"
      ]
    }
  ],
  "properties": {
    "sensor": {
      "anyOf": [
        {
          "enum": [
            "IMX477",
            "IMX219",
            "AR0234"
          ],
          "type": "string",
          "description": "Known catalog sensor part number."
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{2,32}$",
          "description": "Safe sensor identifier accepted for live catalog lookup."
        },
        {
          "type": "object",
          "properties": {
            "partNumber": {
              "type": "string"
            },
            "part_number": {
              "type": "string"
            }
          },
          "additionalProperties": true
        }
      ],
      "description": "Sensor part number or safe sensor object. Supports AR0234, IMX290/IMX477 when present in the live catalog, and fixture sensors listed in the enum."
    },
    "lensSku": {
      "type": "string",
      "description": "Commonlands lens SKU, for example CIL250. Camel-case alias for lens_sku."
    },
    "widthPx": {
      "type": "integer",
      "minimum": 1,
      "description": "Custom sensor: horizontal pixel count (e.g. 4056). Use with heightPx and pixelSizeUm."
    },
    "heightPx": {
      "type": "integer",
      "minimum": 1,
      "description": "Custom sensor: vertical pixel count (e.g. 3040)."
    },
    "lens_sku": {
      "type": "string",
      "description": "Commonlands lens SKU, for example CIL250. Snake-case alias for lensSku."
    },
    "pixelSizeUm": {
      "type": "number",
      "description": "Custom sensor: pixel pitch in microns (e.g. 1.55).",
      "exclusiveMinimum": 0
    },
    "pixelPitchUm": {
      "type": "number",
      "description": "Alias for pixelSizeUm.",
      "exclusiveMinimum": 0
    },
    "focalLengthMm": {
      "type": "number",
      "description": "Fallback rectilinear reference only when no Commonlands lens SKU is available. Camel-case alias for focal_length_mm.",
      "exclusiveMinimum": 0
    },
    "sensorWidthMm": {
      "type": "number",
      "description": "Custom sensor: active-area width in mm (alternative to pixels x pitch).",
      "exclusiveMinimum": 0
    },
    "sensorHeightMm": {
      "type": "number",
      "description": "Custom sensor: active-area height in mm.",
      "exclusiveMinimum": 0
    },
    "verticalPixels": {
      "type": "integer",
      "minimum": 1,
      "description": "Alias for heightPx."
    },
    "focal_length_mm": {
      "type": "number",
      "description": "Fallback rectilinear reference only when no Commonlands lens SKU is available. Snake-case alias for focalLengthMm.",
      "exclusiveMinimum": 0
    },
    "horizontalPixels": {
      "type": "integer",
      "minimum": 1,
      "description": "Alias for widthPx."
    },
    "sensorPartNumber": {
      "anyOf": [
        {
          "enum": [
            "IMX477",
            "IMX219",
            "AR0234"
          ],
          "type": "string"
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{2,32}$"
        }
      ],
      "description": "Sensor part number. Camel-case alias for sensor."
    },
    "workingDistanceMm": {
      "type": "number",
      "description": "Optional working distance in mm. Camel-case alias for working_distance_mm.",
      "exclusiveMinimum": 0
    },
    "sensor_part_number": {
      "anyOf": [
        {
          "enum": [
            "IMX477",
            "IMX219",
            "AR0234"
          ],
          "type": "string"
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{2,32}$"
        }
      ],
      "description": "Sensor part number. Snake-case alias for sensorPartNumber."
    },
    "working_distance_mm": {
      "type": "number",
      "description": "Optional working distance in mm. Snake-case alias for workingDistanceMm.",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
calculate_field_of_view output schema
{
  "type": "object",
  "required": [
    "hfov_deg",
    "vfov_deg",
    "dfov_deg",
    "method",
    "distortion_model",
    "image_circle_mm",
    "sensor_diagonal_mm",
    "coverage_ok",
    "rectilinear_comparison"
  ],
  "properties": {
    "method": {
      "type": "string"
    },
    "dfov_deg": {
      "type": [
        "number",
        "null"
      ]
    },
    "hfov_deg": {
      "type": [
        "number",
        "null"
      ]
    },
    "vfov_deg": {
      "type": [
        "number",
        "null"
      ]
    },
    "coverage_ok": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "image_circle_mm": {
      "type": [
        "number",
        "null"
      ]
    },
    "distortion_model": {
      "type": "string"
    },
    "sensor_diagonal_mm": {
      "type": "number"
    },
    "rectilinear_comparison": {
      "type": "object",
      "required": [
        "dfov_deg",
        "delta_deg"
      ],
      "properties": {
        "dfov_deg": {
          "type": [
            "number",
            "null"
          ]
        },
        "delta_deg": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": true
}
calculate_field_of_view annotations
{
  "title": "Calculate Commonlands field of view",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
match_lens_to_sensor — Match Commonlands lenses to a sensor
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

match_lens_to_sensor input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "sensor"
      ]
    },
    {
      "required": [
        "sensorPartNumber"
      ]
    },
    {
      "required": [
        "sensor_part_number"
      ]
    },
    {
      "required": [
        "widthPx",
        "heightPx",
        "pixelSizeUm"
      ]
    },
    {
      "required": [
        "horizontalPixels",
        "verticalPixels",
        "pixelSizeUm"
      ]
    },
    {
      "required": [
        "widthPx",
        "heightPx",
        "pixelPitchUm"
      ]
    },
    {
      "required": [
        "sensorWidthMm",
        "sensorHeightMm"
      ]
    }
  ],
  "properties": {
    "mount": {
      "type": "string",
      "description": "Optional mount filter, for example M12 or C-mount."
    },
    "sensor": {
      "anyOf": [
        {
          "enum": [
            "IMX477",
            "IMX219",
            "AR0234"
          ],
          "type": "string",
          "description": "Known catalog sensor part number."
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{2,32}$",
          "description": "Safe sensor identifier accepted for live catalog lookup."
        }
      ],
      "description": "Sensor part number, for example AR0234, IMX290, or IMX477. Any sensor in the live catalog is accepted; the enum lists only the fixture fallback set."
    },
    "widthPx": {
      "type": "integer",
      "minimum": 1,
      "description": "Custom sensor: horizontal pixel count (e.g. 4056). Use with heightPx and pixelSizeUm."
    },
    "heightPx": {
      "type": "integer",
      "minimum": 1,
      "description": "Custom sensor: vertical pixel count (e.g. 3040)."
    },
    "maxResults": {
      "type": "integer",
      "default": 5,
      "maximum": 10,
      "minimum": 1
    },
    "max_results": {
      "type": "integer",
      "default": 5,
      "maximum": 10,
      "minimum": 1
    },
    "pixelSizeUm": {
      "type": "number",
      "description": "Custom sensor: pixel pitch in microns (e.g. 1.55).",
      "exclusiveMinimum": 0
    },
    "pixelPitchUm": {
      "type": "number",
      "description": "Alias for pixelSizeUm.",
      "exclusiveMinimum": 0
    },
    "sensorWidthMm": {
      "type": "number",
      "description": "Custom sensor: active-area width in mm (alternative to pixels x pitch).",
      "exclusiveMinimum": 0
    },
    "sensorHeightMm": {
      "type": "number",
      "description": "Custom sensor: active-area height in mm.",
      "exclusiveMinimum": 0
    },
    "verticalPixels": {
      "type": "integer",
      "minimum": 1,
      "description": "Alias for heightPx."
    },
    "horizontalPixels": {
      "type": "integer",
      "minimum": 1,
      "description": "Alias for widthPx."
    },
    "sensorPartNumber": {
      "anyOf": [
        {
          "enum": [
            "IMX477",
            "IMX219",
            "AR0234"
          ],
          "type": "string"
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{2,32}$"
        }
      ],
      "description": "Sensor part number. Alias for sensor."
    },
    "workingDistanceMm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "sensor_part_number": {
      "anyOf": [
        {
          "enum": [
            "IMX477",
            "IMX219",
            "AR0234"
          ],
          "type": "string"
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9-]{2,32}$"
        }
      ],
      "description": "Sensor part number. Snake-case alias for sensorPartNumber."
    },
    "working_distance_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "desiredHorizontalFovDeg": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "desired_horizontal_fov_deg": {
      "type": "number",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
match_lens_to_sensor annotations
{
  "title": "Match Commonlands lenses to a sensor",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_lens_catalog — Search Commonlands lens catalog
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_lens_catalog input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "SKU, title, mount, lens type, application, sensor, or field-of-view search text."
    }
  },
  "additionalProperties": false
}
search_lens_catalog annotations
{
  "title": "Search Commonlands lens catalog",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_lens_distortion_profile — Get Commonlands lens distortion profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_lens_distortion_profile input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "lens_sku"
      ]
    },
    {
      "required": [
        "lensSku"
      ]
    },
    {
      "required": [
        "sku"
      ]
    }
  ],
  "properties": {
    "sku": {
      "type": "string",
      "description": "Legacy SKU alias."
    },
    "lensSku": {
      "type": "string",
      "description": "Commonlands lens SKU, for example CIL250. Camel-case alias for lens_sku."
    },
    "lens_sku": {
      "type": "string",
      "description": "Commonlands lens SKU, for example CIL250. Snake-case alias for lensSku."
    }
  },
  "additionalProperties": false
}
get_lens_distortion_profile annotations
{
  "title": "Get Commonlands lens distortion profile",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_sensor_specs — Get sensor specs
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_sensor_specs input schema
{
  "type": "object",
  "required": [
    "partNumber"
  ],
  "properties": {
    "partNumber": {
      "type": "string",
      "description": "Sensor part number, for example IMX477."
    }
  },
  "additionalProperties": false
}
get_sensor_specs annotations
{
  "title": "Get sensor specs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_lenses — Compare Commonlands lenses
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

compare_lenses input schema
{
  "type": "object",
  "required": [
    "lensSkus",
    "sensorPartNumber"
  ],
  "properties": {
    "lensSkus": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "minItems": 1
    },
    "sensorPartNumber": {
      "type": "string",
      "description": "Sensor part number, for example IMX477."
    },
    "workingDistanceMm": {
      "type": "number",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
compare_lenses annotations
{
  "title": "Compare Commonlands lenses",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_catalog_snapshot_status — Get joined catalog snapshot status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return fixture-backed joined catalog counts, validation status, source provenance, live connector readiness, and non-authoritative product-truth warning.

get_catalog_snapshot_status input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_catalog_snapshot_status annotations
{
  "title": "Get joined catalog snapshot status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_shopify_ucp_readiness — Get Shopify Storefront/UCP readiness
Advertised by the server during the last successful anonymous check.
Advertised read-only

Report connector-free Shopify Storefront MCP and UCP Catalog compatibility, launch blockers, and Commonlands engineering differentiators.

get_shopify_ucp_readiness input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_shopify_ucp_readiness annotations
{
  "title": "Get Shopify Storefront/UCP readiness",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_shopify_readonly_config_status — Get Shopify read-only config status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Report sanitized Cloudflare Shopify binding presence, approved read scopes, and read-only safety flags without exposing secrets or calling Shopify.

get_shopify_readonly_config_status input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_shopify_readonly_config_status annotations
{
  "title": "Get Shopify read-only config status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_shopify_products — Read Shopify products
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this for live purchasable product truth: product and variant IDs, full SKUs, prices, availability, product URLs, and public product-page metafields. Each variant includes websiteStockQuantity (tracked inventory count used by website stock labels), availableQuantity (online sellable stock), inventoryTracked, availableForSale, and continueSellingWhenOutOfStock. Null quantities mean unknown or untracked, not zero. Match the full selected SKU and variantId; never sum different variants. Each call reads current Shopify backend data. Use generatedAt for read freshness. Typed metafield value is authoritative; valuePreview is display-only. Check pageInfo and metafieldsComplete. Counts reserve no inventory and do not guarantee delivery to a customer location; verify checkout warnings. Only active Online Store products are returned. Private inventory IDs and locations remain excluded. Read-only; does not create carts, checkouts, orders, customers, inventory mutations, or Shopify writes. Fixture catalog tools are scaffold data only.

read_shopify_products input schema
{
  "type": "object",
  "properties": {
    "sku": {
      "type": "string",
      "description": "Optional variant SKU, for example CIL250."
    },
    "after": {
      "type": "string",
      "description": "Shopify endCursor from the previous page; keep the same search."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "Optional safe Shopify product/variant search text."
    },
    "handle": {
      "type": "string",
      "description": "Optional Shopify product handle."
    },
    "includeMetafields": {
      "type": "boolean",
      "default": false,
      "description": "When true, include the allowlisted public product-page metafields (custom.* display specs). Non-public namespaces and keys are never returned."
    }
  },
  "additionalProperties": false
}
read_shopify_products annotations
{
  "title": "Read Shopify products",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_cart — Create Shopify cart
Advertised by the server during the last successful anonymous check.

Create a Shopify-owned cart after buyer confirmation of live variants and quantities. Retain cart_access_token for get_cart/update_cart. For an agent-authorized purchase, use the returned agent_checkout route in the buyer's separate Shop MCP connection; Shop handles sign-in, approval, and payment. Otherwise use Commonlands create_checkout for a customer payment link. This tool places no order.

create_cart input schema
{
  "type": "object",
  "required": [
    "cart"
  ],
  "properties": {
    "cart": {
      "type": "object",
      "required": [
        "line_items"
      ],
      "properties": {
        "context": {
          "type": "object"
        },
        "signals": {
          "type": "object"
        },
        "line_items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "quantity",
              "item"
            ],
            "properties": {
              "item": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "quantity": {
                "type": "integer",
                "maximum": 999,
                "minimum": 1
              }
            },
            "additionalProperties": false
          },
          "maxItems": 25,
          "minItems": 1
        }
      },
      "additionalProperties": false
    },
    "meta": {
      "type": "object",
      "description": "Optional UCP metadata. ucp-agent.profile is filled from server config when omitted."
    }
  },
  "additionalProperties": false
}
create_cart annotations
{
  "title": "Create Shopify cart",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_cart — Get Shopify cart
Advertised by the server during the last successful anonymous check.
Advertised read-only

Retrieve a Shopify-owned cart with its cart_access_token from create_cart. Retain the full cart id, owner token, and continue_url. The agent_checkout field describes how the buyer's separate Shop MCP connection can convert this cart and complete an approved purchase; it does not itself place an order.

get_cart input schema
{
  "type": "object",
  "required": [
    "id",
    "cart_access_token"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Shopify Cart gid."
    },
    "meta": {
      "type": "object"
    },
    "cart_access_token": {
      "type": "string",
      "description": "Owner credential returned by create_cart for this cart id."
    }
  },
  "additionalProperties": false
}
get_cart annotations
{
  "title": "Get Shopify cart",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_cart — Update Shopify cart
Advertised by the server during the last successful anonymous check.
Advertised destructive

Replace the complete Shopify cart after buyer confirmation. Requires id and cart_access_token. Read the cart first, then send cart.line_items containing every item to retain with item.id (ProductVariant GID), quantity, and optional existing line id. Omitted lines are removed; [] empties the cart. This does not place an order.

update_cart input schema
{
  "type": "object",
  "required": [
    "id",
    "cart",
    "cart_access_token"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "cart": {
      "type": "object",
      "required": [
        "line_items"
      ],
      "properties": {
        "context": {
          "type": "object"
        },
        "line_items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "item",
              "quantity"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "item": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "quantity": {
                "type": "integer",
                "maximum": 999,
                "minimum": 1
              }
            },
            "additionalProperties": false
          },
          "maxItems": 25,
          "minItems": 0
        }
      },
      "additionalProperties": false
    },
    "meta": {
      "type": "object"
    },
    "cart_access_token": {
      "type": "string",
      "description": "Owner credential returned by create_cart for this cart id."
    }
  },
  "additionalProperties": false
}
update_cart annotations
{
  "title": "Update Shopify cart",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
cancel_cart — Cancel Shopify cart
Advertised by the server during the last successful anonymous check.
Advertised destructive

Cancel a Shopify-owned cart using its id and cart_access_token. Requires meta["idempotency-key"] UUID for retry safety. This does not cancel an order or refund payment.

cancel_cart input schema
{
  "type": "object",
  "required": [
    "id",
    "meta",
    "cart_access_token"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "meta": {
      "type": "object"
    },
    "cart_access_token": {
      "type": "string",
      "description": "Owner token returned by create_cart."
    }
  },
  "additionalProperties": false
}
cancel_cart annotations
{
  "title": "Cancel Shopify cart",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
create_checkout — Create Shopify Checkout MCP checkout
Advertised by the server during the last successful anonymous check.

Prepare a Shopify checkout after the buyer confirms exact live variants and quantities. Pass checkout.cart_id and its cart_access_token to convert a cart, or checkout.line_items. Retain checkout_access_token from the response. Send the buyer to continue_url for review and payment; this does not place an order.

create_checkout input schema
{
  "type": "object",
  "required": [
    "checkout"
  ],
  "properties": {
    "meta": {
      "type": "object",
      "description": "Optional UCP metadata. ucp-agent.profile is filled from server config when omitted."
    },
    "checkout": {
      "type": "object",
      "properties": {
        "cart_id": {
          "type": "string",
          "description": "Optional Shopify Cart gid to convert/hand off into checkout."
        },
        "context": {
          "type": "object"
        },
        "line_items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "quantity",
              "item"
            ],
            "properties": {
              "item": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              "quantity": {
                "type": "integer",
                "maximum": 999,
                "minimum": 1
              }
            },
            "additionalProperties": false
          },
          "maxItems": 25,
          "minItems": 0
        }
      },
      "additionalProperties": false
    },
    "cart_access_token": {
      "type": "string",
      "description": "Required when checkout.cart_id is supplied; use the owner token from create_cart."
    }
  },
  "additionalProperties": false
}
create_checkout annotations
{
  "title": "Create Shopify Checkout MCP checkout",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_checkout — Get Shopify Checkout MCP checkout
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a Shopify checkout handoff summary using its id and checkout_access_token from create_checkout. Buyer and payment details are withheld. Send the buyer to continue_url to review and pay.

get_checkout input schema
{
  "type": "object",
  "required": [
    "id",
    "checkout_access_token"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Shopify Checkout gid."
    },
    "meta": {
      "type": "object"
    },
    "checkout_access_token": {
      "type": "string",
      "description": "Owner token returned by create_checkout."
    }
  },
  "additionalProperties": false
}
get_checkout annotations
{
  "title": "Get Shopify Checkout MCP checkout",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
recommend_lenses_for_application — Recommend lenses for an application
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

recommend_lenses_for_application input schema
{
  "type": "object",
  "required": [
    "sensorPartNumber"
  ],
  "properties": {
    "mount": {
      "type": "string"
    },
    "maxResults": {
      "type": "integer",
      "default": 5,
      "maximum": 10,
      "minimum": 1
    },
    "application": {
      "type": "string"
    },
    "requireInStock": {
      "type": "boolean",
      "default": false
    },
    "sensorPartNumber": {
      "type": "string",
      "description": "Sensor part number, for example IMX477."
    },
    "workingDistanceMm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "preferLowDistortion": {
      "type": "boolean",
      "default": false
    },
    "desiredHorizontalFovDeg": {
      "type": "number",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
recommend_lenses_for_application annotations
{
  "title": "Recommend lenses for an application",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_rfq — Submit an RFQ or question to Commonlands
Advertised by the server during the last successful anonymous check.

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.

submit_rfq input schema
{
  "type": "object",
  "required": [
    "message",
    "email"
  ],
  "properties": {
    "kind": {
      "enum": [
        "rfq",
        "question"
      ],
      "type": "string",
      "description": "Whether this is a quote request or a general question. Defaults to question."
    },
    "name": {
      "type": "string",
      "description": "Optional buyer name."
    },
    "email": {
      "type": "string",
      "description": "The buyer's reply-to email so Commonlands can respond."
    },
    "sensor": {
      "type": "string",
      "description": "Optional sensor part number for context."
    },
    "company": {
      "type": "string",
      "description": "Optional company name."
    },
    "confirm": {
      "type": "boolean",
      "default": false,
      "description": "Explicit buyer approval. Omit or false to get a no-send preview; set true only after the buyer has seen the preview and approved sending."
    },
    "message": {
      "type": "string",
      "maxLength": 4000,
      "description": "The buyer's question or RFQ details."
    },
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "description": "Optional quantity for the quote."
    },
    "application": {
      "type": "string",
      "description": "Optional application note."
    },
    "partNumbers": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 25
        }
      ],
      "description": "Optional Commonlands SKUs of interest (string or array)."
    }
  },
  "additionalProperties": false
}
submit_rfq annotations
{
  "title": "Submit an RFQ or question to Commonlands",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

1 advertised

select_lens_for_sensor_fov_working_distance — Select lens for sensor, FoV, and working distance

Advertised by the server during the last successful anonymous check.

Guide a model to use Commonlands MCP optics tools for sensor-specific lens selection instead of self-computed FoV math.

sensor
Sensor part number, for example AR0234, IMX290, or IMX477. (required)
target_fov
Target field of view, such as HFOV 60 deg or 120 mm width. (required)
working_distance
Working distance, preferably in mm. (required)
mount
Preferred mount such as M12 or C-mount.
constraints
Application constraints such as low distortion, stock, MTF, CRA, BFL, IP rating, or budget.

Resources

5 advertised

Commonlands MCP public connection metadata

Advertised by the server during the last successful anonymous check.

Canonical public MCP endpoint: https://mcp.commonlands.com/mcp. Use this URL for clients, metadata, and agent-facing descriptions; localhost is local-development only.

Commonlands MCP public connection metadata URI
commonlands://server/connection

MIME type: application/json

Commonlands M12 and C-mount lens catalog snapshot

Advertised by the server during the last successful anonymous check.

Fixture-backed Phase 1 joined catalog of Commonlands M12 lenses, C-mount lenses, focal lengths, mounts, image circles, and product handoff fields.

Commonlands M12 and C-mount lens catalog snapshot URI
commonlands://catalog/lenses

MIME type: application/json

Commonlands sensor catalog

Advertised by the server during the last successful anonymous check.

Sensor catalog for lens field of view inputs: active area, resolution, and pixel pitch. Tool calls prefer the read-only live sensor table when configured, with fixture fallback when unavailable.

Commonlands sensor catalog URI
commonlands://catalog/sensors

MIME type: application/json

Commonlands joined catalog snapshot status

Advertised by the server during the last successful anonymous check.

Fixture-backed catalog validation, join counts, source provenance, connector-readiness status, and product-truth boundaries for M12/C-mount lens recommendations.

Commonlands joined catalog snapshot status URI
commonlands://catalog/snapshot-status

MIME type: application/json

Commonlands Shopify Storefront/UCP readiness

Advertised by the server during the last successful anonymous check.

Compatibility report for Shopify Storefront MCP and UCP Catalog launch planning, including read-only product truth and approved Shopify-owned cart boundaries.

Commonlands Shopify Storefront/UCP readiness URI
commonlands://compatibility/shopify-ucp

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
424 ms
95th percentile latency
424 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 424 ms · metadata changed · 20 tool(s), 5 resource(s), 1 prompt(s); warnings: Advertises resources/templates/list but does not implement it

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http commonlands-optics-mcp https://mcp.commonlands.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add commonlands-optics-mcp --url https://mcp.commonlands.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable commonlands-optics-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "commonlands-optics-mcp": {
      "url": "https://mcp.commonlands.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "commonlands-optics-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.commonlands.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start commonlands-optics-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "commonlands-optics-mcp": {
      "type": "http",
      "url": "https://mcp.commonlands.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http commonlands-optics-mcp https://mcp.commonlands.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.commonlands.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "commonlands-optics-mcp": {
      "serverUrl": "https://mcp.commonlands.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Commonlands Optics MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Commonlands Optics MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing