# kernelCAD (com.kernelcad/kernelcad): tool descriptions scored

- tools/list taken: 2026-11-02 (UTC)
- From: [Official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers/com.kernelcad%2Fkernelcad/versions/latest)
- Connected to: https://mcp.kernelcad.com/mcp
- Homepage: https://kernelcad.com/
- Repository: https://github.com/w1ne/kernelCAD-web
- Scoring rules: v2
- Tools: 74
- Average: 78.8 / 100 (Clear)
- Near-identical pairs: 0

This page shows how kernelCAD (com.kernelcad/kernelcad)'s tool descriptions scored, the issues found and the names of its tools and parameters. The descriptions are the server's own: read them where the copy came from.

Forecall asked the URL this server lists in the official MCP Registry for its tools/list once, on the date above, without calling any tool. The server may have changed since.

## Across the server

- Major: 74 tools. Above 40, models choose less accurately.
- Minor: The server has no instructions. Say there, once, what the server is for and when to use it: Claude Code and Gemini CLI read the instructions before the tool descriptions.

## Tools

- `estimate_assembly_manufacturing`: 49 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
- `request_assembly_quote`: 57 / 100
  - Minor: Arguments without a description: requestId, checklist, checklist.modelHash, checklist.snapshotHash, checklist.acknowledgedWarnings, idempotencyKey.
  - Minor: Required identifiers whose description does not say where the value comes from: requestId. Name the tool or the place that returns it, or models look it up first.
- `solve_sketch`: 57 / 100
  - Major: Arguments without a description: entities[].id, entities[].type, entities[].x, entities[].y, entities[].id, entities[].type, entities[].p1, entities[].p2, entities[].id, entities[].type, entities[].center, entities[].radius, constraints[].id, constraints[].type.
  - Minor: String arguments with no constraint or example: entities[].id, entities[].id, entities[].p1, entities[].p2, entities[].id, entities[].center, constraints[].id.
- `add_constraint`: 59 / 100
  - Major: Arguments without a description: constraints[].id, constraints[].type, constraints[].entities, constraints[].value, constraint.id, constraint.type.
  - Minor: String arguments with no constraint or example: constraints[].id, constraint.id.
- `solve_mates`: 60 / 100
  - Minor: Arguments without a description: assembly.
  - Minor: String arguments with no constraint or example: assembly.
  - Minor: No `required` list, so every argument is optional.
- `price_part`: 61 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: method.process, method.quantity.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `explode_view`: 62 / 100
  - Minor: Arguments without a description: parts[].name, parts[].center, parts[].size, assembly_order.
  - Minor: String arguments with no constraint or example: parts[].name.
  - Minor: No `required` list, so every argument is optional.
- `flatten_pattern`: 62 / 100
  - Major: Arguments without a description: code, featureId.
  - Minor: String arguments with no constraint or example: code, featureId.
  - Minor: No `required` list, so every argument is optional.
- `inspect_nurbs`: 62 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
- `why_did_this_fail`: 62 / 100
  - Major: Arguments without a description: code, feature_id.
  - Minor: String arguments with no constraint or example: code, feature_id.
  - Minor: No `required` list, so every argument is optional.
- `write_bom`: 62 / 100
  - Minor: String arguments with no constraint or example: handoff_json.
  - Minor: No `required` list, so every argument is optional.
- `design_loop`: 65 / 100
  - Minor: Arguments without a description: attempts[].id, attempts[].title, attempts[].visualReview.accepted, attempts[].visualReview.screenshotPath, attempts[].visualReview.findings, attempts[].visualReview.checks[].code, attempts[].visualReview.checks[].passed, attempts[].visualReview.checks[].finding, attempts[].visualReview.checks[].screenshotPath, assembly.
  - Minor: String arguments with no constraint or example: attempts[].id, attempts[].title, attempts[].visualReview.screenshotPath, attempts[].visualReview.checks[].code, attempts[].visualReview.checks[].finding, attempts[].visualReview.checks[].screenshotPath, assembly.
  - Minor: The meaning of the boolean argument attempts[].visualReview.accepted is unclear.
  - Minor: The meaning of the boolean argument attempts[].visualReview.checks[].passed is unclear.
