← WebMCP Directory

Tool tree

precidra.app

Developer ToolsTools verified
Website
precidra
Explore capabilities
    get_document_infoAnswer

    Return summary metadata about the current Precidra document: filename, overall bounds, paper size, and a per-layer breakdown (object/text counts, visibility). Call this first to orient yourself before querying individual objects. Note: all coordinates, lengths, and areas returned by every tool are in the document's own world-coordinate units, which carry no fixed real-world correspondence (a drawing may be modeled with 1 unit = 1 mm, 1 m, or anything else — only paper size here is a true physical mm value). Infer the intended real-world scale from context — e.g. a door is typically 0.8-1.0 of that unit if the drawing uses meters, or 800-1000 if it uses millimeters; compare a few object sizes via get_object_info to judge which is plausible before reasoning about real-world sizes.

    View tool JSON
    {
      "name": "get_document_info",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return summary metadata about the current Precidra document: filename, overall bounds, paper size, and a per-layer breakdown (object/text counts, visibility). Call this first to orient yourself before querying individual objects. Note: all coordinates, lengths, and areas returned by every tool are in the document's own world-coordinate units, which carry no fixed real-world correspondence (a drawing may be modeled with 1 unit = 1 mm, 1 m, or anything else — only paper size here is a true physical mm value). Infer the intended real-world scale from context — e.g. a door is typically 0.8-1.0 of that unit if the drawing uses meters, or 800-1000 if it uses millimeters; compare a few object sizes via get_object_info to judge which is plausible before reasoning about real-world sizes.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    list_objects_by_layerAnswer

    List the objects on one layer as compact summaries (id, geometric type, label if any, bounding box). Use get_object_info for full detail on a specific object.

    View tool JSON
    {
      "name": "list_objects_by_layer",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the objects on one layer as compact summaries (id, geometric type, label if any, bounding box). Use get_object_info for full detail on a specific object.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "description": "Layer name, from get_document_info"
          }
        },
        "required": [
          "layer"
        ],
        "additionalProperties": false
      }
    }
    get_object_infoAnswer

    Return descriptive facts about one object: geometric type, layer, label (text content or block name, if any), size/shape summary, resolved style, and nearby/contained text relationships. Does not return raw coordinates — use get_object_geometry for that.

    View tool JSON
    {
      "name": "get_object_info",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return descriptive facts about one object: geometric type, layer, label (text content or block name, if any), size/shape summary, resolved style, and nearby/contained text relationships. Does not return raw coordinates — use get_object_geometry for that.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Object id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    }
    get_object_geometryAnswer

    Return the raw contour/vertex data of one object in the document's world coordinates (see get_document_info regarding units). An arc segment is a vertex carrying a 'through' point (the arc's midpoint). Call get_object_info first for a compact summary; use this only when actual coordinates are needed.

    View tool JSON
    {
      "name": "get_object_geometry",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the raw contour/vertex data of one object in the document's world coordinates (see get_document_info regarding units). An arc segment is a vertex carrying a 'through' point (the arc's midpoint). Call get_object_info first for a compact summary; use this only when actual coordinates are needed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Object id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    }
    measure_distanceAnswer

    Compute the minimum distance in world units between two references. Each reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns — useful for "what if" probes against geometry that does not exist in the drawing.

    View tool JSON
    {
      "name": "measure_distance",
      "kind": "answer",
      "impl": "imperative",
      "description": "Compute the minimum distance in world units between two references. Each reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns — useful for \"what if\" probes against geometry that does not exist in the drawing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "description": "EntityRef: { id } or { x, y } or { closed, contours }"
          },
          "to": {
            "type": "object",
            "description": "EntityRef: { id } or { x, y } or { closed, contours }"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "additionalProperties": false
      }
    }
    check_intersectionAnswer

    Test whether two references' geometries intersect, and return the intersection point(s) if so. Each reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns. Read-only — does not modify anything, unlike the interactive boolean operations.

    View tool JSON
    {
      "name": "check_intersection",
      "kind": "answer",
      "impl": "imperative",
      "description": "Test whether two references' geometries intersect, and return the intersection point(s) if so. Each reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns. Read-only — does not modify anything, unlike the interactive boolean operations.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "a": {
            "type": "object",
            "description": "EntityRef: { id } or { x, y } or { closed, contours }"
          },
          "b": {
            "type": "object",
            "description": "EntityRef: { id } or { x, y } or { closed, contours }"
          }
        },
        "required": [
          "a",
          "b"
        ],
        "additionalProperties": false
      }
    }
    find_related_entitiesAnswer

    Find objects — optionally filtered by layer or geometric type — that have a specific spatial relationship to a reference. The reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns. relation uses the standard OGC/DE-9IM spatial-predicate terms (as in PostGIS/Shapely) and is one or more of: "contains" (reference fully encloses the match), "within" (reference lies fully inside the match), "overlapping" (the two share genuine area — covers both OGC "Overlaps" and "Crosses", since which one applies depends on incidental drawing choices like whether a door is a closed rectangle or an open line), "touches" (touch, or nearly touch within adjacentTolerance, without truly overlapping — e.g. two rooms sharing a wall, or a door opening spanning a wall), "close" (within closeDistance but not touching — conceptually like PostGIS ST_DWithin, not a named DE-9IM predicate), "disjoint" (none of the above). Never returns the reference object itself. adjacentTolerance may be omitted — it then defaults to a small multiple of the document's own modeling tolerance, tight enough to only catch geometry that was actually snapped together. closeDistance is more open-ended: since the document's world-coordinate unit has no fixed real-world correspondence (see get_document_info), it should usually be supplied explicitly, scaled to match this document's own units — inspect a few object sizes via get_object_info first to judge that scale — though it falls back to a multiple of the document's primary grid spacing when available. Each match includes layer and area (for a closed match) alongside id/type/label, so a follow-up get_object_info call is often unnecessary. A "touches" match additionally includes contact: { type: "point"|"edge", length?, points }, describing the actual contact geometry — this matters because a single shared corner point (type "point") is a much weaker signal than a real shared wall run (type "edge", with its length) when deciding whether two spaces are meaningfully connected.

    View tool JSON
    {
      "name": "find_related_entities",
      "kind": "answer",
      "impl": "imperative",
      "description": "Find objects — optionally filtered by layer or geometric type — that have a specific spatial relationship to a reference. The reference is an existing object id, a bare {x,y} point, or an explicit on-the-fly geometry using the same {closed, contours} shape get_object_geometry returns. relation uses the standard OGC/DE-9IM spatial-predicate terms (as in PostGIS/Shapely) and is one or more of: \"contains\" (reference fully encloses the match), \"within\" (reference lies fully inside the match), \"overlapping\" (the two share genuine area — covers both OGC \"Overlaps\" and \"Crosses\", since which one applies depends on incidental drawing choices like whether a door is a closed rectangle or an open line), \"touches\" (touch, or nearly touch within adjacentTolerance, without truly overlapping — e.g. two rooms sharing a wall, or a door opening spanning a wall), \"close\" (within closeDistance but not touching — conceptually like PostGIS ST_DWithin, not a named DE-9IM predicate), \"disjoint\" (none of the above). Never returns the reference object itself. adjacentTolerance may be omitted — it then defaults to a small multiple of the document's own modeling tolerance, tight enough to only catch geometry that was actually snapped together. closeDistance is more open-ended: since the document's world-coordinate unit has no fixed real-world correspondence (see get_document_info), it should usually be supplied explicitly, scaled to match this document's own units — inspect a few object sizes via get_object_info first to judge that scale — though it falls back to a multiple of the document's primary grid spacing when available. Each match includes layer and area (for a closed match) alongside id/type/label, so a follow-up get_object_info call is often unnecessary. A \"touches\" match additionally includes contact: { type: \"point\"|\"edge\", length?, points }, describing the actual contact geometry — this matters because a single shared corner point (type \"point\") is a much weaker signal than a real shared wall run (type \"edge\", with its length) when deciding whether two spaces are meaningfully connected.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "object",
            "description": "EntityRef: { id } or { x, y } or { closed, contours }"
          },
          "relation": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "disjoint",
                "close",
                "touches",
                "overlapping",
                "contains",
                "within"
              ]
            },
            "minItems": 1,
            "description": "One or more of: disjoint, close, touches, overlapping, contains, within"
          },
          "layer": {
            "type": "string",
            "description": "Restrict matches to this layer"
          },
          "type": {
            "type": "string",
            "description": "Restrict matches to this geometric type (see get_object_info)"
          },
          "closeDistance": {
            "type": "number",
            "description": "Required if relation includes \"close\" and no grid is available to default from"
          },
          "adjacentTolerance": {
            "type": "number",
            "description": "Optional if relation includes \"touches\" — defaults to a small multiple of the modeling tolerance"
          }
        },
        "required": [
          "entity",
          "relation"
        ],
        "additionalProperties": false
      }
    }