← WebMCP Directory

Tool tree

spotigoo.netlify.app

Productivity & BusinessTools verified
Website
Spotigoa voice- and photo-first WebMCP app for reporting civic issues. It uses browser location when allowed, otherwise a labelled demo location, and enforces a human confirmation gate.
Explore capabilities
    report_civic_issueAction

    Prepare a civic issue report when a user wants to report a pothole, road damage, broken streetlight, blocked sidewalk, illegal dumping, flooding, fallen tree, traffic signal problem, graffiti, or another public issue. This creates only a draft in Spotigo; it never contacts a government authority and still requires human confirmation before submission.

    View tool JSON
    {
      "name": "report_civic_issue",
      "kind": "act",
      "impl": "imperative",
      "description": "Prepare a civic issue report when a user wants to report a pothole, road damage, broken streetlight, blocked sidewalk, illegal dumping, flooding, fallen tree, traffic signal problem, graffiti, or another public issue. This creates only a draft in Spotigo; it never contacts a government authority and still requires human confirmation before submission.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "issue_type": {
            "type": "string",
            "enum": [
              "pothole",
              "streetlight",
              "sidewalk",
              "signal",
              "graffiti",
              "trash",
              "tree",
              "flooding",
              "other"
            ]
          },
          "description": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "lat": {
            "type": "number"
          },
          "lng": {
            "type": "number"
          },
          "photo_filename": {
            "type": "string"
          },
          "photo_size_bytes": {
            "type": "number"
          }
        },
        "required": [
          "issue_type",
          "description"
        ]
      }
    }
    describe_issue_accessiblyAnswer

    Create a structured civic issue report draft from a plain-language description. Attach optional photo file metadata when the person selected a photo. Does not submit anything — it only builds a draft for review.

    View tool JSON
    {
      "name": "describe_issue_accessibly",
      "kind": "answer",
      "impl": "imperative",
      "description": "Create a structured civic issue report draft from a plain-language description. Attach optional photo file metadata when the person selected a photo. Does not submit anything — it only builds a draft for review.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "pothole",
              "streetlight",
              "sidewalk",
              "signal",
              "graffiti",
              "trash",
              "tree",
              "flooding",
              "other"
            ],
            "description": "The type of issue. Pick the closest match from the enum."
          },
          "description": {
            "type": "string",
            "description": "Plain-language description of the issue, in the user's own words where possible."
          },
          "location_text": {
            "type": "string",
            "description": "Human-readable location, e.g. 'corner of 5th and Main' or 'in front of the library'."
          },
          "lat": {
            "type": "number",
            "description": "Latitude, if known (e.g. from device GPS)."
          },
          "lng": {
            "type": "number",
            "description": "Longitude, if known (e.g. from device GPS)."
          },
          "photo_filename": {
            "type": "string",
            "description": "Name of an optional photo selected by the human."
          },
          "photo_size_bytes": {
            "type": "number",
            "description": "Byte size of the optional photo selected by the human."
          }
        },
        "required": [
          "category",
          "description"
        ]
      }
    }
    acknowledge_safety_guidanceAction

    Record that the human has heard the urgent safety guidance for a safety-critical draft. Only applies to drafts classified as critical. The human must still explicitly confirm submission afterward.

    View tool JSON
    {
      "name": "acknowledge_safety_guidance",
      "kind": "act",
      "impl": "imperative",
      "description": "Record that the human has heard the urgent safety guidance for a safety-critical draft. Only applies to drafts classified as critical. The human must still explicitly confirm submission afterward.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draft_id": {
            "type": "string"
          },
          "acknowledge": {
            "type": "boolean",
            "description": "Must be explicitly true."
          }
        },
        "required": [
          "draft_id",
          "acknowledge"
        ]
      }
    }
    check_duplicate_reportsAnswer

    Check whether an issue near a given location and category has already been reported recently, to avoid filing a duplicate. Pass a draft_id to reuse its location/category, or pass lat/lng/category directly. Returns duplicate_assessment as one of three structured values an agent can reason about: "NO_NEARBY_REPORTS" (nothing found — safe to proceed), "EXISTING_MATCHING_REPORT" (a report within 25m already covers this, likely the same physical issue), or "POSSIBLE_DUPLICATE" (something nearby but not close enough to be certain). This tool never blocks filing on its own — it only informs the human/agent.

    View tool JSON
    {
      "name": "check_duplicate_reports",
      "kind": "answer",
      "impl": "imperative",
      "description": "Check whether an issue near a given location and category has already been reported recently, to avoid filing a duplicate. Pass a draft_id to reuse its location/category, or pass lat/lng/category directly. Returns duplicate_assessment as one of three structured values an agent can reason about: \"NO_NEARBY_REPORTS\" (nothing found — safe to proceed), \"EXISTING_MATCHING_REPORT\" (a report within 25m already covers this, likely the same physical issue), or \"POSSIBLE_DUPLICATE\" (something nearby but not close enough to be certain). This tool never blocks filing on its own — it only informs the human/agent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draft_id": {
            "type": "string",
            "description": "A draft id from describe_issue_accessibly."
          },
          "lat": {
            "type": "number"
          },
          "lng": {
            "type": "number"
          },
          "category": {
            "type": "string",
            "enum": [
              "pothole",
              "streetlight",
              "sidewalk",
              "signal",
              "graffiti",
              "trash",
              "tree",
              "flooding",
              "other"
            ]
          },
          "radius_meters": {
            "type": "number",
            "description": "Search radius in meters. Defaults to 250."
          }
        }
      }
    }
    read_report_summaryAnswer

    Produce a plain-language, screen-reader-friendly readback of a draft report exactly as it will be submitted. ALWAYS call this and read it back to the user before calling confirm_submission — this is the accessible equivalent of 'reviewing your order before checkout'.

    View tool JSON
    {
      "name": "read_report_summary",
      "kind": "answer",
      "impl": "imperative",
      "description": "Produce a plain-language, screen-reader-friendly readback of a draft report exactly as it will be submitted. ALWAYS call this and read it back to the user before calling confirm_submission — this is the accessible equivalent of 'reviewing your order before checkout'.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draft_id": {
            "type": "string"
          }
        },
        "required": [
          "draft_id"
        ]
      }
    }
    confirm_submissionAction

    Record the human's explicit confirmation that a draft report is accurate and ready to submit. This tool requires confirm=true and must be called only after the human has heard or read the summary from read_report_summary and agreed. submit_report will refuse to run without this.

    View tool JSON
    {
      "name": "confirm_submission",
      "kind": "act",
      "impl": "imperative",
      "description": "Record the human's explicit confirmation that a draft report is accurate and ready to submit. This tool requires confirm=true and must be called only after the human has heard or read the summary from read_report_summary and agreed. submit_report will refuse to run without this.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draft_id": {
            "type": "string"
          },
          "confirm": {
            "type": "boolean",
            "description": "Must be true. Represents the human's explicit yes."
          }
        },
        "required": [
          "draft_id",
          "confirm"
        ]
      }
    }
    submit_reportSensitive Action

    Submit a confirmed draft to the city. Will throw an error if the draft has not been confirmed via confirm_submission first — this is a hard gate, not a suggestion.

    View tool JSON
    {
      "name": "submit_report",
      "kind": "transact",
      "impl": "imperative",
      "description": "Submit a confirmed draft to the city. Will throw an error if the draft has not been confirmed via confirm_submission first — this is a hard gate, not a suggestion.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "draft_id": {
            "type": "string"
          }
        },
        "required": [
          "draft_id"
        ]
      }
    }
    undo_last_actionAction

    Reverse the most recent mutating action taken in this session (e.g. retract a just-submitted report). Operates on a real action history, not a guess — it will say clearly what was undone, or that there is nothing to undo.

    View tool JSON
    {
      "name": "undo_last_action",
      "kind": "act",
      "impl": "imperative",
      "description": "Reverse the most recent mutating action taken in this session (e.g. retract a just-submitted report). Operates on a real action history, not a guess — it will say clearly what was undone, or that there is nothing to undo.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    list_nearby_reportsAnswer

    Browse all civic issue reports near a location, optionally filtered by category. Use this to help a user see what's already been reported in their area, independent of filing a new one.

    View tool JSON
    {
      "name": "list_nearby_reports",
      "kind": "answer",
      "impl": "imperative",
      "description": "Browse all civic issue reports near a location, optionally filtered by category. Use this to help a user see what's already been reported in their area, independent of filing a new one.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number"
          },
          "lng": {
            "type": "number"
          },
          "radius_meters": {
            "type": "number"
          },
          "category": {
            "type": "string",
            "enum": [
              "pothole",
              "streetlight",
              "sidewalk",
              "signal",
              "graffiti",
              "trash",
              "tree",
              "flooding",
              "other"
            ]
          }
        },
        "required": [
          "lat",
          "lng"
        ]
      }
    }
    get_report_statusAnswer

    Look up the current status of a previously filed report by its report id.

    View tool JSON
    {
      "name": "get_report_status",
      "kind": "answer",
      "impl": "imperative",
      "description": "Look up the current status of a previously filed report by its report id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "report_id": {
            "type": "string"
          }
        },
        "required": [
          "report_id"
        ]
      }
    }