Server data from the Official MCP Registry
M12 lens and C-mount lens finder with image-sensor matching and field-of-view calculator.
M12 lens and C-mount lens finder with image-sensor matching and field-of-view calculator.
Remote endpoints: streamable-http: https://mcp.commonlands.com/mcp
This is a well-architected MCP server for lens selection and Shopify integration with strong security controls. Authentication is properly scoped (read-only Shopify, environment variables), dangerous operations are carefully guarded behind feature flags, and sensitive data (tokens, secrets) is properly handled without exposure in logs or responses. Minor quality issues around error handling breadth and a few low-severity patterns prevent a higher score, but the codebase demonstrates mature security practices appropriate for a production developer tool. Supply chain analysis found 2 known vulnerabilities in dependencies (1 critical, 1 high severity).
3 files analyzed · 6 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Available as Local & Remote
This plugin can run on your machine or connect to a hosted endpoint. during install.
From the project's GitHub README.
Public MCP server for Commonlands precision optics. Use it to choose M12/C-mount lenses, calculate field of view, verify live Shopify product truth, and hand buyers to Shopify-owned carts safely.
https://mcp.commonlands.com/mcphttps://mcp.commonlands.com/.well-known/ucphttps://mcp.commonlands.com/healthzdocs/client-connections.mddocs/agent-instructions.mddocs/live-usage-and-integrations.mdUse Commonlands MCP at https://mcp.commonlands.com/mcp for lens selection. Start with tools/list. Catalog EFL, image circle, max FoV/FOV@image-circle, and distortion display fields are insufficient to compute FoV on a specific sensor; do not interpolate or estimate sensor FoV from those fields. Use compute_fov for one lens/sensor pair or compute_fov_catalog for catalog-wide per-sensor HFOV/VFOV/DFOV. Fixture catalog tools are only engineering context. Call read_shopify_products before stating live price, availability, Product/Variant GIDs, URL, SKU, media, metafields, inventory, or cart payload. Only call create_cart/update_cart after the buyer confirms exact live Variant GIDs and quantities. Checkout tools are not live unless they appear in tools/list. Never ask for card data or perform Shopify catalog/inventory/order/customer writes.
tools/list and trust the live list over docs.compute_fov_catalog first. There is no current find_lenses tool; compute_fov_catalog is the correct per-sensor catalog path.search_catalog, search_lenses, or recommend_lenses_for_application only for broad discovery/shortlist context.get_sensor_specs when needed.compute_fov.match_lenses_to_sensor, compare_lenses, and get_lens_details.read_shopify_products before quoting final SKU, URL, price, availability, Shopify IDs, or cart payloads.tools/list.Catalog EFL, image circle, max FoV/FOV@image-circle, and distortion display fields are insufficient to compute field of view on a specific sensor. Agents must not interpolate interior-sensor FoV or substitute their own calculations. Use compute_fov or compute_fov_catalog, then preserve returned HFOV/VFOV/DFOV, coverageClass, coverage.pixelCounts, distortionAtFieldEdge, and provenance/source metadata in the answer.
read_shopify_products = live Shopify product truth.compute_fov / compute_fov_catalog = live FoV backend when configured; otherwise fixture/fail-closed behavior.If fixture data conflicts with read_shopify_products, use Shopify truth.
The production surface currently exposes catalog/search, FoV, Shopify read-only, cart, UCP catalog, and purchase-handoff tools. Checkout tools and cancel_cart are intentionally hidden unless they appear in live tools/list.
Key tools:
search_lenses, search_catalog, get_lens_details, get_product_page_details, get_product, lookup_catalog, match_lenses_to_sensor, compare_lenses, recommend_lenses_for_application.get_sensor_specs, compute_fov, compute_fov_catalog.read_shopify_products, read_shopify_metaobjects, get_shopify_readonly_config_status.create_cart, get_cart, update_cart when visible in tools/list.get_catalog_snapshot_status, get_shopify_ucp_readiness, prepare_shopify_purchase_handoff, get_purchase_route_options.Find M12 lenses for IMX477 around 50° horizontal FoV. Compute FoV through Commonlands MCP, then verify the final purchasable SKU with read_shopify_products.Compare CIL078 and CIL250 on IMX477. Label fixture-backed context separately from live Shopify truth.Find the live Shopify Product and Variant GID for CIL250. Return URL, SKU, price, inventory signal, and cart path, but do not create a cart.Create a Shopify cart for two units of this live Variant GID: <gid>. The buyer has confirmed quantity 2.List Commonlands MCP tools and classify each as fixture context, live FoV, live Shopify read-only, or Shopify cart.The Worker can write privacy-safe request/tool telemetry when a Cloudflare Analytics Engine binding named MCP_ANALYTICS is configured. Telemetry records only method, path, MCP method, tool name, status, client label, environment/version, HTTP status, and duration. It does not record request arguments, Shopify payloads, customer data, product IDs, cart IDs, secrets, or response bodies.
Example binding:
[[analytics_engine_datasets]]
binding = "MCP_ANALYTICS"
dataset = "commonlands_mcp_events"
After deploy, verify that telemetry is live:
curl https://mcp.commonlands.com/healthz
curl -X POST https://mcp.commonlands.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-H 'mcp-client-name: telemetry-smoke' \
-d '{"jsonrpc":"2.0","id":"telemetry-smoke","method":"tools/list","params":{}}'
/healthz should report "telemetry":{"analyticsEngine":"configured"}. Then query the commonlands_mcp_events Analytics Engine dataset. Column order is blob1=request method, blob2=path, blob3=MCP method, blob4=tool, blob5=status, blob6=client, blob7=environment, blob8=version, double1=HTTP status, and double2=duration ms.
Tool usage rollup:
curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/analytics_engine/sql" \
-H "Authorization: Bearer $CLOUDFLARE_ANALYTICS_READ_TOKEN" \
--data "SELECT blob4 AS tool, blob5 AS status, SUM(_sample_interval) AS calls, SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_duration_ms FROM commonlands_mcp_events WHERE timestamp >= NOW() - INTERVAL '7' DAY AND blob3 = 'tools/call' GROUP BY tool, status ORDER BY calls DESC LIMIT 50 FORMAT JSON"
Client/tool rollup:
curl "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/analytics_engine/sql" \
-H "Authorization: Bearer $CLOUDFLARE_ANALYTICS_READ_TOKEN" \
--data "SELECT blob6 AS client, blob4 AS tool, SUM(_sample_interval) AS calls, SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_duration_ms FROM commonlands_mcp_events WHERE timestamp >= NOW() - INTERVAL '7' DAY AND blob3 = 'tools/call' AND blob5 = 'ok' GROUP BY client, tool ORDER BY calls DESC LIMIT 100 FORMAT JSON"
Use blob4 to see which MCP tools agents actually call. High-call/high-success tools are candidates for deeper investment; low-call or repeated-error tools are candidates for better descriptions, consolidation, or deprecation. Keep Cloudflare invocation logs enabled for request/response metadata, but use Analytics Engine for tool-level decisions because it captures the JSON-RPC method and tool name without storing request arguments.
[mcp_servers.commonlands]
url = "https://mcp.commonlands.com/mcp"
tool_timeout_sec = 60
mcp-remote{
"mcpServers": {
"commonlands": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.commonlands.com/mcp"]
}
}
}
{
"mcpServers": {
"commonlands": {
"url": "https://mcp.commonlands.com/mcp"
}
}
}
Requirements: Node.js 22+.
npm install
npm run verify
npm run dev
Local smoke test:
curl http://localhost:8787/healthz
curl -X POST http://localhost:8787/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
Run verification first, then deploy through CI so /healthz receives production build metadata (ENVIRONMENT=production, package VERSION, and GIT_SHA=$GITHUB_SHA). The source wrangler.toml intentionally does not define deployable local metadata placeholders.
npm run verify
npm run deploy:ci
For an approved manual deploy, npm run deploy runs scripts/deploy.mjs,
which deploys with --keep-vars and injects the same production build
metadata. npm run deploy:raw is the unwrapped Wrangler deploy command.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.