- `order_part`: 66 / 100
  - Minor: Arguments without a description: method.process, method.quantity.
  - Minor: No `required` list, so every argument is optional.
- `review_cad`: 66 / 100
  - Minor: No `required` list, so every argument is optional.
- `find_part`: 67 / 100
  - Major: Arguments without a description: query, category, family, standard, tag, limit, source.
  - Minor: String arguments with no constraint or example: query, category, family, standard, tag.
  - Minor: No `required` list, so every argument is optional.
- `set_selection`: 69 / 100
  - Minor: Arguments without a description: selection.
- `lookup_api`: 70 / 100
  - Minor: No `required` list, so every argument is optional.
- `lookup_diagnostics`: 70 / 100
- `fetch_part`: 72 / 100
  - Minor: Arguments without a description: id, query, category, family, standard, model.attribution.
  - Minor: String arguments with no constraint or example: id, query, category, family, standard, model.attribution.
  - Minor: No `required` list, so every argument is optional.
- `get_model_mesh`: 72 / 100
- `blockout_assembly`: 74 / 100
  - Minor: Arguments without a description: parts, parts[].name, parts[].anchors, parts[].anchors[].name, connections.
  - Minor: String arguments with no constraint or example: parts[].name, parts[].anchors[].name, connections[].from, connections[].to.
- `trace_from_image`: 74 / 100
  - Minor: Arguments without a description: scaleAnchor.unit, priors[].id, priors[].statement, priors[].value, priors[].confidence.
  - Minor: String arguments with no constraint or example: priors[].id, priors[].statement.
- `add_pattern_feature`: 75 / 100
  - Major: Arguments without a description: kind, linear.count, linear.direction, linear.spacing, circular.count, circular.axis, grid.x.count, grid.x.direction, grid.x.spacing, grid.y.count, grid.y.direction, grid.y.spacing.
- `import_step`: 75 / 100
  - Minor: Arguments without a description: upload.download_url, upload.file_id, upload.mime_type, upload.file_name.
  - Minor: String arguments with no constraint or example: upload.download_url, upload.file_id, upload.mime_type, upload.file_name.
  - Minor: No `required` list, so every argument is optional.
- `add_mate`: 77 / 100
- `mesh_boolean`: 77 / 100
  - Minor: Arguments without a description: operation.
- `remove_feature`: 78 / 100
- `lookup_cookbook`: 79 / 100
  - Minor: No `required` list, so every argument is optional.
- `query`: 79 / 100
  - Minor: No `required` list, so every argument is optional.
- `add_workspace_target`: 80 / 100
  - Minor: Required identifiers whose description does not say where the value comes from: connector_ref. Name the tool or the place that returns it, or models look it up first.
- `get_project_revision`: 80 / 100
- `lookup_authoring_skill`: 80 / 100
  - Minor: No `required` list, so every argument is optional.
- `project_curve`: 80 / 100
  - Minor: Arguments without a description: commands[].kind, commands[].x, commands[].y.
- `resolve_assumptions`: 80 / 100
- `fab_pack`: 81 / 100
- `ray_pick`: 81 / 100
- `send_to_printer`: 81 / 100
  - Minor: Arguments without a description: protocol.
- `add_connector`: 82 / 100
  - Minor: Arguments without a description: type.
- `dfm_review`: 82 / 100
  - Minor: No `required` list, so every argument is optional.
- `drawing_to_cad`: 82 / 100
  - Minor: No `required` list, so every argument is optional.
- `set_scene_return`: 82 / 100
  - Minor: Arguments without a description: mode.
- `add_feature`: 83 / 100
- `add_part`: 83 / 100
  - Minor: String arguments with no constraint or example: part_name.
  - Minor: The description mentions none of its 3 or more arguments.
- `fit_plane`: 83 / 100
- `get_selection`: 83 / 100
- `add_text`: 84 / 100
- `add_variable_sweep`: 84 / 100
  - Minor: The meaning of the boolean argument closed is unclear.
- `mesh_summary`: 84 / 100
- `review_paint_peek_latest`: 84 / 100
  - Minor: No `required` list, so every argument is optional.
- `add_curve`: 85 / 100
- `apply_surface_blend`: 85 / 100
- `diff_scripts`: 85 / 100
  - Minor: No `required` list, so every argument is optional.
- `fea_summary`: 85 / 100
  - Minor: No `required` list, so every argument is optional.
- `sweep_tolerance`: 85 / 100
  - Minor: Arguments without a description: gates.reachable.tipLink, gates.reachable.targetPosition, gates.reachable.targetOrientation.
  - Minor: String arguments with no constraint or example: gates.reachable.tipLink.
  - Minor: The meaning of the boolean argument gates.interference is unclear.
  - Minor: The meaning of the boolean argument gates.mountingHoles is unclear.
  - Minor: The meaning of the boolean argument gates.jointAxis is unclear.
- `verify`: 85 / 100
  - Minor: The description is long (927 words). It helps selection but costs steps and tokens.
  - Minor: Arguments without a description: asserted_plane.origin, asserted_plane.normal, fasteners[].part, fasteners[].against, fasteners[].engagementPart, fasteners[].maxProtrusionMm, motion_loads[].part, motion_loads[].point, motion_loads[].force, motion_loads[].fromMs, motion_loads[].toMs.
  - Minor: String arguments with no constraint or example: motion_loads[].part.
- `add_surface`: 86 / 100
  - Minor: Arguments without a description: degree.u, degree.v, knots.u, knots.v, periodic.u, periodic.v.
  - Minor: The meaning of the boolean argument periodic.u is unclear.
  - Minor: The meaning of the boolean argument periodic.v is unclear.
- `run_fea`: 86 / 100
  - Minor: No `required` list, so every argument is optional.
- `evaluate_sdf`: 88 / 100
- `set_param`: 88 / 100
- `add_path_segment`: 89 / 100
- `capture_animation`: 89 / 100
- `evaluate_script`: 89 / 100
  - Minor: The description is long (527 words). It helps selection but costs steps and tokens.
  - Minor: No `required` list, so every argument is optional.
- `render_preview`: 89 / 100
  - Minor: The description is long (617 words). It helps selection but costs steps and tokens.
  - Minor: Arguments without a description: section.axis, section.position, section.flip, explode.factor, explode.mode.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument section.flip is unclear.
- `repair_script`: 89 / 100
  - Minor: No `required` list, so every argument is optional.
- `diff_geometry`: 90 / 100
  - Minor: No `required` list, so every argument is optional.
- `mesh_to_features`: 91 / 100
  - Minor: No `required` list, so every argument is optional.
- `report_need`: 91 / 100
  - Minor: Arguments without a description: kind.
- `get_project`: 92 / 100
  - Minor: No `required` list, so every argument is optional.
- `execute_cookbook`: 93 / 100
  - Minor: No `required` list, so every argument is optional.
- `open_in_studio`: 94 / 100
  - Minor: The description is long (883 words). It helps selection but costs steps and tokens.
  - Minor: Arguments without a description: attachments[].path, attachments[].bytesBase64, attachments[].assetSha256.
  - Minor: String arguments with no constraint or example: attachments[].bytesBase64.
- `request_upload`: 94 / 100
  - Minor: No `required` list, so every argument is optional.
- `export`: 95 / 100
  - Minor: The description is long (1256 words). It helps selection but costs steps and tokens.
- `inspect`: 95 / 100
  - Minor: The description is long (426 words). It helps selection but costs steps and tokens.
- `get_latest_render`: 97 / 100

Is your server listed here and you would rather it were not? Email support@forecall.dev, and we will take it off within 7 days.

[All scored servers](https://forecall.dev/en/servers)
